Home

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 kubeadm
sudo dnf install -y kubeadm-1.28.15-150500.1.1 --disableexcludes=kubernetes
sudo 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
Kubernetes AI