troubleshooting
@chaterm · 收录于 1 周前
Kubernetes 故障排查
适合你,如果经常需要排查 Kubernetes 集群中的各种异常
/ 下载安装
用别的 agent?下载 .zip 解压,把文件夹放进它的技能目录
Claude Code
~/.claude/skills/(项目级 .claude/skills/)Codex CLI
~/.codex/skills/Cursor自动读取上面两处目录
其他工具见其文档的「skills」目录;两个下载是同一份文件,只是名字不同
/ 通过 npx 安装 校验哈希
npx oh-my-skill add chaterm/terminal-skills/troubleshooting/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- chaterm/terminal-skills/troubleshooting/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify chaterm/terminal-skills/troubleshooting安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
48GitHub stars
~1.7K上下文体积 · 单文件
镜像托管
怎么用
技能原文 SKILL.md
Kubernetes 故障排查
概述
故障诊断、事件分析、资源调试等技能。
集群状态检查
节点状态
# 查看节点
kubectl get nodes
kubectl get nodes -o wide
# 节点详情
kubectl describe node node-name
# 节点资源使用
kubectl top nodes
# 节点条件
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.conditions[?(@.type=="Ready")].status}{"\n"}{end}'
组件状态
# 查看组件状态 kubectl get componentstatuses kubectl get cs # 查看系统 Pod kubectl get pods -n kube-system # API Server 健康检查 kubectl get --raw='/healthz' kubectl get --raw='/readyz'
Pod 故障排查
Pod 状态分析
# 查看 Pod 状态 kubectl get pods -o wide kubectl get pods --field-selector status.phase!=Running # Pod 详情 kubectl describe pod pod-name # 查看事件 kubectl get events --sort-by='.lastTimestamp' kubectl get events --field-selector involvedObject.name=pod-name
常见 Pod 状态
Pending
# 原因:资源不足、调度问题、PVC 未绑定 # 排查步骤 kubectl describe pod pod-name | grep -A 10 Events kubectl describe pod pod-name | grep -A 5 "Conditions" # 检查节点资源 kubectl describe nodes | grep -A 5 "Allocated resources" # 检查 PVC kubectl get pvc kubectl describe pvc pvc-name
ImagePullBackOff
# 原因:镜像不存在、认证失败、网络问题
# 排查步骤
kubectl describe pod pod-name | grep -A 5 "Events"
# 检查镜像名
kubectl get pod pod-name -o jsonpath='{.spec.containers[*].image}'
# 检查 imagePullSecrets
kubectl get pod pod-name -o jsonpath='{.spec.imagePullSecrets}'
# 手动拉取测试
docker pull image-name
CrashLoopBackOff
# 原因:应用崩溃、配置错误、资源不足 # 查看日志 kubectl logs pod-name kubectl logs pod-name --previous # 查看退出码 kubectl describe pod pod-name | grep -A 5 "Last State" # 检查资源限制 kubectl describe pod pod-name | grep -A 10 "Limits" # 进入容器调试 kubectl exec -it pod-name -- sh
OOMKilled
# 原因:内存超限 # 查看退出原因 kubectl describe pod pod-name | grep -i oom # 查看资源使用 kubectl top pod pod-name # 增加内存限制 kubectl set resources deployment/deploy-name --limits=memory=512Mi
网络故障排查
Service 连通性
# 检查 Service kubectl get svc service-name kubectl describe svc service-name # 检查 Endpoints kubectl get endpoints service-name # 测试连通性 kubectl run test --rm -it --image=busybox -- sh wget -qO- http://service-name:port nslookup service-name
DNS 排查
# 检查 CoreDNS kubectl get pods -n kube-system -l k8s-app=kube-dns kubectl logs -n kube-system -l k8s-app=kube-dns # DNS 测试 kubectl run test --rm -it --image=busybox -- nslookup kubernetes kubectl run test --rm -it --image=busybox -- nslookup service-name.namespace.svc.cluster.local
网络策略
# 查看网络策略 kubectl get networkpolicy kubectl describe networkpolicy policy-name # 测试网络连通 kubectl run test --rm -it --image=nicolaka/netshoot -- bash curl -v http://service-name:port
存储故障排查
PV/PVC 问题
# 查看 PV/PVC kubectl get pv kubectl get pvc kubectl describe pvc pvc-name # 常见问题 # - PVC Pending: 没有匹配的 PV # - PV Released: 需要手动回收或删除 # 检查 StorageClass kubectl get storageclass kubectl describe storageclass sc-name
挂载问题
# 查看挂载 kubectl describe pod pod-name | grep -A 10 "Volumes" # 检查 Pod 内挂载 kubectl exec pod-name -- df -h kubectl exec pod-name -- ls -la /mount/path
资源问题排查
资源配额
# 查看配额 kubectl get resourcequota -n namespace kubectl describe resourcequota quota-name # 查看 LimitRange kubectl get limitrange -n namespace kubectl describe limitrange limit-name
资源使用
# Pod 资源使用 kubectl top pods kubectl top pods --containers # 节点资源使用 kubectl top nodes # 资源请求/限制 kubectl describe pod pod-name | grep -A 10 "Requests"
日志收集
容器日志
# 当前日志 kubectl logs pod-name kubectl logs pod-name -c container-name # 历史日志 kubectl logs pod-name --previous # 实时日志 kubectl logs -f pod-name --since=1h # 多 Pod 日志 kubectl logs -l app=nginx --all-containers
系统日志
# kubelet 日志 journalctl -u kubelet -f # 容器运行时日志 journalctl -u containerd -f journalctl -u docker -f # API Server 日志 kubectl logs -n kube-system kube-apiserver-master
调试工具
kubectl debug
# 调试 Pod kubectl debug pod-name -it --image=busybox --target=container-name # 复制 Pod 调试 kubectl debug pod-name -it --copy-to=debug-pod --container=debug --image=nicolaka/netshoot # 节点调试 kubectl debug node/node-name -it --image=busybox
临时调试 Pod
# 网络调试 kubectl run netshoot --rm -it --image=nicolaka/netshoot -- bash # DNS 调试 kubectl run dnsutils --rm -it --image=gcr.io/kubernetes-e2e-test-images/dnsutils -- sh # 通用调试 kubectl run debug --rm -it --image=busybox -- sh
常见场景
场景 1:应用无法访问
# 1. 检查 Pod 状态 kubectl get pods -l app=myapp # 2. 检查 Service kubectl get svc myapp-service kubectl get endpoints myapp-service # 3. 检查 Ingress kubectl get ingress kubectl describe ingress myapp-ingress # 4. 测试连通性 kubectl run test --rm -it --image=busybox -- wget -qO- http://myapp-service
场景 2:Pod 调度失败
# 1. 查看 Pod 事件 kubectl describe pod pod-name | grep -A 20 Events # 2. 检查节点资源 kubectl describe nodes | grep -A 10 "Allocated resources" # 3. 检查污点和容忍 kubectl describe nodes | grep Taints kubectl get pod pod-name -o yaml | grep -A 5 tolerations # 4. 检查亲和性 kubectl get pod pod-name -o yaml | grep -A 20 affinity
场景 3:集群证书问题
# 检查证书过期 kubeadm certs check-expiration # 更新证书 kubeadm certs renew all # 检查 API Server 证书 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
故障排查清单
| 问题类型 | 排查命令 | |----------|----------| | Pod 状态 | kubectl describe pod, kubectl logs | | 网络问题 | kubectl get svc/ep, DNS 测试 | | 存储问题 | kubectl get pv/pvc, kubectl describe | | 资源问题 | kubectl top, kubectl describe quota | | 调度问题 | kubectl describe pod, 检查节点资源 | | 认证问题 | 检查 ServiceAccount, RBAC |
按 Apache-2.0 许可原样转载,未经改动 · 在 GitHub 查看 →
评论
登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。
…