SuperAPI AI 工具集

eks-troubleshooting

部署与运维

查看项目

更新于 10-15 10:01

技能介绍

用途

本技能是一份面向 Amazon EKS 集群的综合故障排查与调试指南,覆盖控制平面问题、节点问题、Pod 失败、网络、存储、安全与性能诊断,内容基于 2025 年 AWS 最佳实践。关键词包括 EKS、Kubernetes、kubectl、debugging、troubleshooting、pod failure、node issues、networking、DNS、AWS、diagnostics。

适用场景

Pod 问题:Pod 卡在 Pending、CrashLoopBackOff、ImagePullBackOff;OOMKilled 容器或 CPU 节流;Pod 被驱逐或意外终止;容器日志中的应用错误。

集群问题:节点显示 NotReady;控制平面 API Server 超时;集群自动扩缩容失败;etcd 性能问题。

网络问题:DNS 解析失败;Service 连通性问题;负载均衡器配置错误;跨可用区流量问题;VPC CNI IP 耗尽。

安全与权限:IAM/IRSA 权限拒绝错误;RBAC 访问问题;镜像拉取认证失败;Service Account 问题。

性能问题:Pod 启动缓慢;内存/CPU 占用过高;资源争用;网络延迟。

主要能力

快速诊断流程

  1. 初始分诊(前 60 秒):使用 kubectl cluster-info 检查集群可达性;kubectl get nodes、kubectl get pods --all-namespaces | grep -v Running 查看整体状态;kubectl get events --all-namespaces --sort-by='.lastTimestamp' | tail -20 查看近期事件;kubectl get --raw /healthz 与 kubectl get componentstatuses 检查控制平面组件。

  2. 定位问题区域:Pod 问题使用 kubectl get pods、kubectl describe pod、kubectl logs --previous;节点问题使用 kubectl get nodes -o wide、kubectl describe node、kubectl top nodes;集群级问题使用 kubectl get all --all-namespaces、kubectl get events、aws eks describe-cluster --name <cluster-name> --query 'cluster.health'。

  3. 深入排查:Pod/工作负载问题参考 references/workload-issues.md;节点/集群问题参考 references/cluster-issues.md;网络问题参考 references/networking-issues.md。

常见 Pod 失败模式

Pending Pod:症状为长期卡在 Pending、无容器运行。常见原因包括资源不足、节点选择器不匹配、PVC 未绑定、污点/容忍不匹配。可用 kubectl describe pod 查看 Events,检查资源请求与节点容量;Karpenter 集群可查看 provisioner 日志。

CrashLoopBackOff:症状为反复崩溃重启、重启计数持续增加。使用 kubectl logs --previous 查看上一次容器日志,通过 jsonpath 获取退出码。常见退出码:0 成功、1 应用错误、137 SIGKILL(OOMKilled)、139 SIGSEGV(段错误)、143 SIGTERM(被终止)。可检查 OOM、调整内存限制、检查存活/就绪探针。

ImagePullBackOff:症状为无法拉取镜像,状态为 ErrImagePull 或 ImagePullBackOff。常见原因包括 ECR 认证缺失、镜像不存在、Docker Hub 限流、仓库不可达。可用 aws ecr describe-images 验证镜像,检查 Service Account 的 IRSA 注解与 IAM 权限(AmazonEC2ContainerRegistryReadOnly 或 ecr:GetAuthorizationToken、ecr:BatchGetImage),并可在节点上手动测试拉取。

OOMKilled:症状为容器因内存不足被杀、退出码 137、Last State 显示 OOMKilled。可检查内存限制与实际用量,并通过 kubectl set resources 提高内存限制与请求。

常见节点问题

Node NotReady:常见原因包括磁盘压力、内存压力、网络问题(kubelet 无法访问 API Server)、kubelet 服务崩溃。可检查节点 Conditions、EC2 实例健康状态,必要时 drain 并删除节点(托管节点组会由 ASG 替换)。

