kubectl describe po --namespace
一般比如configmap/secret/pvc等问题都可以在pod详情这里初步定位到。需要注意的是,这里Event提示的内容不一定是最终导致pod起不来的结果,有可能是之前的log,现在已经修复的了。
kubectl logs --namespace
如果是pod中的某个container起不来,可以通过查看对应container的log定位问题。
如果log中定位不到问题,那么可能就需要进入到pod里面看问题了。此时,可以先把其中container执行的command修改为sleep命令,等container起来以后,再执行原来的命令,一步一步定位问题。
可以通过edit deployment来修改container的启动command:
kubectl edit deployment --namespace
修改的内容:
containers:
- name: init-env
command: ["sleep"]
args:
- "1000"
修改完后,等待pod重新创建后,就可以通过以下命令进入pod进一步排查问题
kubectl exec -it --namespace
kubectl get nodes
如果出现cpu不足的情况,有可能是有节点down掉了,检查是否所有的节点都是Ready状态。
通过describe命令查看pod详情,
kubectl describe pod --namespace
错误信息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
错误信息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
前者与后者相减,可得出剩余可申请的资源。如果这个值小于 Pod 的 request,就不满足 Pod 的资源要求,Scheduler 在 Predicates (预选) 阶段就会剔除掉这个 Node,也就不会调度上去。
通过describe命令查看pod详情,
错误信息1:Back-off pulling image “
错误信息2:rpc error: code = Unknown desc = Error response from daemon: unauthorized: The client does not have permission for manifest xxxxxx Error: ErrImagePull
出现有pod一直处于Pending状态,通过命令
kubectl describe po --namespace
看到描述:pod has unbound immediate PersistentVolumeClaims
通过命令
kubectl get pvc --namespace
查看pvc的状态,发现有的pvc一直处于Pending状态,并且通过以下命令
kubectl describe pvc --namespace
看到以下错误描述:
可能原因:pvc的storageClass设置为“”,但是没有提前创建好对应的pv。(就是找不到PV)
解决方法:创建对应的pv即可。
pv定义文件可参考:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
capacity:
storage: 1Gi
accessModes: ["ReadWriteMany"]
hostPath:
path: /var/log/test
storageClassName: ""
使用命令创建对应pv
kubectl create -f
可能原因:配置pvc时设置了selector,但是没有提前创建好对应的pv。(就是找不到PV)
解决方法:创建带对应labels的pv即可。
pv定义文件可参考:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
labels:
pv: label-example
spec:
capacity:
storage: 1Gi
accessModes: ["ReadWriteMany"]
hostPath:
path: /var/log/test
storageClassName: "xxxx"
使用命令创建对应pv
kubectl create -f
可能原因:pvc配置的storageClass不支持ReadWriteMany模式。
解决方法:删除原有的pvc,重新创建一个支持ReadWriteMany模式的pvc。
通过命令以下命令删除pvc:
kubectl delete pvc --namespace
创建新的pvc,pvc的定义文件可以参考:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
namespace: >
spec:
accessModes: ["ReadWriteMany"]
storageClassName: "xxxx"
resources:
requests:
storage: 1Gi
selector:
matchLabels:
pv: label-example
使用命令创建对应pvc
kubectl create -f
Persistent Volumes支持类型参考
排错指南