Kubernetes 跨版本(二进制部署)无缝升级:业务不中断的最佳实践
欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入到学习交流群。欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入学习交流群。多 Master 高可用集群,建议一台一台顺序升级,在升级节点之前,先把apiserver从负载均衡移除;:如配置文件中包含废弃字段或启动参数,升级后组件可能无法正常启动。✅
欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入学习交流群。↓↓↓
关注公众号,免费学技术~
本文模拟企业环境下,使用二进制部署的 Kubernetes 集群,从 v1.30.0 升级到 v1.32.3。
📌 一、升级背景与准备
✅ 为什么升级?
-
v1.32 对性能、稳定性、兼容性有重大优化。
-
安全漏洞修复。
-
支持新特性和废弃旧参数。
⚠️ 升级影响评估
-
集群不可避免存在服务重启、调度暂停等短暂影响。
-
强烈建议 提前测试,并在业务低峰期执行。
🧰 环境准备
|
节点角色 |
IP 地址 |
系统 |
当前版本 |
升级目标 |
|---|---|---|---|---|
|
master1 |
192.168.10.10 |
CentOS 7 |
v1.30.0 |
v1.32.3 |
|
node1 |
192.168.10.20 |
CentOS 7 |
v1.30.0 |
v1.32.3 |
-
使用
systemd启动管理组件 -
使用独立 TLS 证书和配置文件(非 kubeadm)
📦 二、获取 v1.32.3 二进制安装包
下载地址(国内镜像推荐):
wget https://dl.k8s.io/v1.32.3/kubernetes-server-linux-amd64.tar.gz
解压包内容:
tar -zxvf kubernetes-server-linux-amd64.tar.gz -C /optcd /opt/kubernetes/server/bin
🛡️ 三、Master 节点升级(以 master1 为例)
1. 备份现有组件
cd /usr/bincp kubectl kube-apiserver kube-controller-manager kube-scheduler etcd etcdctl -tmkdir -p /opt/backup/k8s-bak-$(date +%F)mv kube* /opt/backup/k8s-bak-$(date +%F)/
2. 停止服务
systemctl stop kube-apiserversystemctl stop kube-controller-managersystemctl stop kube-scheduler
3. 替换二进制文件
cp /opt/kubernetes/server/bin/kubectl /usr/bin/cp /opt/kubernetes/server/bin/kube-apiserver /usr/bin/cp /opt/kubernetes/server/bin/kube-controller-manager /usr/bin/cp /opt/kubernetes/server/bin/kube-scheduler /usr/bin/chmod +x /usr/bin/kube*
4、配置文件参数修改
在将 Kubernetes 从 v1.30.0 升级至 v1.32.3 前,务必做好 配置文件的前置检查。本节将汇总此过程中涉及的 废弃参数、已移除功能及推荐替代方案,避免因不兼容配置导致服务启动失败。
1)废弃参数对比(重点)
1️⃣ Kubernetes v1.31 废弃与移除项
|
序号 |
废弃项 |
说明与处理建议 |
|---|---|---|
|
1 |
.status.nodeInfo.kubeProxyVersion |
在资源如 |
|
2 |
--keep-terminated-pod-volumes |
kubelet 参数,v1.31 中被正式移除,若仍在配置文件或启动参数中,请删除该参数。 |
|
3 |
CephFS 和 RBD
内置存储插件 |
被移除,若你仍在使用 |
|
4 |
非 CSI Volume Limit 插件 |
如 |
2️⃣ Kubernetes v1.32 废弃与移除项
|
序号 |
废弃项 |
说明与处理建议 |
|---|---|---|
|
1 |
flowcontrol.apiserver.k8s.io/v1beta3
API |
v1.32 中已被移除,若使用 |
|
2 |
ServiceAccountNodeAudienceRestriction
特性 |
该功能默认启用会导致某些 CSI 驱动(如 |
📌 注意事项:如配置文件中包含废弃字段或启动参数,升级后组件可能无法正常启动。建议通过如下方式排查:
# 检查 kubelet/kube-apiserver/kube-controller-manager/kube-scheduler 启动参数
ps aux | grep kubeletps aux | grep kube-apiserver
# 查找所有 YAML 中是否仍使用已废弃的 API 版本
grep -r "flowcontrol.apiserver.k8s.io/v1beta3" /etc/kubernetes/
✅ 升级前建议操作
-
移除所有废弃参数,例如
--keep-terminated-pod-volumes。 -
检查所有 API 对象的版本,避免使用
v1beta3等已废弃版本。 -
检查并替换 CephFS/RBD 等非 CSI 驱动为 CSI。
-
检查 Admission 插件或功能特性是否依赖 ServiceAccount Audience 设置,避免冲突。
-
执行一次配置 dry-run 校验,例如:
kube-apiserver --config=/etc/kubernetes/manifests/kube-apiserver.yaml --dry-run
✅ 建议提前修改配置文件,删除废弃项,避免启动失败。
5. 重载配置并启动服务
systemctl daemon-reexecsystemctl daemon-reloadsystemctl start kube-apiserversystemctl start kube-controller-managersystemctl start kube-scheduler
6. 验证组件状态
systemctl status kube-apiserver -lkubectl version --short
🧱 四、Node 节点升级(以 node1 为例)
1. 停止服务并备份旧文件
systemctl stop kubeletsystemctl stop kube-proxy
cd /usr/binmkdir -p /opt/backup/k8s-node-bak-$(date +%F)mv kubelet kube-proxy /opt/backup/k8s-node-bak-$(date +%F)/
2. 拷贝新版本二进制
scp /opt/kubernetes/server/bin/kubelet root@192.168.10.20:/usr/bin/scp /opt/kubernetes/server/bin/kube-proxy root@192.168.10.20:/usr/bin/
3. 修改配置文件
步骤参考控制节点修改方式移除废弃参数即可
⚠️ 注意:某些参数如 --cgroup-driver 在新版本中自动侦测,无需手动设置。
4. 启动服务
systemctl daemon-reloadsystemctl start kubeletsystemctl start kube-proxy
🔍 五、升级验证
1. 检查节点状态
kubectl get nodes -o wide
确保所有节点为 Ready。
2. 查看组件版本
kubectl version --short
结果示例:
Client Version: v1.32.3Server Version: v1.32.3
3. 查看 Pod 状态
kubectl get pods -A
观察是否有异常重启或 Pending 状态。
🧯 六、问题排查建议
|
问题 |
排查建议 |
|---|---|
|
kubelet 启动失败 |
查看 |
|
kube-apiserver 报错参数不识别 |
检查启动参数是否为新版本支持,删除废弃参数 |
|
节点 NotReady |
确认容器运行时、CNI 网络插件是否正常启动 |
✅ 七、回滚方案(如升级失败)
# 停止服务systemctl stop kubelet kube-proxy kube-apiserver kube-controller-manager kube-scheduler
# 恢复旧二进制cp /opt/backup/k8s-bak-2025-05-14/* /usr/bin/
# 重启服务systemctl start kube-apiserver...
🎯 八、升级建议
-
建议使用测试环境验证版本兼容性;
-
删除所有废弃参数,提前参考官方 CHANGELOG->https://gitee.com/hanxianchao66/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md
-
多 Master 高可用集群,建议一台一台顺序升级,在升级节点之前,先把apiserver从负载均衡移除;
-
使用
kubectl drain驱逐节点中的 Pod,配合升级避免业务中断; -
升级完成后建议重新打快照或备份系统状态。
如有问题欢迎添加作者微信:luckylucky421302
END
➤ 往期精彩回顾

-
推荐书籍:《Kubernetes从入门到DevOps企业应用实战》——韩老师以企业实战为背景出版的一本高质量书籍:销量突破1万
-
K8s Scheduler Pod 启动失败:Error: failed to reserve container name

欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入到学习交流群。↓↓↓
更多推荐

所有评论(0)