Install
openclaw skills install k8s-fta-skill基于FTA故障树分析法的Kubernetes问题定位和修复工具。当用户遇到k8s集群问题、Pod运行异常、服务访问失败、RBAC权限问题、DNS解析失败、OOMKilled、健康检查失败、网络策略限制、存储挂载问题、HPA扩展问题、API Server连接问题等情况时,使用此技能自动执行kubectl命令进行故障排查和修复。同时支持k3s轻量级Kubernetes发行版的故障排查。Supports both Chinese and English troubleshooting and automated fixing for Kubernetes cluster issues including Pod failures, service access problems, RBAC issues, DNS resolution failures, OOMKilled, health check failures, network policy restrictions, storage mount issues, HPA scaling problems, and API Server connectivity issues. Also supports k3s lightweight Kubernetes distribution.
openclaw skills install k8s-fta-skill本技能基于FTA(故障树分析)方法,提供系统化的Kubernetes集群故障排查和自动修复功能。通过自动执行kubectl命令,帮助用户快速定位和解决k8s环境中的各种问题,包括Pod运行异常、服务访问失败、网络通信问题、RBAC权限问题、DNS解析失败、OOMKilled、健康检查失败、网络策略限制、存储挂载问题、HPA扩展问题、API Server连接问题等。
This skill provides systematic Kubernetes cluster troubleshooting and automated fixing based on FTA (Fault Tree Analysis) methodology. Through automatic kubectl command execution, it helps users quickly locate and resolve various issues in k8s environments, including Pod failures, service access problems, network communication issues, RBAC permission issues, DNS resolution failures, OOMKilled, health check failures, network policy restrictions, storage mount issues, HPA scaling problems, API Server connectivity issues, and more.
自动执行以下命令检查集群中所有Pod的状态:
kubectl get pods --all-namespaces
分析输出:
根据第一步的结果,对异常状态的Pod执行详细检查:
kubectl describe pod <pod-name> -n <namespace>
分析输出:
Pending状态:
kubectl describe node <node-name>
kubectl get resourcequota -n <namespace>
kubectl describe pvc <pvc-name> -n <namespace>
CrashLoopBackOff状态:
kubectl logs <pod-name> -n <namespace>
kubectl logs <pod-name> --previous -n <namespace>
Error状态:
kubectl logs <pod-name> -n <namespace>
kubectl describe pod <pod-name> -n <namespace>
如果Pod处于Pending状态且资源不足,检查资源配额:
kubectl get resourcequota -n <namespace>
kubectl describe resourcequota <quota-name> -n <namespace>
kubectl describe node <node-name>
分析输出:
自动修复建议:
如果存在PersistentVolumeClaim问题,检查存储配置:
kubectl get pvc -n <namespace>
kubectl describe pvc <pvc-name> -n <namespace>
kubectl get pv
kubectl describe pv <pv-name>
分析输出:
自动修复建议:
如果存在镜像拉取失败,检查镜像配置:
kubectl describe pod <pod-name> -n <namespace>
kubectl get pods -n <namespace> -o jsonpath='{.items[*].spec.containers[*].image}'
分析输出:
自动修复建议:
如果Pod处于CrashLoopBackOff状态,检查容器日志:
kubectl logs <pod-name> -n <namespace> --tail=100
kubectl logs <pod-name> -n <namespace> --previous --tail=100
分析输出:
自动修复建议:
执行端口转发测试Pod内部服务是否正常:
kubectl port-forward <pod-name> 8080:<pod-port> -n <namespace>
分析输出:
自动修复建议:
如果服务访问失败,检查Service配置:
kubectl get svc -n <namespace>
kubectl describe svc <service-name> -n <namespace>
kubectl get endpoints <service-name> -n <namespace>
分析输出:
自动修复建议:
如果通过Ingress访问失败,检查Ingress配置:
kubectl get ingress -n <namespace>
kubectl describe ingress <ingress-name> -n <namespace>
kubectl get svc -n <namespace>
分析输出:
自动修复建议:
如果多个Pod出现问题,检查节点状态:
kubectl get nodes
kubectl describe node <node-name>
kubectl top nodes
分析输出:
自动修复建议:
如果Pod被OOMKilled,检查内存使用:
kubectl describe pod <pod-name> -n <namespace>
kubectl top pod <pod-name> -n <namespace>
kubectl top nodes
分析输出:
自动修复建议:
如果Pod因健康检查失败而重启,检查健康检查配置:
kubectl describe pod <pod-name> -n <namespace>
kubectl logs <pod-name> -n <namespace>
分析输出:
自动修复建议:
如果遇到权限拒绝错误,检查RBAC配置:
kubectl auth can-i <verb> <resource> --as=<user> -n <namespace>
kubectl get role -n <namespace>
kubectl get clusterrole
kubectl get rolebinding -n <namespace>
kubectl get clusterrolebinding
分析输出:
自动修复建议:
如果Pod无法解析域名,检查DNS配置:
kubectl exec -it <pod-name> -n <namespace> -- nslookup <domain>
kubectl exec -it <pod-name> -n <namespace> -- cat /etc/resolv.conf
kubectl get svc -n kube-system kube-dns
kubectl get pods -n kube-system -l k8s-app=kube-dns
分析输出:
自动修复建议:
如果Pod无法访问其他服务,检查网络策略:
kubectl get networkpolicies --all-namespaces
kubectl describe networkpolicy <policy-name> -n <namespace>
kubectl get pods -n <namespace> -o wide
分析输出:
自动修复建议:
如果Pod无法挂载存储卷,检查存储配置:
kubectl describe pod <pod-name> -n <namespace>
kubectl get pvc -n <namespace>
kubectl get pv
kubectl get storageclass
分析输出:
自动修复建议:
如果Pod因启动超时而失败,检查启动配置:
kubectl describe pod <pod-name> -n <namespace>
kubectl logs <pod-name> -n <namespace>
分析输出:
自动修复建议:
如果Pod无法调度到特定节点,检查污点配置:
kubectl describe node <node-name>
kubectl get pods -n <namespace> -o wide
kubectl describe pod <pod-name> -n <namespace>
分析输出:
自动修复建议:
如果Pod被抢占或无法调度,检查优先级配置:
kubectl describe pod <pod-name> -n <namespace>
kubectl get priorityclass
kubectl get pods -n <namespace> --sort-by=.spec.priorityClassName
分析输出:
自动修复建议:
如果自动扩展不工作,检查扩展配置:
kubectl get hpa -n <namespace>
kubectl describe hpa <hpa-name> -n <namespace>
kubectl get vpa -n <namespace>
kubectl describe vpa <vpa-name> -n <namespace>
kubectl get pods -n kube-system -l k8s-app=metrics-server
分析输出:
自动修复建议:
如果Pod在更新时被意外终止,检查PDB配置:
kubectl get pdb -n <namespace>
kubectl describe pdb <pdb-name> -n <namespace>
kubectl get deployment -n <namespace>
kubectl describe deployment <deployment-name> -n <namespace>
分析输出:
自动修复建议:
如果容器无法启动或运行异常,检查运行时状态:
kubectl describe pod <pod-name> -n <namespace>
kubectl logs <pod-name> -n <namespace>
systemctl status docker # 或 containerd
docker ps # 或 crictl ps
分析输出:
自动修复建议:
如果遇到证书相关错误,检查证书状态:
kubeadm certs check-expiration
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
kubectl get pods -n kube-system | grep -E 'apiserver|controller-manager|scheduler'
分析输出:
自动修复建议:
如果无法连接到API Server,检查API Server状态:
kubectl cluster-info
kubectl get componentstatuses
kubectl get pods -n kube-system | grep apiserver
kubectl logs -n kube-system kube-apiserver-<node-name>
分析输出:
自动修复建议:
如果etcd集群出现问题,检查etcd状态:
kubectl get pods -n kube-system | grep etcd
kubectl logs -n kube-system etcd-<node-name>
ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key endpoint health
etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key endpoint status --write-out=table
分析输出:
自动修复建议:
命令执行失败:
权限不足:
网络连接问题:
资源不足:
### 问题诊断报告 / Issue Diagnosis Report
**问题描述 / Issue Description**: [用户描述的问题]
**诊断结果 / Diagnosis Result**:
- 问题类型 / Issue Type: [识别的问题类型]
- 严重程度 / Severity: [Critical/High/Medium/Low]
- 影响范围 / Impact: [受影响的Pod、Service、Node等]
**根本原因 / Root Cause**:
- 主要原因 / Primary Cause: [主要问题原因]
- 次要原因 / Secondary Cause: [次要问题原因]
- 相关组件 / Affected Components: [受影响的k8s组件]
**执行的检查 / Performed Checks**:
1. [检查1] - 结果: [结果]
2. [检查2] - 结果: [结果]
3. [检查3] - 结果: [结果]
**修复建议 / Fix Recommendations**:
- 立即行动 / Immediate Action: [建议的立即操作]
- 短期方案 / Short-term Solution: [短期解决方案]
- 长期方案 / Long-term Solution: [长期解决方案]
**预防措施 / Prevention Measures**:
- [预防措施1]
- [预防措施2]
- [预防措施3]
对于可以自动修复的问题,技能会执行以下操作:
# 示例:自动修复Pod资源限制
kubectl patch pod <pod-name> -n <namespace> --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/resources/limits/memory", "value": "2Gi"}]'
# 示例:自动重启失败的Pod
kubectl delete pod <pod-name> -n <namespace>
# 示例:自动更新Service端口
kubectl patch svc <service-name> -n <namespace> --type='json' -p='[{"op": "replace", "path": "/spec/ports/0/targetPort", "value": 8080}]'
用户输入:我的Pod一直处于CrashLoopBackOff状态,如何排查?
技能自动执行:
kubectl get pods -n <namespace> - 识别异常Podkubectl describe pod <pod-name> -n <namespace> - 获取详细信息kubectl logs <pod-name> -n <namespace> - 查看当前日志kubectl logs <pod-name> --previous -n <namespace> - 查看之前日志分析结果:
自动修复建议:
用户输入:我的Service创建成功但无法访问,如何排查?
技能自动执行:
kubectl get svc -n <namespace> - 检查Service状态kubectl describe svc <service-name> -n <namespace> - 获取详细信息kubectl get endpoints <service-name> -n <namespace> - 检查后端Podkubectl port-forward svc/<service-name> 8080:<service-port> -n <namespace> - 测试访问分析结果:
自动修复建议:
本技能通过FTA故障树分析方法,提供系统化的Kubernetes故障排查和自动修复功能。技能能够自动执行kubectl命令,分析输出结果,识别问题原因,并提供具体的修复建议。技能包含完善的错误处理和重试机制,确保排查过程的稳定性和可靠性。
使用此技能时,用户只需描述遇到的问题,技能会自动执行相应的排查命令,分析结果,并提供修复方案。对于可以自动修复的问题,技能会直接执行修复操作;对于需要人工干预的问题,技能会提供详细的修复指导。
技能支持k8s和k3s环境,适用于各种规模的Kubernetes集群,是k8s运维人员的得力助手。