kubernetes升级
将 Kubernetes 集群从 1.28.2 升级到 1.32.1 需要谨慎操作,不支持直接跨多个主版本升级(Kubernetes 要求每次最多跨越一个主版本)
1.28.2 → 1.29.x → 1.30.x → 1.31.x → 1.32.5我当前版本是 1.28.2,CKA 考试的关系我需要升级到 1.32.5
本文只提供升级步骤,但是因升级导致的任何问题自行处理。
备份关键数据
# 备份 etcd
ETCD_POD=$(kubectl get pods -n kube-system -l component=etcd -o name)
kubectl exec -n kube-system $ETCD_POD -- sh -c "ETCDCTL_API=3 etcdctl \
--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 \
snapshot save /snapshot.db"
kubectl cp -n kube-system $ETCD_POD:/snapshot.db ./etcd-snapshot.db
# 备份集群配置
cp -r /etc/kubernetes ~/kubernetes-backup升级依赖工具
每次升级都要注意修改对应的版本号!
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.ustc.edu.cn/kubernetes/core:/stable:/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
EOF升级
升级的大致步骤:

每次升级一个版本都需要用命令查看当前版本最新的小版本是多少,然后将输出的最新版本的版本号替换到下面的升级命令
升级控制节点
dnf list kubeadmsudo dnf install -y kubeadm-1.28.15-150500.1.1 --disableexcludes=kubernetessudo kubeadm upgrade apply v1.28.15# 排空主节点(如果运行工作负载)
kubectl drain master01 --ignore-daemonsets
# 升级 kubelet 和 kubectl
sudo dnf install -y kubelet-1.28.15-150500.1.1 kubectl-1.28.15-150500.1.1 --disableexcludes=kubernetes
# 重启 kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# 恢复主节点调度
kubectl uncordon master01其他的控制节点一样的操作。
升级工作节点(对每个工作节点执行)
# 在每个工作节点上:
# 注意工作节点可能无法使用kubectl需要在控制节点运行下面的排空命令
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
sudo dnf install -y kubelet-1.28.5-0 kubectl-1.28.5-0 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet验证升级结果:
# 检查节点版本
kubectl get nodes -o wide
# 检查组件状态
kubectl get pods -n kube-system
# 检查集群版本
kubectl version --short
# 检查 kubeadm 版本
kubeadm version