EKS 故障排查和诊断
常见问题分类
问题类型概览
EKS 故障分类:
1. 集群访问问题
├─ kubectl 无法连接集群
├─ API Server 不可达
├─ 认证/授权失败
└─ 网络连接问题
2. 节点问题
├─ 节点未加入集群
├─ 节点 NotReady 状态
├─ 节点资源耗尽
└─ 节点网络问题
3. Pod 调度问题
├─ Pod Pending 状态
├─ Pod 无法调度
├─ 资源不足
└─ 污点和容忍度问题
4. Pod 运行问题
├─ Pod CrashLoopBackOff
├─ Pod ImagePullBackOff
├─ Pod OOMKilled
└─ 容器启动失败
5. 网络问题
├─ Pod 间无法通信
├─ Pod 无法访问外网
├─ Service 无法访问
└─ Ingress 不工作
6. 存储问题
├─ PVC Pending 状态
├─ 卷挂载失败
├─ 存储性能问题
└─ 数据持久化问题
7. 权限问题
├─ RBAC 权限不足
├─ IRSA 配置错误
├─ Service Account 问题
└─ IAM 角色问题
集群访问问题
kubectl 无法连接集群
症状:
$ kubectl get nodes
Unable to connect to the server: dial tcp: lookup xxx.eks.amazonaws.com: no such host
诊断步骤:
#!/bin/bash
# diagnose-cluster-access.sh
echo "================================================"
echo "诊断 EKS 集群访问问题"
echo "================================================"
# 1. 检查 kubeconfig
echo "1. 检查 kubeconfig 配置..."
kubectl config current-context
kubectl config view
# 2. 检查 AWS 凭证
echo ""
echo "2. 检查 AWS 凭证..."
aws sts get-caller-identity
# 3. 检查集群状态
echo ""
echo "3. 检查集群状态..."
CLUSTER_NAME="production-eks-cluster"
REGION="us-east-1"
aws eks describe-cluster \
--name $CLUSTER_NAME \
--region $REGION \
--query 'cluster.status' \
--output text
# 4. 检查 API Server 端点
echo ""
echo "4. 检查 API Server 端点..."
ENDPOINT=$(aws eks describe-cluster \
--name $CLUSTER_NAME \
--region $REGION \
--query 'cluster.endpoint' \
--output text)
echo " 端点: $ENDPOINT"
# 测试端点连通性
curl -k $ENDPOINT/version
# 5. 检查端点访问配置
echo ""
echo "5. 检查端点访问配置..."
aws eks describe-cluster \
--name $CLUSTER_NAME \
--region $REGION \
--query 'cluster.resourcesVpcConfig.{PublicAccess:endpointPublicAccess,PrivateAccess:endpointPrivateAccess,PublicCIDRs:publicAccessCidrs}'
echo ""
echo "================================================"
echo "诊断完成"
echo "================================================"
常见解决方案:
# 方案 1:更新 kubeconfig
aws eks update-kubeconfig \
--name production-eks-cluster \
--region us-east-1
# 方案 2:检查公网访问限制
# 如果你的 IP 不在白名单中
aws eks update-cluster-config \
--name production-eks-cluster \
--resources-vpc-config \
endpointPublicAccess=true,\
publicAccessCidrs="YOUR_IP/32" \
--region us-east-1
# 方案 3:使用 VPN 或 Bastion
# 如果仅启用了私有端点
ssh -L 8443:API_ENDPOINT:443 bastion-host
# 然后修改 kubeconfig 使用 localhost:8443
# 方案 4:检查 IAM 权限
# 确保 IAM 用户/角色有访问 EKS 的权限
aws iam list-attached-user-policies --user-name YOUR_USER
认证失败问题
症状:
$ kubectl get nodes
error: You must be logged in to the server (Unauthorized)
诊断和解决:
#!/bin/bash
# fix-authentication.sh
echo "================================================"
echo "修复 EKS 认证问题"
echo "================================================"
# 1. 检查 aws-auth ConfigMap
echo "1. 检查 aws-auth ConfigMap..."
kubectl get configmap aws-auth -n kube-system -o yaml
# 2. 如果 ConfigMap 不存在或配置错误,重新创建
echo ""
echo "2. 更新 aws-auth ConfigMap..."
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
NODE_ROLE_ARN="arn:aws:iam::${ACCOUNT_ID}:role/eks-node-role"
cat > aws-auth-configmap.yaml << EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: $NODE_ROLE_ARN
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
mapUsers: |
- userarn: arn:aws:iam::${ACCOUNT_ID}:user/admin
username: admin
groups:
- system:masters
EOF
kubectl apply -f aws-auth-configmap.yaml
rm -f aws-auth-configmap.yaml
echo ""
echo "================================================"
echo "aws-auth ConfigMap 已更新"
echo "================================================"
节点问题
节点未加入集群
症状:
$ kubectl get nodes
No resources found
诊断步骤:
#!/bin/bash
# diagnose-node-join.sh
echo "================================================"
echo "诊断节点加入问题"
echo "================================================"
# 1. 检查节点组状态
echo "1. 检查节点组状态..."
aws eks describe-nodegroup \
--cluster-name production-eks-cluster \
--nodegroup-name general-nodes \
--region us-east-1 \
--query 'nodegroup.{Status:status,Health:health}'
# 2. 检查 Auto Scaling Group
echo ""
echo "2. 检查 Auto Scaling Group..."
ASG_NAME=$(aws eks describe-nodegroup \
--cluster-name production-eks-cluster \
--nodegroup-name general-nodes \
--region us-east-1 \
--query 'nodegroup.resources.autoScalingGroups[0].name' \
--output text)
aws autoscaling describe-auto-scaling-groups \
--auto-scaling-group-names $ASG_NAME \
--region us-east-1 \
--query 'AutoScalingGroups[0].{DesiredCapacity:DesiredCapacity,MinSize:MinSize,MaxSize:MaxSize,Instances:Instances[*].InstanceId}'
# 3. 检查 EC2 实例状态
echo ""
echo "3. 检查 EC2 实例状态..."
INSTANCE_IDS=$(aws autoscaling describe-auto-scaling-groups \
--auto-scaling-group-names $ASG_NAME \
--region us-east-1 \
--query 'AutoScalingGroups[0].Instances[*].InstanceId' \
--output text)
for instance in $INSTANCE_IDS; do
echo " 实例 $instance:"
aws ec2 describe-instances \
--instance-ids $instance \
--region us-east-1 \
--query 'Reservations[0].Instances[0].{State:State.Name,AZ:Placement.AvailabilityZone,Type:InstanceType}'
done
# 4. 检查安全组
echo ""
echo "4. 检查安全组规则..."
NODE_SG=$(aws eks describe-nodegroup \
--cluster-name production-eks-cluster \
--nodegroup-name general-nodes \
--region us-east-1 \
--query 'nodegroup.resources.remoteAccessSecurityGroup' \
--output text)
aws ec2 describe-security-groups \
--group-ids $NODE_SG \
--region us-east-1 \
--query 'SecurityGroups[0].IpPermissions'
# 5. 检查实例系统日志(查找错误)
echo ""
echo "5. 检查实例系统日志..."
for instance in $INSTANCE_IDS; do
echo " 实例 $instance 日志:"
aws ec2 get-console-output \
--instance-id $instance \
--region us-east-1 \
--query 'Output' \
--output text | tail -50
done
echo ""
echo "================================================"
echo "诊断完成"
echo "================================================"
常见原因和解决方案:
原因 1:IAM 角色权限不足
解决:检查节点 IAM 角色是否有正确的策略
aws iam list-attached-role-policies --role-name eks-node-role
原因 2:安全组配置错误
解决:确保节点可以访问集群 API Server (443端口)
aws ec2 authorize-security-group-ingress \
--group-id CLUSTER_SG \
--source-group NODE_SG \
--protocol tcp \
--port 443
原因 3:子网路由配置错误
解决:确保私有子网有到 NAT Gateway 的路由
aws ec2 describe-route-tables \
--filters "Name=association.subnet-id,Values=SUBNET_ID"
原因 4:VPC CNI 插件问题
解决:检查并重启 VPC CNI DaemonSet
kubectl rollout restart daemonset aws-node -n kube-system
原因 5:用户数据脚本错误
解决:检查启动模板的用户数据
aws ec2 describe-launch-template-versions \
--launch-template-id lt-xxxxx
节点 NotReady 状态
症状:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-11-100.ec2.internal NotReady <none> 10m v1.28.0
诊断和修复:
#!/bin/bash
# diagnose-node-notready.sh
NODE_NAME="ip-10-0-11-100.ec2.internal"
echo "================================================"
echo "诊断节点 NotReady 问题"
echo "================================================"
# 1. 检查节点详情
echo "1. 检查节点详情..."
kubectl describe node $NODE_NAME
# 2. 检查节点条件
echo ""
echo "2. 检查节点条件..."
kubectl get node $NODE_NAME -o json | jq '.status.conditions'
# 3. 检查节点事件
echo ""
echo "3. 检查节点事件..."
kubectl get events --field-selector involvedObject.name=$NODE_NAME --sort-by='.lastTimestamp'
# 4. 检查节点上的 Pod
echo ""
echo "4. 检查节点上的 Pod..."
kubectl get pods --all-namespaces --field-selector spec.nodeName=$NODE_NAME -o wide
# 5. 检查 kubelet 日志(需要 SSM 或 SSH)
echo ""
echo "5. 检查 kubelet 日志..."
echo " 使用 SSM 连接到节点:"
echo " INSTANCE_ID=\$(kubectl get node $NODE_NAME -o json | jq -r '.spec.providerID' | cut -d'/' -f5)"
echo " aws ssm start-session --target \$INSTANCE_ID"
echo ""
echo " 然后执行:"
echo " sudo journalctl -u kubelet -f"
# 6. 常见问题检查
echo ""
echo "6. 常见问题检查..."
# 磁盘空间
echo " 检查磁盘空间(需要在节点上执行):"
echo " df -h"
# 内存
echo " 检查内存(需要在节点上执行):"
echo " free -m"
# CNI 插件
echo " 检查 CNI 插件:"
kubectl get pods -n kube-system -l k8s-app=aws-node -o wide | grep $NODE_NAME
echo ""
echo "================================================"
echo "诊断完成"
echo "================================================"
常见解决方案:
# 方案 1:重启 kubelet
INSTANCE_ID=$(kubectl get node $NODE_NAME -o json | jq -r '.spec.providerID' | cut -d'/' -f5)
aws ssm send-command \
--instance-ids $INSTANCE_ID \
--document-name "AWS-RunShellScript" \
--parameters 'commands=["sudo systemctl restart kubelet"]'
# 方案 2:重启 CNI 插件
kubectl delete pod -n kube-system -l k8s-app=aws-node --field-selector spec.nodeName=$NODE_NAME
# 方案 3:清理磁盘空间
aws ssm send-command \
--instance-ids $INSTANCE_ID \
--document-name "AWS-RunShellScript" \
--parameters 'commands=["sudo docker system prune -af","sudo journalctl --vacuum-time=1d"]'
# 方案 4:替换节点
kubectl drain $NODE_NAME --ignore-daemonsets --delete-emptydir-data
aws ec2 terminate-instances --instance-ids $INSTANCE_ID
# Auto Scaling Group 会自动启动新节点
Pod 调度问题
Pod Pending 状态
症状:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-5d7c9b8f4f-abc12 0/1 Pending 0 5m
诊断脚本:
#!/bin/bash
# diagnose-pod-pending.sh
POD_NAME="myapp-5d7c9b8f4f-abc12"
NAMESPACE="default"
echo "================================================"
echo "诊断 Pod Pending 问题"
echo "================================================"
# 1. 检查 Pod 详情
echo "1. 检查 Pod 详情..."
kubectl describe pod $POD_NAME -n $NAMESPACE
# 2. 检查 Pod 事件
echo ""
echo "2. 检查 Pod 事件..."
kubectl get events -n $NAMESPACE --field-selector involvedObject.name=$POD_NAME --sort-by='.lastTimestamp'
# 3. 检查资源请求
echo ""
echo "3. 检查 Pod 资源请求..."
kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq '.spec.containers[].resources'
# 4. 检查节点资源
echo ""
echo "4. 检查节点可用资源..."
kubectl describe nodes | grep -A 5 "Allocated resources"
# 5. 检查污点和容忍度
echo ""
echo "5. 检查节点污点..."
kubectl get nodes -o json | jq '.items[] | {name:.metadata.name, taints:.spec.taints}'
echo ""
echo "6. 检查 Pod 容忍度..."
kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq '.spec.tolerations'
# 7. 检查 PVC
echo ""
echo "7. 检查 PVC 状态..."
kubectl get pvc -n $NAMESPACE
kubectl describe pvc -n $NAMESPACE
echo ""
echo "================================================"
echo "诊断完成"
echo "================================================"
常见原因和解决方案:
# 原因 1:资源不足
# Pod 事件显示:0/3 nodes are available: insufficient cpu/memory
# 解决:增加节点或减少资源请求
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: app
resources:
requests:
cpu: 100m # 降低 CPU 请求
memory: 128Mi # 降低内存请求
---
# 原因 2:节点选择器不匹配
# Pod 事件显示:0/3 nodes are available: node(s) didn't match node selector
# 解决:修复节点选择器或添加标签
# 检查节点标签
kubectl get nodes --show-labels
# 修复 Pod
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
nodeSelector:
role: general # 确保节点有此标签
---
# 原因 3:污点和容忍度不匹配
# Pod 事件显示:0/3 nodes are available: node(s) had taint that the pod didn't tolerate
# 解决:添加容忍度
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
tolerations:
- key: spot
operator: Equal
value: "true"
effect: NoSchedule
---
# 原因 4:PVC Pending
# Pod 等待 PVC 绑定
# 解决:检查 StorageClass 和 PV
# 检查 PVC
kubectl get pvc
kubectl describe pvc my-pvc
# 检查 StorageClass
kubectl get storageclass
kubectl describe storageclass gp3
---
# 原因 5:亲和性规则不满足
# Pod 事件显示:0/3 nodes are available: pod affinity rules not satisfied
# 解决:调整亲和性规则或添加节点
# 检查亲和性
kubectl get pod $POD_NAME -o yaml | grep -A 20 affinity
Pod 运行问题
CrashLoopBackOff
症状:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-5d7c9b8f4f-abc12 0/1 CrashLoopBackOff 5 5m
诊断和修复:
#!/bin/bash
# diagnose-crashloop.sh
POD_NAME="myapp-5d7c9b8f4f-abc12"
NAMESPACE="default"
echo "================================================"
echo "诊断 CrashLoopBackOff"
echo "================================================"
# 1. 查看 Pod 日志
echo "1. 查看当前容器日志..."
kubectl logs $POD_NAME -n $NAMESPACE
# 2. 查看上一次容器日志
echo ""
echo "2. 查看上一次容器日志..."
kubectl logs $POD_NAME -n $NAMESPACE --previous
# 3. 查看 Pod 事件
echo ""
echo "3. 查看 Pod 事件..."
kubectl describe pod $POD_NAME -n $NAMESPACE | tail -30
# 4. 检查容器探针
echo ""
echo "4. 检查健康检查配置..."
kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq '.spec.containers[].{livenessProbe,readinessProbe,startupProbe}'
# 5. 检查资源限制
echo ""
echo "5. 检查资源限制..."
kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq '.spec.containers[].resources'
# 6. 交互式调试(临时创建调试容器)
echo ""
echo "6. 创建调试容器..."
kubectl debug $POD_NAME -n $NAMESPACE -it --image=busybox --share-processes
echo ""
echo "================================================"
echo "诊断完成"
echo "================================================"
常见原因:
# 原因 1:应用启动失败
# 查看日志找到错误原因
kubectl logs POD_NAME --tail=100
# 原因 2:健康检查失败
# 调整探针配置
spec:
containers:
- name: app
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30 # 增加初始延迟
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3 # 增加失败阈值
# 原因 3:资源不足(OOMKilled)
# 增加内存限制
spec:
containers:
- name: app
resources:
limits:
memory: 1Gi # 增加内存限制
requests:
memory: 512Mi
# 原因 4:配置错误
# 检查环境变量和 ConfigMap
kubectl get pod POD_NAME -o yaml | grep -A 20 env
kubectl get configmap
kubectl describe configmap MY_CONFIGMAP
# 原因 5:依赖服务不可用
# 检查服务依赖
kubectl get svc
kubectl get endpoints
ImagePullBackOff
症状和解决:
#!/bin/bash
# diagnose-imagepull.sh
POD_NAME="myapp-5d7c9b8f4f-abc12"
NAMESPACE="default"
echo "================================================"
echo "诊断 ImagePullBackOff"
echo "================================================"
# 1. 查看 Pod 详情
echo "1. 查看 Pod 详情..."
kubectl describe pod $POD_NAME -n $NAMESPACE | grep -A 10 "Events:"
# 2. 检查镜像名称
echo ""
echo "2. 检查镜像配置..."
kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq '.spec.containers[].image'
# 3. 检查 ImagePullSecrets
echo ""
echo "3. 检查 ImagePullSecrets..."
kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq '.spec.imagePullSecrets'
# 4. 验证镜像存在
echo ""
echo "4. 验证 ECR 镜像..."
IMAGE=$(kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq -r '.spec.containers[0].image')
aws ecr describe-images --repository-name $(echo $IMAGE | cut -d'/' -f2 | cut -d':' -f1) --region us-east-1
# 5. 测试拉取镜像
echo ""
echo "5. 在节点上测试拉取镜像..."
NODE_NAME=$(kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq -r '.spec.nodeName')
echo " 节点:$NODE_NAME"
echo " 在节点上执行:docker pull $IMAGE"
echo ""
echo "================================================"
echo "常见解决方案:"
echo "================================================"
echo ""
echo "1. ECR 权限问题:"
echo " 确保节点 IAM 角色有 ECR 读取权限"
echo " aws iam list-attached-role-policies --role-name eks-node-role"
echo ""
echo "2. 私有仓库认证:"
echo " 创建 ImagePullSecret"
echo " kubectl create secret docker-registry ecr-secret \\"
echo " --docker-server=ACCOUNT.dkr.ecr.REGION.amazonaws.com \\"
echo " --docker-username=AWS \\"
echo " --docker-password=\$(aws ecr get-login-password)"
echo ""
echo "3. 镜像不存在:"
echo " 检查镜像名称和标签"
echo " aws ecr list-images --repository-name REPO_NAME"
echo ""
echo "4. 网络问题:"
echo " 检查 NAT Gateway 和路由表"
echo " aws ec2 describe-nat-gateways"
echo "================================================"
网络问题
Pod 无法访问外网
诊断脚本:
#!/bin/bash
# diagnose-pod-connectivity.sh
POD_NAME="myapp-5d7c9b8f4f-abc12"
NAMESPACE="default"
echo "================================================"
echo "诊断 Pod 网络连接"
echo "================================================"
# 1. 测试 DNS 解析
echo "1. 测试 DNS 解析..."
kubectl exec $POD_NAME -n $NAMESPACE -- nslookup google.com
# 2. 测试外网连接
echo ""
echo "2. 测试外网连接..."
kubectl exec $POD_NAME -n $NAMESPACE -- curl -I https://www.google.com
# 3. 检查 Pod IP
echo ""
echo "3. 检查 Pod IP..."
kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq '.status.podIP'
# 4. 检查节点和子网
echo ""
echo "4. 检查节点和子网..."
NODE_NAME=$(kubectl get pod $POD_NAME -n $NAMESPACE -o json | jq -r '.spec.nodeName')
kubectl get node $NODE_NAME -o json | jq '{nodeName:.metadata.name,instanceID:.spec.providerID}'
INSTANCE_ID=$(kubectl get node $NODE_NAME -o json | jq -r '.spec.providerID' | cut -d'/' -f5)
aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].SubnetId' --output text
# 5. 检查路由表
echo ""
echo "5. 检查子网路由表..."
SUBNET_ID=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].SubnetId' --output text)
aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=$SUBNET_ID" --query 'RouteTables[0].Routes'
# 6. 检查 NAT Gateway
echo ""
echo "6. 检查 NAT Gateway 状态..."
aws ec2 describe-nat-gateways --filter "Name=state,Values=available" --query 'NatGateways[*].{ID:NatGatewayId,SubnetId:SubnetId,State:State}'
# 7. 检查网络策略
echo ""
echo "7. 检查 NetworkPolicy..."
kubectl get networkpolicy -n $NAMESPACE
# 8. 检查安全组
echo ""
echo "8. 检查节点安全组..."
SG_IDS=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].SecurityGroups[*].GroupId' --output text)
for sg in $SG_IDS; do
echo " 安全组 $sg:"
aws ec2 describe-security-groups --group-ids $sg --query 'SecurityGroups[0].IpPermissionsEgress'
done
echo ""
echo "================================================"
echo "诊断完成"
echo "================================================"
调试工具集
常用调试命令
#!/bin/bash
# eks-debug-toolkit.sh
echo "================================================"
echo "EKS 调试工具集"
echo "================================================"
# 1. 集群信息
echo "1. 集群信息"
kubectl cluster-info
kubectl version --short
# 2. 节点信息
echo ""
echo "2. 节点信息"
kubectl get nodes -o wide
kubectl top nodes
# 3. Pod 信息
echo ""
echo "3. Pod 信息"
kubectl get pods --all-namespaces -o wide
kubectl top pods --all-namespaces
# 4. 服务信息
echo ""
echo "4. 服务信息"
kubectl get svc --all-namespaces
kubectl get endpoints --all-namespaces
# 5. 存储信息
echo ""
echo "5. 存储信息"
kubectl get pv
kubectl get pvc --all-namespaces
kubectl get storageclass
# 6. 事件
echo ""
echo "6. 最近事件"
kubectl get events --all-namespaces --sort-by='.lastTimestamp' | tail -20
# 7. 组件状态
echo ""
echo "7. 核心组件状态"
kubectl get pods -n kube-system
# 8. 日志
echo ""
echo "8. 系统组件日志"
kubectl logs -n kube-system -l k8s-app=aws-node --tail=50
kubectl logs -n kube-system -l k8s-app=kube-dns --tail=50
echo ""
echo "================================================"
echo "调试工具集完成"
echo "================================================"
kubectl debug 使用
# 1. 创建临时调试容器
kubectl debug POD_NAME -it --image=busybox
# 2. 在节点上调试
kubectl debug node/NODE_NAME -it --image=ubuntu
# 3. 复制 Pod 进行调试
kubectl debug POD_NAME -it --copy-to=debug-pod --container=app
# 4. 使用特定工具镜像
kubectl debug POD_NAME -it --image=nicolaka/netshoot
# 5. 共享进程命名空间
kubectl debug POD_NAME -it --image=busybox --share-processes
故障排查最佳实践
系统化排查流程:
1. 确认问题范围
├─ 单个 Pod 还是全部?
├─ 单个节点还是全部?
├─ 特定命名空间还是全集群?
└─ 何时开始出现?
2. 收集信息
├─ kubectl describe
├─ kubectl logs
├─ kubectl get events
└─ AWS 控制台/CLI
3. 检查配置
├─ YAML 配置
├─ 环境变量
├─ ConfigMap/Secret
└─ RBAC 权限
4. 检查资源
├─ CPU/内存使用
├─ 磁盘空间
├─ 网络带宽
└─ IP 地址池
5. 检查网络
├─ 安全组规则
├─ 路由表
├─ NAT Gateway
└─ DNS 解析
6. 查看日志
├─ 应用日志
├─ Kubelet 日志
├─ CloudWatch Logs
└─ AWS 服务日志
7. 测试和验证
├─ 手动测试
├─ 隔离问题
├─ 逐步恢复
└─ 记录结果
8. 预防措施
├─ 监控告警
├─ 定期巡检
├─ 备份策略
└─ 文档更新
常用诊断清单:
✅ kubectl get pods --all-namespaces
✅ kubectl get nodes
✅ kubectl get events --sort-by='.lastTimestamp'
✅ kubectl describe pod POD_NAME
✅ kubectl logs POD_NAME --previous
✅ kubectl top nodes
✅ kubectl top pods
✅ aws eks describe-cluster --name CLUSTER_NAME
✅ aws eks describe-nodegroup --cluster-name CLUSTER_NAME --nodegroup-name GROUP_NAME
✅ aws ec2 describe-nat-gateways
✅ aws ec2 describe-security-groups
EKS 故障排查章节完成!现在更新导航配置。