k8s运维问题整理

解决Kubernetesetcd宕机与恢复问题:故障排查与数据管理
1.宕机或异常重启导致etcd启动失败

服务器非正常关机(意外掉电、强制拔电)后 etcd 数据损坏。
查看apiserver日志发现出现报错Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused,2379是etcd的端口,那么apiserver是由于etcd无法连接而启动不了

参考资料:https://blog.youkuaiyun.com/kali_yao/article/details/126810964

处理办法
查看etcd和api-server服务状态及日志
docker ps -a|grep etcd
docker ps -a|grep api-server

#1.不知道路径可以查找etcd数据目录
find / -type d -name member
cd /var/lib/etcd/member
mv /var/lib/etcd/member /root/member.back
# 注:在故障节点执行,删除或者移走备份都可以

#1.重启etcd
docker ps -a|grep etcd
docker rm -f etcd的ID        # 所有节点执行
systemctl restart kubelet    # 重启kubelet

#2.查看
kubectl get pods
# 注:此时没有报错了
etcd数据备份与恢复

https://www.cnblogs.com/huanglingfa/p/13773397.html

# 首先需要安装etcdctl 命令行命令
yum install -y etcd

# 备份
# 可 export ETCDCTL_API=3 设定临时环境变量,防止每次重复输入
# 注意 snapshot.db 是当前路径,可以指定路径
ETCDCTL_API=3 etcdctl \
  snapshot save snapshot.db \  
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/peer.crt \
  --key=/etc/kubernetes/pki/etcd/peer.key

# 查看文件存储的信息
ETCDCTL_API=3 etcdctl snapshot status snapshot.db

# kubeadm 部署恢复etcd数据库
# 1、先暂停kube-apiserver和etcd容器
mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
mv /var/lib/etcd/ /var/lib/etcd.bak
# 2、恢复
ETCDCTL_API=3 etcdctl \
  snapshot restore snapshot.db \
  --data-dir=/var/lib/etcd
# 3、启动kube-apiserver和etcd容器
mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
mv /var/lib/etcd.bak  /var/lib/etcd/
# 环境准备,复制容器中的etcdctl命令出来
docker ps | grep etcd
docker cp baf3e1a53c2c:/usr/local/bin/etcdctl /usr/bin/

# 创建定时任务 crontab -e
0 * * * * /opt/k8s_bak/backup_etcd.sh

#!/bin/bash
BACKUP_FILE="snapshot.db"
BACKUP_PATH="/opt/k8s_bak/"
ETCDCTL_API=3 etcdctl snapshot save $BACKUP_PATH$BACKUP_FILE --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key
echo "etcd backup completed at $(date)"
2.安装k8s集群cilium一直重启
docker ps -a
# 查看已关闭容器日志
# 发现报错日志:nsenter: cannot open /hostproc/1/ns/cgroup: No such file or directory

- hostPath:
  path: /proc # 也就是说是宿主机的这个目录中没有 /proc/1/ns/cgroup 这个文件。

# 使用cilium,因linux内核版本过低无法启动,issues:https://github.com/rancher/rke2/issues/3571
3.K8S Flannel Pod 无法启动系列问题

“cni0” already has an IP address different from

# 可以使用 IP 命令直接修改
sudo ip address flush dev cni0
sudo ip address change 10.244.X.1/24 dev cni0

# 或是删除 cni0 让 K8S 自动重建
sudo ip link set cni0 down
sudo ip link delete cni0
4.修改默认端口范围
vim /etc/kubernetes/manifests/kube-apiserver.yaml

# 添加到如下位置就行了
- command:
   - kube-apiserver
   - --service-node-port-range=1-65535

# 直接删除kube-apiserver  pod 就行了 会自动重启
# 多master节点,需删除所有
# kubectl delete pod kube-apiserver-qa-01.df-emall.com -n kube-system
# kubectl delete pod kube-apiserver-qa-04.df-emall.com -n kube-system
5.k8s备份工具velero

Github:https://github.com/vmware-tanzu/velero
Velero(之前称为Heptio Ark)是一个备份和还原Kubernetes集群的流行工具,支持备份和还原Kubernetes对象、PV和Namespace等资源。Velero能够备份到本地存储和云存储(如AWS S3和Google Cloud Storage),还支持在不同集群之间迁移数据。

