K8s 平滑升级

前言

一、升级前准备

[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 升级)

四、升级验证(Master01)

五、升级注意事项

总结

前言

在企业生产环境中,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 正常运行,无异常状态


五、升级注意事项

  1. 逐个节点升级,保证服务不中断。

  2. CNI 插件:升级前确认兼容 v1.21。

  3. PodDisruptionBudget:升级 Node 时可能需要临时调整或删除。

  4. 备份:升级前务必备份 etcd 和 kubeadm 配置。

  5. 节点操作总结

    • 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,保证服务持续可用,并为后续升级到更高版本打下基础。

相关推荐
wanhengidc8 小时前
云手机的适配性怎么样?
运维·服务器·安全·智能手机·云计算
jimy18 小时前
安卓里运行Linux
linux·运维·服务器
哟哟耶耶8 小时前
js-fetch流式实现中断重连
运维·服务器
爱凤的小光9 小时前
Linux清理磁盘技巧---个人笔记
linux·运维
耗同学一米八9 小时前
2026年河北省职业院校技能大赛中职组“网络建设与运维”赛项答案解析 1.系统安装
linux·服务器·centos
知星小度S10 小时前
系统核心解析:深入文件系统底层机制——Ext系列探秘:从磁盘结构到挂载链接的全链路解析
linux
2401_8904430210 小时前
Linux 基础IO
linux·c语言
字节数据平台11 小时前
刚刚,火山引擎多模态数据湖解决方案发布大数据运维Agent
大数据·运维·火山引擎
智慧地球(AI·Earth)11 小时前
在Linux上使用Claude Code 并使用本地VS Code SSH远程访问的完整指南
linux·ssh·ai编程
原神启动111 小时前
Docker 场景化作业:生产环境容器操作实训
运维·docker·容器