EKS集群升级至1.24失败:Fargate Pod Kubelet版本匹配问题排查
验证所有Fargate Pod的kubelet版本
执行以下命令,逐个核对每个Pod的kubelet版本是否与集群版本(v1.23.14-eks-ffeb93d)一致:kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}/{.metadata.name}{"\t"}{.status.nodeInfo.kubeletVersion}{"\n"}'重点排查版本不匹配的Pod,这些就是提示中需要回收的"offending replicas"。
检查Fargate Profile覆盖范围
确认所有运行在Fargate上的Pod都被已配置的Fargate Profile包含,避免存在未纳入管理的Pod:aws eks list-fargate-profiles --cluster-name <你的集群名> # 查看具体Profile的配置细节 aws eks describe-fargate-profile --cluster-name <你的集群名> --fargate-profile-name <Profile名称>确保Profile的命名空间选择器、Pod标签选择器覆盖了所有Fargate Pod,没有遗漏。
排查异常状态的Pod
列出所有异常状态(如Pending、CrashLoopBackOff、Terminating)的Pod,这些Pod可能无法自动重建,导致一直使用旧版本kubelet:kubectl get pods --all-namespaces | grep -v Running手动删除这些异常Pod,触发重建以获取最新的Fargate运行时版本。
检查系统命名空间的Fargate Pod
重点核对kube-system等系统命名空间下的Fargate Pod(如coredns、aws-node)的kubelet版本,系统Pod常因配置或权限问题无法自动更新:kubectl get pods -n kube-system -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.kubeletVersion}{"\n"}'若版本不匹配,手动删除这些Pod重建。
检查工作负载控制器配置
对于Deployment、StatefulSet等控制器:- 确认Deployment的滚动更新策略正常,没有阻止Pod重建的配置;
- 对于StatefulSet,由于其不会自动触发滚动更新,需要手动逐个删除Pod强制重建:
kubectl delete pod <StatefulSet Pod名称> -n <命名空间>
避免配置中固定了旧版本的镜像或运行时参数。
确认Fargate运行时版本同步
检查集群的Fargate运行时是否已更新至与v1.23集群兼容的版本:aws eks describe-cluster --name <你的集群名> --query 'cluster.fargateProfileStatus'确保运行时版本与集群版本匹配,否则需要等待AWS完成Fargate运行时的同步更新。
内容的提问来源于stack exchange,提问作者Ruwan Vimukthi Mettananda

