Pod 生命周期、重启策略、健康检查、服务可用性检查

生命周期

正常就正常,不正常看日志。下一个

重启策略

Pod 重启策略包括 Always、Never、OnFailure。
kubelet 重启失败容器的时间间隔以 sync-frequency 乘 2n 来计算,如 1、2、4、8 倍等,最长时延 5min,并在重启成功之后的 10 min 后重置该时间。

当前可用于管理 Pod 的控制器包括 RC、Job、DaemonSet,还可以通过 kubelet 管理(静态 Pod),每种控制器对应的 Pod 重启策略要求如下:

  • RC 和 DS:必须设置为 Always,需要保证容器的正常运行。
  • Job:必须不设置为 Always,确保 Job 执行完毕之后不会重启。
  • 对于 kubelet,在 Pod 失效时自动启动它。

Pod 健康检查 & 服务可用性检查

k8s 对 Pod 的检查有三种探针,LivenessProbe、ReadinessProbe、SetupProbe。相对前两种比较常用,kubelet 会定期执行这两种探针来诊断容器的健康状况。

LibenessProbe 用于判断容器是否存活,如果不健康,就杀掉,然后看看要不要重启。如果没有设定该探针,则默认一直是存活的,至于真实是死是活就不好说了。
ReadinessProbe 用于判断容器服务是否可用,对于被 Service 管理的 Pod,如果发现容器不可用,系统将从 Service 的后端 Pod Endpoint 列表中将该 pod 隔离出去,直到它什么时候可用了再放回来。这样可以防止 Service 将业务转发到不可用的 Pod 上。
SetupProbe 探针,用于一些启动比较慢的情况。此时 ReadinessProbe 就不适用了,对于这种有且仅有一次的操作,使用 SetupProbe。

探针实现方式

以上三种探针均可使用以下三种实现方式:

1)execAction,在容器内部运行一个命令,如果命令返回码为0,则表明容器健康。

apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/health
      initialDelaySeconds: 15	# 启动容器后首次警醒健康检查的等待时间
      timeoutSeconds: 1			# 健康检查发送请求之后等待响应的时间,如果超时,则 kubelet 认为容器已无法提供服务

2)通过 tcpSocket
通过容器的 IP 地址和端口号执行 TCP 检查,如果能够建立连接则说明容器健康。
以下以 localhost:80 为例:

apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    livenessProbe:
      tcpSocket:
        port:80
      initialDelaySeconds: 15
      timeoutSeconds: 1

3)httpGet 方式
通过容器 IP、端口号以及路径调用 Get 方法,如果返回值结余 200~400 则说明正常。

apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    livenessProbe:
      httpGet: 
        path: /_status/healthz
        port: 80
      initialDelaySeconds: 15
      timeoutSeconds: 1

setupProbe 参考

apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    startupProbe:
      httpGet:
        path: /_status/healthz
        port: 80
      failureThreshold: 20
      periodSeconds: 10

这个 Pod 有 20 * 10 = 200s 的启动时间。


猜你喜欢

转载自blog.csdn.net/qq_43762191/article/details/126922367