Kubernetes Pod异常卡住:资源充足无事件,Deployment/ReplicaSet创建
以下是针对这种无明显异常提示场景的实用排查步骤:
查看容器启动日志
直接用oc logs <pod-name>拉取Pod所有容器的日志,多容器场景下可加-c <container-name>指定容器查看。很多时候容器启动失败不会触发集群事件,但日志里会明确记录报错细节——比如配置文件路径错误、依赖服务不可达、挂载存储权限异常等。验证镜像可用性
先确认Pod使用的镜像地址无误,再到Pod所在节点手动尝试拉取镜像:podman pull <image-url>(OpenShift环境默认用podman)。同时检查镜像仓库权限,比如是否需要拉取密钥,但Pod绑定的ServiceAccount未配置对应secret,导致镜像拉取失败。检查初始化容器状态
如果Pod包含初始化容器(Init Containers),用oc describe pod <pod-name> | grep -A 20 "Init Containers"查看其运行状态。初始化容器未完成执行的话,主容器不会启动,直接导致Pod显示0/0未就绪。查看Pod的条件细节
执行oc get pod <pod-name> -o yaml,找到status.conditions字段,这里会记录Pod各阶段的状态细节——比如PodScheduled是否正常、ContainersReady失败的具体原因,部分场景下集群事件未记录,但该字段会隐藏关键线索。核对探针配置
检查Deployment中容器的存活探针(livenessProbe)和就绪探针(readinessProbe)配置:比如探针路径错误、端口不匹配,或者超时时间设置过短,导致容器刚启动就被判定为未就绪。用oc describe deployment <deployment-name> | grep -A 10 "Liveness Probe"或Readiness Probe可快速查看探针配置。检查ServiceAccount权限
若容器需要调用K8s API,需确认Pod使用的ServiceAccount是否具备足够权限。用oc auth can-i <verb> <resource> --as=system:serviceaccount:<namespace>:<sa-name>验证,例如oc auth can-i get pods --as=system:serviceaccount:my-namespace:my-sa,权限不足可能导致容器启动卡壳。排查节点运行时状态
即便资源充足,节点的容器运行时(如cri-o)也可能出现异常。用oc describe node <node-name>查看节点状态,或查看运行时日志:journalctl -u cri-o.service,排查是否存在容器启动失败的相关报错。
内容的提问来源于stack exchange,提问作者Mohammad Reza Karimi

