如何在CentOS上更新Kubernetes(k8s)版本
在CentOS上更新Kubernetes版本需遵循备份先行、分步升级、严格验证的原则,以下是详细操作流程:
升级前务必备份集群配置与数据,避免操作失误导致数据丢失:
etcdctl snapshot save /var/lib/etcd/backup/snapshot.db
cp /root/.kube/config /root/.kube/config.backup
确认集群节点与Pod运行正常,无未处理的异常:
kubectl get nodes # 查看节点状态(应为Ready)
kubectl get pods -A # 查看所有命名空间的Pod状态(应为Running)
kubectl version --short
yum list --showduplicates kubeadm --disableexcludes=kubernetes
在Master节点上,使用yum更新kubeadm到目标版本:
sudo yum update -y kubeadm --disableexcludes=kubernetes
通过kubeadm检查集群是否满足升级条件,并获取升级脚本:
sudo kubeadm upgrade plan v<new-version> # 替换<new-version>为目标版本(如1.24.0)
该命令会输出升级前的检查项(如容器运行时版本、etcd版本)及升级步骤,确认无误后继续。
执行升级命令,更新Master节点的控制平面组件(kube-apiserver、kube-controller-manager、kube-scheduler):
sudo kubeadm upgrade apply v<new-version>
升级过程中会提示确认操作,输入yes即可。升级完成后,kubeadm会自动更新Master节点的kubelet配置文件。
更新Master节点上的kubelet和kubectl工具:
sudo yum install -y kubelet-<new-version> kubectl-<new-version> --disableexcludes=kubernetes
sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl restart kubelet # 重启kubelet服务
在每个Worker节点上,执行与Master节点相同的命令升级kubelet和kubectl:
sudo yum install -y kubelet-<new-version> kubectl-<new-version> --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
在Master节点上,使用kubeadm将Worker节点升级到新版本:
sudo kubeadm upgrade node
该命令会自动同步Worker节点的控制平面组件版本。升级完成后,Worker节点会自动重启kubelet服务。
升级后,Worker节点可能处于NotReady状态,需手动解除不可调度限制:
kubectl uncordon <node-name> # 替换<node-name>为节点名称(通过kubectl get nodes查看)
确认所有节点已恢复正常状态(Ready):
kubectl get nodes
确认所有Pod均在运行(Running):
kubectl get pods -A
验证Master节点与Worker节点的Kubernetes版本一致:
kubectl version --short
若升级成功且运行稳定,可删除旧版本的Kubernetes组件以释放磁盘空间:
sudo yum remove -y kubeadm-<old-version> kubelet-<old-version> kubectl-<old-version> # 替换<old-version>为旧版本号