升级Kubernetes集群是每一个运维工程师的必修课,但如果没做好版本兼容性验证或数据备份,轻则服务中断,重则数据丢失。今天我们就以「煮咖啡」的视角,带大家摸透升级的核心门道,让你既能体验新功能,又不会因踩坑毁掉整个下午的好心情。
1. 升级前的"咖啡豆筛选":版本兼容性
Kubernetes的版本迭代就像咖啡豆产地不同,如果混用不兼容的组件,煮出来的咖啡绝对会酸涩难咽。
1.1 核心原则:主版本不能跨代跳跃
官方要求控制平面组件(如kube-apiserver)和kubelet之间的版本差异不能超过2个次版本。例如:
- 若主节点运行v1.24.0,则节点最高支持到v1.26.0
- 错误示范:若集群存在v1.22.0的kubelet,直接升级到v1.25.0会导致通信故障
1.2 实操验证:用kubectl做"豆子检测"
kubectl version --short
# 输出示例:
# Client Version: v1.24.0
# Server Version: v1.24.0
# 若某节点返回kubelet版本为v1.22.0,必须优先升级该节点
1.3 隐藏雷区:ETCD版本绑定
假设从K8s v1.24升级到v1.26,需同步升级ETCD:
# 查看当前ETCD版本
kubectl describe pod etcd-master -n kube-system | grep Image
# 输出示例:k8s.gcr.io/etcd:3.5.3-0
# 升级到ETCD 3.5.4后再升级kube-apiserver
2. 数据备份:防止手抖打翻咖啡杯
数据备份就像提前准备一条干毛巾,即使咖啡洒了也能迅速收拾残局。
2.1 核心数据分类
- 有状态服务数据:MySQL、Redis等持久化存储
- 集群元数据:ETCD快照、RBAC配置
- 应用配置:Deployment、Secret等YAML文件
2.2 Velero实战备份
(技术栈:AWS S3 + Velero 1.10)
# 安装Velero
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.6.1 \
--bucket my-k8s-backup \
--backup-location-config region=us-west-1 \
--snapshot-location-config region=us-west-1
# 手动触发全量备份
velero backup create full-backup-202311 --include-namespaces=*
# 验证备份状态
velero backup describe full-backup-202311 --details
2.3 ETCD快照双保险
# 获取当前快照
sudo ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /tmp/etcd-snapshot-202311.db
3. 技术搭档:Helm的角色扮演
在升级过程中,Helm相当于你的"咖啡糖罐",帮助管理复杂的Chart配置:
# 查看当前Chart版本
helm list -n monitoring
# 输出示例:
# NAME NAMESPACE REVISION STATUS CHART APP VERSION
# prometheus monitoring 2 deployed prometheus-15.7.0 v2.35.0
# 优先回滚Chart到兼容版本
helm rollback prometheus 1 -n monitoring
4. 应用场景与避坑逻辑
4.1 典型场景
- 开发环境:可尝试夜间自动滚动升级(但需设置PodDisruptionBudget)
- 生产环境:蓝绿升级 + 流量镜像验证
- 混合版本集群:控制平面先升级,逐步替换旧节点
4.2 版本跳跃的风险比价
升级跨度 | 风险等级 | 耗时预估 |
---|---|---|
次版本+1 | ★☆☆☆☆ | 1小时 |
次版本+2 | ★★★☆☆ | 3小时 |
主版本+1 | ★★★★★ | 需重建集群 |
5. 那些年我们踩过的坑
- 滚动升级卡死:某DaemonSet未设置
terminationGracePeriodSeconds
,导致旧Pod无法退出 - CNI网络异常:Calico从v3.20升级到v3.24后,因IPAM配置冲突导致跨节点不通
- 证书过期连锁反应:升级后发现apiserver证书有效期仅剩1天,被迫降级续签
6. 总结
升级Kubernetes就像驾驶一辆高速行驶的汽车更换轮胎——必须严格遵循操作手册。坚持「一次跨越一个版本、双重备份验证、灰度流量观察」三原则,你会惊喜地发现,这杯升级后的"咖啡"居然比之前更香醇了。