[1️⃣ 查看集群状态(Master 节点)](#1️⃣ 查看集群状态(Master 节点))
[2️⃣ 备份 etcd 数据(Master 节点)](#2️⃣ 备份 etcd 数据(Master 节点))
[3️⃣ 备份 kubeadm 配置(Master 节点)](#3️⃣ 备份 kubeadm 配置(Master 节点))
[4️⃣ 配置 Kubernetes 国内 YUM 仓库(Master + Node 节点)](#4️⃣ 配置 Kubernetes 国内 YUM 仓库(Master + Node 节点))
[5️⃣ 查看可用版本(Master + Node 节点)](#5️⃣ 查看可用版本(Master + Node 节点))
[二、升级 Master 节点](#二、升级 Master 节点)
[6️⃣ 安装 kubeadm v1.21(Master01)](#6️⃣ 安装 kubeadm v1.21(Master01))
[7️⃣ 查看升级计划(Master01)](#7️⃣ 查看升级计划(Master01))
[8️⃣ 升级控制平面到 v1.21(Master01)](#8️⃣ 升级控制平面到 v1.21(Master01))
[9️⃣ 升级 Master kubelet 和 kubectl(Master01)](#9️⃣ 升级 Master kubelet 和 kubectl(Master01))
[三、升级 Node 节点(逐个执行)](#三、升级 Node 节点(逐个执行))
[10️⃣ 在 Master01 标记 Node 为不可调度](#10️⃣ 在 Master01 标记 Node 为不可调度)
[11️⃣ 在 Node 本地升级 kubeadm/kubelet/kubectl](#11️⃣ 在 Node 本地升级 kubeadm/kubelet/kubectl)
[12️⃣ 在 Master01 恢复 Node 调度](#12️⃣ 在 Master01 恢复 Node 调度)
[13️⃣ 重复步骤 10-12 对所有 Node 升级](#13️⃣ 重复步骤 10-12 对所有 Node 升级)
前言
在企业生产环境中,Kubernetes 升级必须保证平滑进行,不能影响业务服务。本篇文章将详细介绍如何将集群从 v1.20 升级到 v1.21 ,并在每一步明确 操作节点,确保升级安全可控。
一、升级前准备
升级前,必须先做好充分的准备,包括集群状态检查、数据备份和软件仓库配置。
1️⃣ 查看集群状态(Master 节点)
在 Master01 节点执行:
kubectl version --short
kubectl get nodes
kubectl get pods -A
确认 Master 与 Node 状态正常,Pod 正常运行。
2️⃣ 备份 etcd 数据(Master 节点)
wget https://github.com/etcd-io/etcd/releases/download/v3.5.7/etcd-v3.5.7-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.7-linux-amd64.tar.gz
sudo mv etcd-v3.5.7-linux-amd64/etcdctl /usr/local/bin/
ETCDCTL_API=3 etcdctl snapshot save /root/etcd-backup.db \
--endpoints=127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/peer.crt \
--key=/etc/kubernetes/pki/etcd/peer.key
备份 etcd 可以在升级失败时快速恢复集群。
3️⃣ 备份 kubeadm 配置(Master 节点)
cp /etc/kubernetes/admin.conf ~/admin.conf.backup
4️⃣ 配置 Kubernetes 国内 YUM 仓库(Master + Node 节点)
在 Master01、Node01、Node02 节点执行:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean all
yum makecache
5️⃣ 查看可用版本(Master + Node 节点)
yum list kubeadm --showduplicates | sort -r
本次升级选择
v1.21.14
作为目标版本。
二、升级 Master 节点
Master 节点是控制平面,升级必须小心操作。
6️⃣ 安装 kubeadm v1.21(Master01)
yum install -y kubeadm-1.21.14-0
7️⃣ 查看升级计划(Master01)
kubeadm upgrade plan
确认可升级版本和依赖组件。
8️⃣ 升级控制平面到 v1.21(Master01)
kubeadm upgrade apply v1.21.14
9️⃣ 升级 Master kubelet 和 kubectl(Master01)
yum install -y kubelet-1.21.14-0 kubectl-1.21.14-0
systemctl daemon-reload
systemctl restart kubelet
至此,Master 节点控制平面已经成功升级到 v1.21。
三、升级 Node 节点(逐个执行)
Node 节点升级需要确保 Pod 不丢失 ,因此要配合 Master 执行 cordon/drain。
10️⃣ 在 Master01 标记 Node 为不可调度
kubectl cordon <node-name>
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
⚠ 注意:
--delete-local-data
已废弃,新版本使用--delete-emptydir-data
。
11️⃣ 在 Node 本地升级 kubeadm/kubelet/kubectl
yum install -y kubeadm-1.21.14-0 kubelet-1.21.14-0 kubectl-1.21.14-0
systemctl daemon-reload
systemctl restart kubelet
12️⃣ 在 Master01 恢复 Node 调度
kubectl uncordon <node-name>
13️⃣ 重复步骤 10-12 对所有 Node 升级
逐个节点升级,保证业务 Pod 在其他节点可用,避免服务中断。
四、升级验证(Master01)
升级完成后,验证集群和 Pod 状态:
kubectl get nodes
kubectl get pods -A
kubectl version --short
-
所有 Master/Node 节点显示 v1.21
-
Pod 正常运行,无异常状态

五、升级注意事项
-
逐个节点升级,保证服务不中断。
-
CNI 插件:升级前确认兼容 v1.21。
-
PodDisruptionBudget:升级 Node 时可能需要临时调整或删除。
-
备份:升级前务必备份 etcd 和 kubeadm 配置。
-
节点操作总结:
-
Master 节点:执行 kubeadm 升级 + kubelet/kubectl 升级
-
Node 节点:执行软件升级和 kubelet 重启
-
**Master 执行 cordon/drain/uncordon 管理 Pod 调度
-
跨多版本升级需要逐步升级,如1.20升级到1.22则需要1.20→1.21→1.22,以此类推
-
总结
通过以上步骤,你可以平滑地将 Kubernetes 集群从 v1.20 升级到 v1.21,保证服务持续可用,并为后续升级到更高版本打下基础。