备份关键数据
升级前必须备份集群配置及数据,避免操作失误导致数据丢失:
/etc/kubernetes/目录(包含kube-apiserver、kube-controller-manager等组件的配置文件);/var/lib/etcd/目录(etcd数据库存储集群状态的核心数据);etcdctl工具备份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
检查集群状态
确保集群所有节点及Pod运行正常:
kubectl get nodes # 确认所有节点状态为"Ready"
kubectl get pods -A # 检查所有命名空间的Pod是否处于"Running"状态
确认版本兼容性
Kubernetes升级需遵循顺序升级原则(不能跳过次版本,如1.y→1.y+1,禁止1.y→1.y+2)。升级前查阅官方文档,确认当前版本与目标版本的兼容性,以及第三方组件(如CNI插件、存储驱动)是否支持目标版本。
配置Kubernetes仓库
确保所有节点的kubernetes.repo仓库指向最新版本(以CentOS 7为例):
cat << EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
升级kubeadm
kubeadm是升级控制平面的核心工具,需先升级至目标版本:
sudo yum update -y kubeadm --disableexcludes=kubernetes
kubeadm version # 验证kubeadm版本是否为目标版本
检查升级计划
使用kubeadm upgrade plan命令确认集群可升级的版本,并获取升级脚本:
kubeadm upgrade plan
输出会显示当前版本、可升级的目标版本及需要升级的组件(如kube-apiserver、kube-controller-manager等)。
执行控制平面升级
根据kubeadm upgrade plan的输出,执行升级命令(以升级到1.28.2为例):
sudo kubeadm upgrade apply v1.28.2
升级过程中会自动下载并安装新版本的控制平面组件(kube-apiserver、kube-controller-manager、kube-scheduler等)。
升级Master节点组件
sudo yum update -y kubelet kubectl --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon k8s-master # 替换为Master节点名称
手动升级其他组件(可选)
若kubeadm upgrade plan提示需要手动升级(如kube-proxy、CoreDNS),可参考官方文档执行相应命令(如kubectl apply -f https://github.com/kubernetes/kubernetes/releases/download/v1.28.2/coredns.yaml)。
腾空节点
将Worker节点标记为不可调度,并驱逐所有Pod(避免升级过程中Pod中断):
kubectl drain k8s-node1 --ignore-daemonsets # 替换为Worker节点名称
升级Worker节点组件
sudo yum update -y kubelet kubectl --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
升级kubeadm(可选)
若Worker节点的kubeadm版本落后于Master节点,需升级至相同版本:
sudo yum update -y kubeadm --disableexcludes=kubernetes
执行节点升级
使用kubeadm upgrade node命令升级节点:
sudo kubeadm upgrade node
解除节点保护
升级完成后,将Worker节点标记为可调度:
kubectl uncordon k8s-node1 # 替换为Worker节点名称
检查集群状态
确认所有节点状态为"Ready":
kubectl get nodes
检查Pod状态
确认所有Pod正常运行:
kubectl get pods -A
验证组件版本
检查kube-apiserver、kube-controller-manager等组件的版本是否为目标版本:
kubectl version --short