Pod 的 lifecycle

Pod phase

Pod 的 status 字段是一个 Pod Status 对象,Pod Status 对象中有一个 phase 字段。phase 拥有以下几种值:

  • Pending:Kubernetes 已经接受 Pod 实例的创建,但其中包含一个或者多个容器并未创建成功。Pending 包含调度和通过网络下载镜像的时间。
  • Running:Pod 已经被调度到某个节点上,Pod 中所有的容器都已经创建。此时至少有一个容器正在运行,或正处于启动、重启状态。
  • Succeeded:Pod 中的所有容器正常终止,不会再起启动。
  • Faild:Pod 中所有容器都已经终止,至少有一个容器非正常结束,例如:退出状态码为 0,被系统 OOME。
  • Unknown:无法取得 Pod 状态,一般为与 Pod 所在节点的 kubelet 失去通信。
    upload successful
容器探针
  • liveness probe:kubelet 通过使用此类探针确定应用程序是否还运行,如果探测结果失败,则 kubelet 会杀死容器,并且容器将受到重启策略的影响;不提供探针,则默认状态为 success。
    upload successful
Pod 重启策略

PodSpec 中有一个 restartPolicy 字段,拥有三个值,Always、OnFailure、Never。默认为 Always。适用于 Pod 中的所有容器。restartPolicy 仅通过同一节点上的 kubelet 重新启动容器。失败的容器由 kubelet 以五分钟为上限的指数延迟(10s,20s,40s)重新启动

  • readiness probe:kubelet 使用此类探针确定应用程序是否已经就绪可以接受流量进来。当 Pod 中的容器处于就绪状态的时候,kubelet 才会认为 Pod 处于就绪状态(一个 Pod 下可能存在多个容器)。否则,kubelet 会把未就绪的 Pod 从 Service 中移除,此时流量就不会被路由到未就绪的 Pod 上。
    upload successful

探针是由 kubelet 对容器执行的定期检查,调用由容器实现的 Handler。有三种类型处理程序:

  • ExecAction:在容器内执行自定义命令,如果命令退出返回码为 0 ,则认为成功。
  • TCPSocketAction:对指定端口上的 IP 地址进行 TCP 检查。
  • HTTPGetAction:对指定的端口和路径上的容器 IP 地址执行 HTTP Get 请求。响应状态码 大于等于200且小于400,则认为成功。
liveness exec 探针示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec
labels:
demo: liveness
spec:
containers:
- name: liveness
image: busybox:1.28
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
liveness HTTP Get 探针示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: Pod
metadata:
name: liveness-http
labels:
demo: liveness
spec:
containers:
- name: liveness
image: 815325223/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
  • timeoutSeconds:探测超时时间,默认1秒,最小1秒。
  • successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,但是如果是liveness 则必须是 1。最小值是 1。
  • failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
-------------本文结束感谢您的阅读-------------