更新时间:2024-11-06 GMT+08:00
分享

工作负载状态正常但未正常工作

问题现象

Pod已经处于Running状态(查看Pod状态)但未正常工作,或者访问结果不符合预期。

问题原因

可能是您的部署描述YAML文件(例如 Pod、Deployment、StatefulSet等)存在错误。例如:

  • 镜像版本未更新。您可能未使用正确的镜像版本,或者是旧版镜像和新版镜像重名均为latest版本,而节点上已存在旧版镜像,但工作负载的imagePullPolicy设置为IfNotPresent,导致未重新拉取新版镜像仍然运行旧版镜像。
  • 配置中的环境变量错误。例如将command拼写成commnd,仍然能够使用该YAML文件创建工作负载,但是容器在运行时,却不会使用您原本期望的命令,而是执行了镜像中的EntryPoint默认命令。

解决方案

  1. 查看Pod的配置,确定Pod中容器的配置是否符合预期。具体操作,请参见Pod配置查看方法
  2. 排查环境变量中的某一个Key是否存在拼写错误时,您可以参考以下方法。以command拼写成commnd为例,说明拼写问题排查方法。
    1. 在执行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
    2. 执行以下命令,将输出结果的pod.yaml文件与您创建Pod使用的文件进行对比。
      kubectl get pods/$mypod  yaml > mypod.yaml
      $mypod为异常Pod的名称,您可以通过kubectl get pods命令查看。
      • mypod.yaml文件比您创建时所使用的Pod文件多几行,说明已创建的Pod符合预期。
      • 如果mypod.yaml缺失创建Pod使用文件的部分代码行,说明您创建Pod使用的文件存在拼写问题。
  3. 查看Pod的日志,通过日志内容排查问题。具体操作,请参见容器日志查看方法
  4. 可通过终端进入容器查看容器内的本地文件是否符合预期。具体操作,请参见登录容器的方法

相关文档