4. EKS集群升级控制平面版本

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 控制平面升级:前置条件检查与版本路径 当前控制平面 v1.28 目标控制平面 v1.29 跨度 = 1 个小版本 ✓ 升级前置条件检查清单 集群状态 status = ACTIVE ✓ 版本跨度 ≤ 1 个小版本 ✓ 已弃用 API 无工作负载依赖 ✓ 插件兼容性 vpc-cni / coredns / kube-proxy ✓ 节点组版本 节点 ≤ 控制平面 ✓ 备份与回滚预案 etcd 快照 / 应用清单备份 ✓ IAM 权限 eks:UpdateClusterVersion / eks:DescribeUpdate / eks:ListUpdates ✓ 执行升级 aws eks update-cluster-version --kubernetes-version 1.29 验证:status=ACTIVE,version=1.29,节点版本一致 检查未通过 先修复再升级

执行控制平面升级

前置条件全部满足后,发起升级请求。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 权限不足。

升级后验证

升级完成后,从三个层面验证集群状态:

  1. 控制平面版本:aws eks describe-cluster --name prod-eks --query 'cluster.version' 应返回 1.29。
  2. 节点版本:kubectl get nodes -o wide 查看节点 VERSION 列,此时节点仍为 v1.28.x,属于正常状态,后续需单独升级节点组。
  3. 核心组件健康:kubectl get pods -n kube-system 确认 coredns、aws-node、kube-proxy 全部 Running;kubectl get --raw='/readyz?verbose' 确认 API Server 就绪。
控制平面升级后,节点版本低于控制平面是允许的,但节点版本高于控制平面会导致节点无法注册。因此升级顺序始终是:控制平面 → 插件 → 节点组。
升级操作不可逆。若升级后发现严重问题,唯一恢复途径是创建新集群并迁移工作负载,因此升级前的 etcd 快照和应用清单备份不可省略。