4. EKS集群升级控制平面版本
升级前的版本与前置条件核对
EKS 控制平面升级是单向操作,不能回退。升级前必须先确认当前版本、目标版本以及两者之间的跨度。EKS 要求控制平面每次只能跨一个小版本升级,例如 1.28 → 1.29 可以,1.28 → 1.30 不允许,必须分两次执行。
先查看当前集群版本与可升级目标:
aws eks describe-cluster \
--name prod-eks \
--query 'cluster.{version:version,status:status,platformVersion:platformVersion,endpoint:endpoint}' \
--output json
预期返回类似:
{
"version": "1.28",
"status": "ACTIVE",
"platformVersion": "eks.12",
"endpoint": "https://xxxx.gr7.ap-southeast-1.eks.amazonaws.com"
}
升级前需要逐项确认的关键前置条件:
- 集群状态:必须为
ACTIVE,若为UPDATING或DEGRADED需先处理。 - 版本跨度:目标版本与当前版本相差不超过 1 个小版本。
- 已弃用 API:目标版本移除的 API(如 1.29 移除部分
flowcontrol相关 API)必须确认集群内无工作负载依赖。 - 插件兼容性:
vpc-cni、coredns、kube-proxy需满足目标版本的最低要求。 - 节点组版本:控制平面可先于节点升级,但节点版本不得高于控制平面。
检查插件当前版本与目标版本兼容性:
aws eks list-addons --cluster-name prod-eks --output table
aws eks describe-addon --cluster-name prod-eks --addon-name vpc-cni \
--query 'addon.{name:addonName,version:addonVersion,status:status}'
若插件版本低于目标 Kubernetes 版本要求的最低版本,需先升级插件再升级控制平面,否则升级后可能出现网络或 DNS 异常。
执行控制平面升级
前置条件全部满足后,发起升级请求。EKS 控制平面升级由 AWS 托管,通常需要 10–15 分钟,期间 API Server 仍可用,但可能出现短暂连接抖动。
aws eks update-cluster-version \
--name prod-eks \
--kubernetes-version 1.29 \
--output json
返回的 update.id 用于跟踪升级进度:
aws eks describe-update \
--name prod-eks \
--update-id <update-id> \
--query 'update.{status:status,type:type,params:params,errors:errors}'
状态流转为 InProgress → Successful。若出现 Failed,errors 字段会给出具体原因,常见为插件版本不兼容或 IAM 权限不足。
升级后验证
升级完成后,从三个层面验证集群状态:
- 控制平面版本:
aws eks describe-cluster --name prod-eks --query 'cluster.version'应返回1.29。 - 节点版本:
kubectl get nodes -o wide查看节点VERSION列,此时节点仍为v1.28.x,属于正常状态,后续需单独升级节点组。 - 核心组件健康:
kubectl get pods -n kube-system确认coredns、aws-node、kube-proxy全部Running;kubectl get --raw='/readyz?verbose'确认 API Server 就绪。
控制平面升级后,节点版本低于控制平面是允许的,但节点版本高于控制平面会导致节点无法注册。因此升级顺序始终是:控制平面 → 插件 → 节点组。
升级操作不可逆。若升级后发现严重问题,唯一恢复途径是创建新集群并迁移工作负载,因此升级前的 etcd 快照和应用清单备份不可省略。