更新时间:2024-11-06 GMT+08:00
工作负载状态正常但未正常工作
问题现象
Pod已经处于Running状态(查看Pod状态)但未正常工作,或者访问结果不符合预期。
问题原因
可能是您的部署描述YAML文件(例如 Pod、Deployment、StatefulSet等)存在错误。例如:
- 镜像版本未更新。您可能未使用正确的镜像版本,或者是旧版镜像和新版镜像重名均为latest版本,而节点上已存在旧版镜像,但工作负载的imagePullPolicy设置为IfNotPresent,导致未重新拉取新版镜像仍然运行旧版镜像。
- 配置中的环境变量错误。例如将command拼写成commnd,仍然能够使用该YAML文件创建工作负载,但是容器在运行时,却不会使用您原本期望的命令,而是执行了镜像中的EntryPoint默认命令。
解决方案
- 查看Pod的配置,确定Pod中容器的配置是否符合预期。具体操作,请参见Pod配置查看方法。
- 排查环境变量中的某一个Key是否存在拼写错误时,您可以参考以下方法。以command拼写成commnd为例,说明拼写问题排查方法。
- 在执行kubectl apply -f命令前,尝试为其添加--validate,然后执行kubectl apply --validate -f XXX.yaml命令。如果您将command拼写成commnd,将看到错误信息
I0805 10:43:25.129850 46757 schema.go:126] unknown field: commnd I0805 10:43:25.129973 46757 schema.go:129] this may be a false alarm, see https://github.com/kubernetes/kubernetes/issues/6842/pods/mypod
- 执行以下命令,将输出结果的pod.yaml文件与您创建Pod使用的文件进行对比。
kubectl get pods/$mypod yaml > mypod.yaml
$mypod为异常Pod的名称,您可以通过kubectl get pods命令查看。- mypod.yaml文件比您创建时所使用的Pod文件多几行,说明已创建的Pod符合预期。
- 如果mypod.yaml缺失创建Pod使用文件的部分代码行,说明您创建Pod使用的文件存在拼写问题。
- 在执行kubectl apply -f命令前,尝试为其添加--validate,然后执行kubectl apply --validate -f XXX.yaml命令。如果您将command拼写成commnd,将看到错误信息
- 查看Pod的日志,通过日志内容排查问题。具体操作,请参见容器日志查看方法。
- 可通过终端进入容器查看容器内的本地文件是否符合预期。具体操作,请参见登录容器的方法。