如何在CentOS上升级Kubernetes(K8s)版本
升级Kubernetes集群需遵循“准备充分、渐进执行、验证到位”的原则,以下是基于kubeadm工具的标准流程及关键注意事项:
备份关键数据
备份集群配置(/etc/kubernetes/目录)和etcd数据(etcd是K8s的核心存储组件),确保升级失败时可快速恢复。etcd备份命令示例:
etcdctl snapshot save /data/etcd/etcd_bak.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
检查集群健康状态
确保集群无未解决问题:
kubectl get pods -n kube-system -l component=kube-apiserver(需全部为Running);kubectl get nodes(所有节点需为Ready);kubectl get pods --all-namespaces --field-selector status.phase!=Running(无CrashLoopBackOff或Error状态的Pod)。确认升级路径
Kubernetes不支持跨多个次要版本跳跃升级(如从1.22直接升级到1.25),必须遵循“相邻次要版本递进”规则(如1.22→1.23→1.24→1.25)。可通过kubectl version查看当前版本,在官方升级文档中确认目标版本的兼容性。
检查组件兼容性
确保周边组件与目标K8s版本匹配:
containerd(K8s 1.25对应containerd 1.6+);kubectl版本需与集群版本相差不超过1个次要版本(如集群1.24,kubectl需为1.23-1.25)。配置Kubernetes Repo仓库
在所有节点上配置官方Kubernetes repo,确保能下载新版本软件包:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
(1)升级kubeadm工具
在Master节点上,使用yum安装新版本kubeadm(以升级到1.25为例):
sudo yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
(2)检查升级计划
运行kubeadm upgrade plan,确认集群可升级的目标版本及需要修改的配置:
kubeadm upgrade plan
# 输出示例:建议升级到v1.25.0,当前版本v1.24.3
(3)执行控制平面升级
使用kubeadm upgrade apply升级控制平面组件(kube-apiserver、kube-controller-manager、kube-scheduler):
sudo kubeadm upgrade apply v1.25.0
升级完成后,系统会提示“升级成功”,控制平面组件会自动重启。
(4)升级kubelet和kubectl
在Master节点上升级kubelet和kubectl:
sudo yum install -y kubelet-1.25.0-00 kubectl-1.25.0-00 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
(5)解除Master节点保护
升级后,将Master节点标记为可调度(允许Pod调度到Master):
kubectl uncordon <master-node-name>
(1)逐个升级工作节点
为避免集群中断,每次仅升级1个Worker节点,重复以下步骤:
kubectl drain <worker-node-name> --ignore-daemonsets
kubeadm(与Master版本一致):sudo yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
kubelet和kubectl并重启服务。(2)升级节点组件
在Master节点上,使用kubeadm upgrade node升级工作节点的组件:
sudo kubeadm upgrade node
(3)解除节点保护
升级完成后,将工作节点标记为可调度:
kubectl uncordon <worker-node-name>
(4)验证节点状态
等待节点状态变为Ready(kubectl get nodes),确认Pod恢复正常运行(kubectl get pods --all-namespaces)。
检查集群状态
kubectl get nodes # 所有节点应为Ready状态
kubectl get pods -A # 所有Pod应为Running状态
检查组件日志
查看K8s组件日志,确认无错误信息:
sudo journalctl -u kubelet -f
sudo journalctl -u kube-apiserver -f
测试业务功能
访问集群内的业务Pod(如curl http://<pod-ip>:<port>),确认业务正常运行。
/etc/kubernetes/和/var/lib/etcd/,以便快速回滚。通过以上步骤,可确保CentOS上的Kubernetes集群平稳升级到目标版本,同时保障业务连续性。升级前务必在测试环境验证流程,降低生产环境风险。