K8S Troubleshooting 经验集
- Pod问题定位流程
- Pod常见问题
- PVC相关
-
- Pending Pod错误提示:pod has unbound immediate PersistentVolumeClaims
-
- PVC错误:no persistent volumes available for this claim and no storage class is set
- PVC错误:failed to provision volume with StorageClass "xxxx": claim Selector is not supported
- PVC错误:failed to provision volume with StorageClass "xxxx": invalid AccessModes [ReadWriteMany]: only AccessModes [ReadWriteOnce ReadOnlyMany] are supported
- 其他问题
Pod问题定位流程
1.查看pod详情
kubectl describe po --namespace <namespace> <pod name>
一般比如configmap/secret/pvc等问题都可以在pod详情这里初步定位到。需要注意的是,这里Event提示的内容不一定是最终导致pod起不来的结果,有可能是之前的log,现在已经修复的了。
2.查看pod日志
kubectl logs --namespace <namespace> <pod name> -c <container name>
如果是pod中的某个container起不来,可以通过查看对应container的log定位问题。
如果log中定位不到问题,那么可能就需要进入到pod里面看问题了。此时,可以先把其中container执行的command修改为sleep命令,等container起来以后,再执行原来的命令,一步一步定位问题。
可以通过edit deployment来修改container的启动command:
kubectl edit deployment --namespace <namespace> <deployment name>
修改的内容:
containers:
- name: init-env
command: ["sleep"]
args:
- "1000"
修改完后,等待pod重新创建后,就可以通过以下命令进入pod进一步排查问题
kubectl exec -it --namespace <namespace> <pod name> -c <container name> bash
3.查看节点状态
kubectl get nodes
如果出现cpu不足的情况,有可能是有节点down掉了,检查是否所有的节点都是Ready状态。
Pod常见问题
长时间处于Pending状态
通过describe命令查看pod详情,
kubectl describe pod --namespace <namespace> <pod name>
错误信息1:0/3 nodes are available: 3 node(s) didn’t match node selector.
-
可能原因:node上没有pod定义selector对应的label。
-
解决方法:检查node的label,确认没有selector对应的label后,给node添加label。
检查node label的命令:
kubectl get nodes --show-labels
添加label的命令:
kubectl label node <node name> <label entry>
错误信息2:0/4 nodes are available: 1 node(s) had no available volume zone, 2 Insufficient cpu, 3 Insufficient memory.
-
可能原因:节点资源不足。
-
解决方法:查看node详情,通过Allocatable和Allocated resources字段确认是否资源不足。如果确认是资源不足,资源该增就增;资源没得增就考虑调整replicas和resource request。
查看node详情的命令:
kubectl describe node <node name>
- Allocatable: 表示此节点能