☰
Kubernetes 1.21.x 集群升级实战:kubeadm 从 1.21.0 到 1.21.1 的 6 步操作与 3 个关键验证点
2026/10/26 23:47:20 网站建设 项目流程

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.01.21.1是
1.21.01.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 --nodeps

2.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=kubernetes

2.6 重启服务并验证

systemctl daemon-reload systemctl restart kubelet # 验证版本 kubectl get nodes

3. Worker节点升级流程

Worker节点升级采用"先隔离后升级"策略:

  1. 在Master上隔离节点:

    kubectl drain <worker-node> --ignore-daemonsets
  2. 节点上执行升级:

    yum install -y kubeadm-1.21.1-0 kubelet-1.21.1-0 kubectl-1.21.1-0 kubeadm upgrade node systemctl restart kubelet
  3. 恢复节点调度:

    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> --previous

4.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集群,需注意:

  1. 控制平面升级顺序:

    • 第一个Master执行完整升级流程
    • 其余Master仅需执行:
      kubeadm upgrade node
  2. Worker节点批量升级:

    # 使用并行处理(建议每次不超过集群节点的30%) for node in $(kubectl get nodes -l node-role.kubernetes.io/worker -o name); do kubectl drain $node --ignore-daemonsets & done wait
  3. 网络插件兼容性: 常见CNI插件版本要求:

    插件最低支持版本
    Calicov3.15+
    Flannelv0.13+
    Weave Netv2.6+

6. 异常处理与回滚

当升级出现问题时,可按以下步骤回退:

  1. 恢复Master节点:

    yum downgrade -y kubeadm-1.21.0-0 kubelet-1.21.0-0 kubectl-1.21.0-0 systemctl restart kubelet
  2. 恢复etcd数据:

    etcdctl snapshot restore /tmp/etcd-snapshot.db \ --data-dir /var/lib/etcd
  3. Worker节点回滚:

    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

通过这套完整的升级方案,工程师可以安全地将集群升级到目标版本,同时确保业务连续性。建议在测试环境充分验证后再在生产环境实施。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询