IP 地址耗尽:症状为 Pod 无法获取 IP、节点 ENI 使用率高、CNI 日志报错。可查看 VPC CNI(aws-node)日志、每节点 IP 与 ENI 使用情况;可通过启用前缀委派(ENABLE_PREFIX_DELEGATION=true)或提高 WARM_IP_TARGET 缓解。

常用 kubectl 命令

信息收集:kubectl get pods -o wide、kubectl describe pod、kubectl logs --tail=100 -f、多容器指定 -c、--previous 查看崩溃前日志;节点侧 kubectl get nodes -o wide、kubectl describe node、kubectl top nodes/pods;事件 kubectl get events --sort-by='.lastTimestamp';资源用量 kubectl top pods --containers。

高级调试:kubectl exec -it 进入容器、kubectl port-forward 本地测试、kubectl debug 临时容器(K8s 1.23+)、kubectl debug node/<node-name> 调试节点、kubectl cp 复制文件、kubectl get pod -o yaml 获取清单、kubectl get all -n <namespace> 获取命名空间全部资源。

过滤与格式化:按状态过滤 --field-selector=status.phase!=Running、按标签 -l app=myapp、自定义列 -o custom-columns、JSONPath 查询与重启计数统计。

AWS 相关排查

EKS 集群健康:aws eks describe-cluster、aws eks list-clusters、aws eks list-addons、aws eks describe-addon、aws eks update-kubeconfig。

IAM/IRSA:检查 Service Account 的 eks.amazonaws.com/role-arn 注解、Pod 的 serviceAccountName、Pod 内 AWS 环境变量,并在 Pod 内执行 aws sts get-caller-identity 与 aws s3 ls 验证权限。

ECR 认证:aws ecr get-login-password、aws ecr describe-repositories、aws iam get-role、aws iam list-attached-role-policies。

Karpenter:查看 Karpenter 日志、Provisioner 配置与控制器状态,通过 kubectl describe provisioner default 与事件排查节点未创建原因。

性能诊断

资源争用:kubectl top nodes、kubectl top pods --sort-by=memory/cpu,并用自定义列对比 requests 与 limits。

应用性能:检查就绪/存活探针、Pod 启动时间,在 Pod 内执行 top、netstat -tuln 进行剖析。

日志分析

CloudWatch Container Insights:可通过 aws eks update-cluster-config 启用控制平面日志(api、audit、authenticator、controllerManager、scheduler);相关日志组包括 /aws/eks/<cluster-name>/cluster、/aws/containerinsights/<cluster-name>/application、host、dataplane。

Fluent Bit:查看 amazon-cloudwatch 命名空间下 fluent-bit DaemonSet 的 Pod 与日志。

应急处理

Pod 卡在 Terminating:kubectl delete pod --grace-period=0 --force,仍卡住则移除 finalizers。

节点卡在 Draining:强制 drain,仍卡住则直接强制删除该节点上的 Pod。

集群无响应:检查 API Server 健康 /healthz、查看 CloudWatch 控制平面日志、重启 coredns、用 time kubectl get nodes 检查 API 响应速度。

预防最佳实践

资源管理:始终设置 requests 与 limits(示例:requests memory 256Mi、cpu 250m;limits memory 512Mi、cpu 500m,CPU 限制可选,可能引发节流)。

健康检查:为所有应用实现 livenessProbe、readinessProbe 与 startupProbe(慢启动应用),并给出 initialDelaySeconds、periodSeconds、timeoutSeconds、failureThreshold 等参数示例。

高可用:使用 PodDisruptionBudget(policy/v1),示例 minAvailable: 2。

使用方式

按上述诊断流程操作:先做初始分诊 → 识别问题类型 → 跳转到对应参考指南(集群与节点、工作负载、网络)。所有命令均以 kubectl 与 AWS CLI 为主,可直接复制执行。

限制

资料未提供该技能的安装方式、收费模式、支持平台或版本兼容性等具体信息,暂未提供。