Kubernetes1.27.1升级到1.30
注意事项
- 备份现有集群数据和配置:确保您已经备份了 etcd 数据和所有重要配置。
- 逐步升级:不要直接跨多个主版本进行升级,官网建议您逐步升级。例如,从 1.27 升级到 1.28,然后 1.29,依次进行。
- 升级前先阅读每个版本的发布说明:每个版本的升级指南和
change logs非常重要。 - 保持节点操作系统和Kubernetes组件版本一致:控制平面组件和节点的 kubelet / kube-proxy 都需要升级。
升级步骤
以下步骤讲解逐步骤将 Kubernetes 从 1.27.6 升级到 1.31。每一步完成后,确保集群是健康的。
升级master组件(一台一台进行)
步骤标准如升级先控制平面节点,可以逐步完成以下工作:
- 下载新版本的 kubeadm 和 kubectl
首先,更新 kubeadm 和 kubectl:
yum upgrade kubeadm-1.28.0 --disableexcludes=kubernetes -y
- 运行 kubeadm upgrade
运行 kubeadm upgrade 命令进行升级:
kubeadm upgrade apply v1.28.0 -y
该命令会拉取新版本的控制组件镜像,并更新 cluster state。

- 更新 kubelet 和 kubectl
升级 kubelet 和 kubectl:
yum upgrade kubelet-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes -y
- 重启并检查 kubelet
配置升级后,重启并检查:
systemctl daemon-reload
systemctl restart kubelet
接下来升级所有其他node节点:
- Drain Node
升级之前先将工作节点排空:
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data
- 升级 kubeadm/kubelet/kubectl 版本
yum upgrade kubeadm-1.28.0 kubelet-1.28.0-0 --disableexcludes=kubernetes
systemctl daemon-reload
systemctl restart kubelet
- Uncordon Node
升级后恢复节点:
kubectl uncordon node1
验证集群状态
kubectl get nodes
kubectl get pods -A
kubectl cluster-info

升级到1.29版本
从29版本开始,改变k8s 源地址
mv /etc/yum.repos.d/kubernetes.repo /etc/yum.repos.d/kubernetes.repo-bk #备份源
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
yum clean all
yum makecache -y
yum list kubeadm --showduplicates | sort -r
接下来的版本逐步进行类似步骤
继续升级到 1.29
yum upgrade kubeadm-1.29.0 --disableexcludes=kubernetes -y
kubeadm upgrade apply v1.29.0 -y
yum upgrade kubelet-1.29.0 kubectl-1.29.0 --disableexcludes=kubernetes -y
#重启 kubelet
systemctl daemon-reload
systemctl restart kubelet
# 每个节点重复以上步骤

接下来升级node节点:
- Drain Node
升级之前先将工作节点排空:
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data
- 升级 kubeadm/kubelet/kubectl 版本
yum upgrade kubeadm-1.29.0 kubelet-1.29.0 --disableexcludes=kubernetes -y
systemctl daemon-reload
systemctl restart kubelet
- Uncordon Node
升级后恢复节点:在master操作
kubectl uncordon node1
验证集群状态
kubectl get nodes
kubectl get pods -A
kubectl cluster-info

升级到1.30版本
所有节点操作
修改k8s源
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
yum clean all
yum makecache -y
yum list kubeadm --showduplicates | sort -r
master节点升级1.30版本:
yum upgrade kubeadm-1.30.5 --disableexcludes=kubernetes -y
kubeadm upgrade apply v1.30.5
yum upgrade kubelet-1.30.5 kubectl-1.30.5 --disableexcludes=kubernetes -y
# 重启 kubelet
systemctl daemon-reload
systemctl restart kubelet

接来升级node节点:
- Drain Node
升级之前先将工作节点排空:
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data
- 升级 kubeadm/kubelet/kubectl 版本
yum upgrade kubeadm-1.30.5 kubelet-1.30.5 --disableexcludes=kubernetes -y
systemctl daemon-reload
systemctl restart kubelet
- Uncordon Node
升级后恢复节点:在master操作
kubectl uncordon node1
验证集群状态
kubectl get nodes
kubectl get pods -A
kubectl cluster-info

升级到1.31版本
所有节点操作
修改k8s源
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
yum clean all
yum makecache -y
yum list kubeadm --showduplicates | sort -r
master节点升级1.30版本:
yum upgrade kubeadm-1.31.0 --disableexcludes=kubernetes -y
kubeadm upgrade apply v1.31.0 -y
yum upgrade kubelet-1.31.0 kubectl-1.31.0 --disableexcludes=kubernetes
# 重启 kubelet
systemctl daemon-reload
systemctl restart kubelet
# 每个节点重复以上步骤

接来升级node节点:
- Drain Node
升级之前先将工作节点排空:
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data
升级工作节点
继续逐个升级到目标版本:
yum upgrade kubeadm-1.31.0 kubelet-1.31.0 kubectl-1.31.0 --disableexcludes=kubernetes
systemctl daemon-reload
systemctl restart kubelet
- Uncordon Node
升级后恢复节点:
kubectl uncordon node1
验证集群状态
升级完成后,检查集群健康状态:
kubectl get nodes
kubectl get pods -A
kubectl cluster-info

确保所有节点和组件均运行正常。必要时检查具体组件日志和配置项,确保无遗漏问题和事项。
评论区