一、Pod 常见状态

Unschedulable

pod 不能被调度,kube-scheduler 没有匹配到合适的 node 节点

PodScheduled

pod 正处于调度中,在 kube-scheduler 刚开始调度的时候,还没有将 pod 分配到指定的 node, 在筛选出合适的节点后就会更新 etcd 数据,将 pod 分配到指定的 node

Pending

正在创建 pod,但 pod 中的容器还没有全部被创建完成。处于此状态的 pod 应该检查依赖的存储是否有权限挂载、镜像是否正常等

Failed

pod 中有容器启动失败而导致 pod 工作异常

Unknown

由于某种原因无法获得 pod 的当前状态, 通常是由于与 pod 所在的 node 节点通信错误

Initialized

所有 pod 中的初始化容器已经完成了

Running

pod 内部的容器已经被创建并且启动

Ready

表示 pod 中的容器已经可以提供访问服务

Error

pod 启动过程中发生错误

NodeLost

pod 所在节点失联

Waiting

pod 等待启动

Terminating

pod 正在被销毁

CrashLoopBackOff

pod 之前是启动了,后面又异常退出了,只要 pod 的 restartPolicy 不是 Never 就可能被重启拉起,此时 pod 的 RestartCounts 通常是大于 0 的

ImagePullBackOff

pod 所在的 node 节点下载镜像失败

InvalidImageName

node 节点无法解析镜像名称导致的镜像无法下载

ImageInspectError

无法校验镜像,镜像不完整导致

ErrImageNeverPull

策略禁止拉取镜像,可能镜像中心权限是私有等

RegistryUnavailable

镜像服务器不可用,网络原因或 harbor 宕机

ErrImagePull

镜像拉取出错,超时或下载被强制终止

CreateContainerConfigError

不能创建 kubelet 使用的容器配置

CreateContainerError

创建容器失败

RunContainerError

pod 运行失败,容器中没有初始化 PID 为1的守护进程等

ContainersNotInitialized

pod 没有初始化完毕

ContainersNotReady

pod 没有准备完毕

ContainerCreating

pod 正在创建中

PodInitializing

pod 正在初始化中

DockerDaemonNotReady

node 节点 docker 服务没有启动

NetworkPluginNotReady

网络插件没有启动

二、Pod 探针

2.1 探针类型

  • startupProbe
  • 启动探针,kubernetes v1.16 引入 alpha 版;
  • 判断容器内的应用程序是否已启动完成,如果配置了启动探测,则会先禁用所有其它的探测,直到 startupProbe 检测成功为止,如果 startupProbe 探测失败,则 kubelet 将杀死容器,容器将按照重启策略进行下一步操作,如果容器没有提供启动探测,则默认状态为成功。
  • livenessProbe
  • 存活探针
  • 检测容器容器是否正在运行,如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其重启策略的影响,如果容器不提供存活探针,则默认状态为 Success,livenessProbe 用于控制是否重启 pod。
  • readinessProbe
  • 就绪探针
  • 如果就绪探测失败,端点控制器将从与 pod 匹配的所有 Service 的端点中删除该 pod 的 IP 地址,初始延迟之前的就绪状态默认为 Failure,如果容器不提供就绪探针,则默认状态为 Success,readinessProbe 用于控制 pod 是否添加至 service。


2.2 探针常用通用配置参数

  • initialDelaySeconds: 120
  • 初始化延迟时间,告诉 kubelet 在执行第一次探测前应该等待多少秒,默认是0秒,最小值是0。
  • periodSeconds: 60
  • 探测周期间隔时间,指定了 kubelet 应该每多少秒执行一次存活探测,默认是 10 秒,最小值是 1。
  • timeoutSeconds: 5
  • 单次探测超时时间,探测的超时后等待多少秒,默认值是1秒,最小值是1。
  • successThreshold: 1
  • 从失败转为成功的重试次数,探测器在失败后,被视为成功的最小连续成功数,默认值是1,存活探测的这个值必须是1,最小值是 1。
  • failureThreshold: 3
  • 从成功转为失败的重试次数,当 pod 启动了并且探测到失败,Kubernetes 的重试次数,存活探测情况下的放弃就意味着重新启动容器,就绪探测情况下的放弃 pod 会被打上未就绪的标签,默认值是3,最小值是1。


2.3 探针http配置参数

HTTP 探测器可以在 httpGet 上配置额外的字段:

  • host
  • 连接使用的主机名,默认是 pod 的 IP,也可以在HTTP头中设置 “Host” 来代替。
  • scheme: http
  • 用于设置连接主机的方式(HTTP 还是 HTTPS),默认是 HTTP。
  • path: /
  • 访问 HTTP 服务的路径。
  • httpHeaders:
  • 请求中自定义的 HTTP 头,HTTP 头字段允许重复。
  • port: 80
  • 访问容器的端口号或者端口名, 如果数字必须在 1 ~ 65535 之间。


2.4 样例

...
startupProbe:
failureThreshold: 3
httpGet:
path: /
port: 8761
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 8761
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 3
httpGet:
path: /
port: 8761
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
...