<think>好的,我现在需要帮助用户总结Kubernetes运维的常用命令。首先,用户明确提到想查找与k8s运维相关的常用命令,所以我需要确保覆盖各个主要方面,比如资源查看、部署管理、日志调试、配置维护和故障排查等。 接下来,我需要参考用户提供的引用内容。引用[1]提到了Kubespray安装流程和一些检查集群状态的命令,比如kubectl检查集群状态,这可能涉及到kubectl get nodes或者kubectl get pods等命令。引用[2]提到了Controller,比如Deployment、ReplicaSet、DaemonSet等,所以可能需要包括查看和管理这些资源的命令,比如kubectl get deployments。引用[3]则直接给出了查看StatefulSet和DaemonSet的具体命令,比如kubectl get statefulset和kubectl describe statefulset,这些应该包含在总结中。 我需要将这些引用中的命令整合到相应的分类里。例如,资源查看部分应该包括集群状态、节点、Pod、Service、Deployment、StatefulSet、DaemonSet等。然后,部署管理可能涉及apply、delete、scale等命令。日志和调试部分需要logs、describe、exec等。配置维护包括编辑资源和导出配置。故障排查可能需要top和events相关命令。 同时,用户可能还需要一些实际操作的示例,比如如何扩展Deployment的副本数,如何进入Pod的shell,这些都需要具体命令示例。另外,引用[3]中的持久化存储和StatefulSet相关命令也要提到,因为用户提到了持久化存储的问题。 还需要注意命令的正确性和常用性,避免不常用或过于复杂的命令。此外,用户可能希望命令清晰分类,方便查找,所以结构要条理分明。最后,生成相关问题,如如何查看Pod日志、如何扩展应用实例等,帮助用户进一步学习。 现在需要检查是否有遗漏的重要命令,比如查看服务(kubectl get svc)、查看命名空间(kubectl get ns)、查看事件(kubectl get events)等。同时,确保每个部分的命令都有例子,并且符合用户的需求。例如,用户可能需要知道如何删除资源,所以kubectl delete命令必不可少。 总结下来,我需要按照资源查看、部署管理、日志调试、配置维护、故障排查几个大类来组织命令,每个类下列出常用命令及示例,并参考用户提供的引用内容,确保覆盖StatefulSet、DaemonSet、Controller等相关命令。最后,生成相关问题,帮助用户深入理解。</think>### Kubernetes 运维常用命令总结 以下是 Kubernetes 运维工作中常用的命令分类整理,涵盖资源查看、部署管理、日志调试、配置维护和故障排查等场景。 --- #### 一、**资源查看类** 1. **集群状态检查** - 查看集群节点状态: ```bash kubectl get nodes ``` - 查看所有命名空间的资源概况: ```bash kubectl get all --all-namespaces ``` - 检查组件健康状态(如 kube-apiserver): ```bash kubectl get componentstatuses ``` 2. **Pod 相关** - 查看 Pod 列表(默认命名空间): ```bash kubectl get pods ``` - 查看 Pod 详细信息(含事件和状态): ```bash kubectl describe pod <pod-name> ``` - 查看 Pod 所在节点和 IP: ```bash kubectl get pods -o wide ``` 3. **Controller 资源** - 查看 Deployment: ```bash kubectl get deployments ``` - 查看 StatefulSet(常用于有状态服务)[^3]: ```bash kubectl get statefulset ``` - 查看 DaemonSet(确保每个节点运行 Pod): ```bash kubectl get daemonset ``` 4. **服务与网络** - 查看 Service 列表: ```bash kubectl get services ``` - 查看 Ingress 配置: ```bash kubectl get ingress ``` --- #### 二、**部署与更新类** 1. **应用部署** - 通过 YAML 文件部署资源: ```bash kubectl apply -f deployment.yaml ``` - 删除资源: ```bash kubectl delete -f deployment.yaml ``` 2. **扩缩容** - 调整 Deployment 副本数: ```bash kubectl scale deployment/<deployment-name> --replicas=3 ``` 3. **滚动更新与回滚** - 更新镜像版本: ```bash kubectl set image deployment/<deployment-name> <container-name>=<new-image> ``` - 查看更新历史: ```bash kubectl rollout history deployment/<deployment-name> ``` - 回滚到上一版本: ```bash kubectl rollout undo deployment/<deployment-name> ``` --- #### 三、**日志与调试类** 1. **查看日志** - 查看 Pod 日志: ```bash kubectl logs <pod-name> ``` - 实时追踪日志: ```bash kubectl logs -f <pod-name> ``` 2. **进入容器调试** - 进入 Pod 的 Shell 环境: ```bash kubectl exec -it <pod-name> -- /bin/bash ``` --- #### 四、**配置管理类** 1. **资源编辑** - 直接编辑资源配置(如 Deployment): ```bash kubectl edit deployment/<deployment-name> ``` 2. **配置导出** - 导出资源配置为 YAML: ```bash kubectl get deployment/<deployment-name> -o yaml > config.yaml ``` --- #### 五、**故障排查类** 1. **资源监控** - 查看资源使用情况(需安装 Metrics Server): ```bash kubectl top nodes # 节点资源 kubectl top pods # Pod 资源 ``` 2. **事件查询** - 查看集群事件(按时间排序): ```bash kubectl get events --sort-by=.metadata.creationTimestamp ``` --- ### 代码示例:检查 StatefulSet 状态[^3] ```bash # 查看 StatefulSet 详细信息 kubectl describe statefulset <statefulset-name> # 删除 StatefulSet kubectl delete statefulset <statefulset-name> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值