Kubernetes 1.21.x 集群升级实战:kubeadm 从 1.21.0 到 1.21.1 的 6 步操作与 3 个关键验证点
在云原生技术快速迭代的今天,保持Kubernetes集群的版本更新已成为运维工程师的必修课。本文将深入探讨如何通过kubeadm工具安全高效地完成1.21.0到1.21.1的小版本升级,提供可落地的操作指南和关键验证方法。
1. 升级前的关键准备
执行集群升级前,完善的准备工作能规避80%的潜在风险。以下是必须完成的预备步骤:
环境检查清单:
- 确认当前集群版本:
kubectl get nodes -o wide - 检查节点状态:确保所有节点处于
Ready状态 - 备份关键数据:
# 备份etcd数据 etcdctl snapshot save /tmp/etcd-snapshot.db # 备份kubeadm配置 kubectl -n kube-system get cm kubeadm-config -o yaml > kubeadm-config.yaml
版本兼容性验证:
# 检查可升级版本 yum list --showduplicates kubeadm --disableexcludes=kubernetes表:1.21.x版本兼容矩阵
| 当前版本 | 可升级版本 | 是否支持 |
|---|---|---|
| 1.21.0 | 1.21.1 | 是 |
| 1.21.0 | 1.22.0 | 否 |
注意:Kubernetes版本策略要求只能逐小版本升级,禁止跨大版本升级
2. Master节点升级六步法
2.1 节点隔离(Drain)
kubectl drain <master-node> \ --ignore-daemonsets \ --delete-emptydir-data \ --timeout=5m遇到本地存储Pod时添加--delete-emptydir-data参数,但需评估数据丢失风险。
2.2 升级kubeadm工具
# 在线升级 yum install -y kubeadm-1.21.1-0 --disableexcludes=kubernetes # 离线环境需提前下载rpm包 rpm -Uvh kubeadm-1.21.1-0.x86_64.rpm --nodeps2.3 控制平面组件升级
# 查看升级计划 kubeadm upgrade plan # 执行升级(不升级etcd) kubeadm upgrade apply v1.21.1 --etcd-upgrade=false升级过程会自动更新以下组件:
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- kube-proxy
- CoreDNS
2.4 取消节点隔离(Uncordon)
kubectl uncordon <master-node>2.5 升级kubelet和kubectl
yum install -y kubelet-1.21.1-0 kubectl-1.21.1-0 \ --disableexcludes=kubernetes2.6 重启服务并验证
systemctl daemon-reload systemctl restart kubelet # 验证版本 kubectl get nodes3. Worker节点升级流程
Worker节点升级采用"先隔离后升级"策略:
在Master上隔离节点:
kubectl drain <worker-node> --ignore-daemonsets节点上执行升级:
yum install -y kubeadm-1.21.1-0 kubelet-1.21.1-0 kubectl-1.21.1-0 kubeadm upgrade node systemctl restart kubelet恢复节点调度:
kubectl uncordon <worker-node>
4. 三大关键验证点
升级完成后必须验证以下核心指标:
4.1 组件健康状态
kubectl get componentstatuses健康组件应显示Healthy状态。
4.2 Pod重启情况
kubectl get pods -n kube-system \ -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.containerStatuses[0].restartCount}{"\n"}{end}'重点关注核心组件重启次数,异常情况需检查日志:
kubectl logs -n kube-system <pod-name> --previous4.3 API可用性测试
# 基础API测试 kubectl get ns kubectl get nodes # 创建测试Deployment kubectl create deployment nginx-test --image=nginx:alpine kubectl expose deployment nginx-test --port=80 curl <service-ip>5. 多节点集群特殊处理
对于HA集群,需注意:
控制平面升级顺序:
- 第一个Master执行完整升级流程
- 其余Master仅需执行:
kubeadm upgrade node
Worker节点批量升级:
# 使用并行处理(建议每次不超过集群节点的30%) for node in $(kubectl get nodes -l node-role.kubernetes.io/worker -o name); do kubectl drain $node --ignore-daemonsets & done wait网络插件兼容性: 常见CNI插件版本要求:
插件 最低支持版本 Calico v3.15+ Flannel v0.13+ Weave Net v2.6+
6. 异常处理与回滚
当升级出现问题时,可按以下步骤回退:
恢复Master节点:
yum downgrade -y kubeadm-1.21.0-0 kubelet-1.21.0-0 kubectl-1.21.0-0 systemctl restart kubelet恢复etcd数据:
etcdctl snapshot restore /tmp/etcd-snapshot.db \ --data-dir /var/lib/etcdWorker节点回滚:
kubectl cordon <node> yum downgrade -y kubelet-1.21.0-0 kubectl-1.21.0-0 systemctl restart kubelet kubectl uncordon <node>
升级过程中常见的报错及解决方案:
# 证书过期问题 error: You must be logged in to the server (Unauthorized) # 解决方法 kubeadm alpha certs renew all systemctl restart kubelet通过这套完整的升级方案,工程师可以安全地将集群升级到目标版本,同时确保业务连续性。建议在测试环境充分验证后再在生产环境实施。