Kubernetes集群维护

艺帆风顺 发布于 2025-04-02 22 次阅读


Kubernetes集群维护

Etcd数据库备份与恢复

需要先安装etcd备份工具

         

yum install etcd -y

         

kubeadm部署方式:

备份:

ETCDCTL_API=3 etcdctl  snapshot save snap.db  --endpoints=https://127.0.0.1:2379  --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/server.crt  --key=/etc/kubernetes/pki/etcd/server.key

恢复:

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 snap.db  --data-dir=/var/lib/etcd 

3、启动kube-apiserver和etcd容器 mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests

         

二进制部署方式:

备份:

ETCDCTL_API=3 etcdctl snapshot save snap.db --endpoints=https://192.168.31.71:2379 --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem

恢复:

1、先暂停kube-apiserver和etcd systemctl stop kube-apiserver systemctl stop etcd mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak 

2、在每个节点上恢复 ETCDCTL_API=3 etcdctl snapshot restore snap.db --name etcd-1 --initial-cluster="etcd-1=https://192.168.31.71:2380,etcd2=https://192.168.31.72:2380,etcd-3=https://192.168.31.73:2380" --initial-cluster-token=etcd-cluster --initial-advertise-peer-urls=https://192.168.31.71:2380 --data-dir=/var/lib/etcd/default.etcd 

3、启动kube-apiserver和etcd systemctl start kube-apiserver systemctl start etcd

         

K8s集群版本升级

         

注意事项:

• 升级前必须备份所有组件及数据,例如etcd

• 千万不要跨多个小版本进行升级,例如从1.16升级到1.19

• 在测试环境经过多次演练,实操,才能上生产环境

升级管理节点:

1、查找最新版本号

yum list --showduplicates kubeadm

2、升级kubeadm

yum install -y kubeadm-1.23.0-0

3、驱逐node上的pod,且不可调度

kubectl drain k8s-master --ignore-daemonsets

4、检查集群是否可以升级,并获取可以升级的版本

kubeadm upgrade plan

5、执行升级

kubeadm upgrade apply v1.23.0

6、升级kubelet和kubectl

yum install -y kubelet-1.23.0-0 kubectl-1.23.0-0

7、重启kubelet

systemctl daemon-reload

systemctl restart kubelet

8、取消不可调度,重新上线

kubectl uncordon k8s-master

         

升级工作节点:

1、升级kubeadm

yum install -y kubeadm-1.23.0-0

2、驱逐node上的pod,且不可调度

kubectl drain k8s-node1 --ignore-daemonsets

3、升级kubelet配置

kubeadm upgrade node

4、升级kubelet和kubectl

yum install -y kubelet-1.23.0-0 kubectl-1.23.0-0

5、重启kubelet

systemctl daemon-reload

systemctl restart kubelet

6、取消不可调度,重新上线

kubectl uncordon k8s-node1

         

K8s集群节点正确下线流程

维护某个节点或者删除节点, 正确流程如下:

1、获取节点列表

kubectl get node

2、驱逐节点上的Pod并设置不可调度(cordon)

kubectl drain--ignore-daemonsets

3、 设置可调度或者移除节点

kubectl uncordon

kubectl delete node

K8s集群故障排查

         

应急处理流程

         

排查思路

K8s 故障排查: 案例1

故障现象:

kubectl get node节点处于NotReady

排查思路:

查看kubelet和docker服务是否正常

分析kubelet日志

         

K8s 故障排查: 案例2

故障现象:

Pod运行不正常

排查思路:

• 根据Pod状态假设:

https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/

• 查看资源详情:

kubectl describe TYPE/NAME

• 查看容器日志:

kubectl logs TYPE/NAME [-c CONTAINER]

         

K8s 故障排查: 案例3

故障现象:

互联网用户无法访问应用(Ingress或者Service无法访问)

排查思路:

• Pod正常工作吗?

• Service是否关联Pod?

• Service指定target-port端口是否正确?

• 如果用名称访问, DNS是否正常工作?

• kube-proxy正常工作吗? 是否正常写iptables规则?

• CNI网络插件是否正常工作?