K8s 集群升级实战:从 1.24 到 1.27 的平滑过渡(含 CRD 兼容性处理)
·
以下是从 Kubernetes 1.24 升级到 1.27 的完整方案,重点解决 CRD 兼容性和平滑过渡问题:
一、升级前关键检查
-
版本路径规划
1.24 → 1.25 → 1.26 → 1.27 # 禁止跨版本升级- 需按顺序逐版本升级,每个版本停留至少 24 小时观察
-
CRD 兼容性审查
- 检查所有 CRD 的 API 版本:
kubectl get crd -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.versions[*].name}{"\n"}{end}' - 关键变更:
- 1.25+ 移除
apiextensions.k8s.io/v1beta1 - 若 CRD 使用
v1beta1,需先转换为v1:apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition
- 1.25+ 移除
- 检查所有 CRD 的 API 版本:
-
废弃 API 检测
使用官方工具扫描:kubectl-convert -f ./manifests/ --output-version v1
二、升级操作流程
步骤 1:控制平面升级
# 1. 排空控制节点
kubectl drain <control-plane-node> --ignore-daemonsets
# 2. 升级 kubeadm
sudo apt update && sudo apt install kubeadm=1.27.x-00
# 3. 验证升级计划
sudo kubeadm upgrade plan
# 4. 应用升级 (示例:1.24→1.25)
sudo kubeadm upgrade apply v1.25.x
# 5. 解除节点保护
kubectl uncordon <control-plane-node>
重复以上步骤直至完成 1.25→1.26→1.27
步骤 2:Worker 节点升级
# 1. 排空节点
kubectl drain <worker-node> --ignore-daemonsets
# 2. 升级组件
sudo apt install kubelet=1.27.x-00 kubectl=1.27.x-00
# 3. 重启服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# 4. 解除节点保护
kubectl uncordon <worker-node>
三、CRD 兼容性处理方案
场景 1:存储版本迁移
# 在 CRD 中指定存储版本
spec:
versions:
- name: v1alpha1
served: true # 可提供服务
storage: false # 非存储版本
- name: v1
served: true
storage: true # 设置为首选存储版本
场景 2:Webhook 转换
spec:
conversion:
strategy: Webhook
webhook:
clientConfig:
url: https://crd-converter.example.com/convert
四、验证与回滚
验证清单
- 核心功能检查:
kubectl get nodes -o wide kubectl get pods --all-namespaces - CRD 操作测试:
kubectl apply -f custom-resource.yaml kubectl get <crd-name> - 监控指标验证:
kubectl top pods
回滚机制
- etcd 快照恢复:
ETCDCTL_API=3 etcdctl snapshot restore snapshot.db --data-dir=/var/lib/etcd-new - 节点降级:
sudo apt install kubeadm=1.24.x-00 kubelet=1.24.x-00 sudo kubeadm downgrade apply v1.24.x
五、注意事项
-
关键版本变更:
版本 重大变更 1.25 移除 PodSecurityPolicy 1.26 废弃 k8s.gcr.io 转向 registry.k8s.io 1.27 默认启用 CEL 校验规则 -
推荐工具:
- kube-no-trouble 检测废弃 API
- Sonobuoy 集群一致性测试
升级后观察日志:
journalctl -u kubelet -f持续监控 48 小时
执行建议:
- 生产环境先在非核心业务集群验证
- 每次升级间隔 ≥72 小时
- 确保 etcd 备份可用性:
ETCDCTL_API=3 etcdctl snapshot save backup.db
更多推荐
所有评论(0)