欢迎关注我的公众号「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全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入到学习交流群。↓↓↓