k8s-pod健康检查_探针

对pod的健康检查可以通过两类探针来检查: LivenessProbe 和 ReadinessProbe

LivenessProbe探针:用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。

如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回的值永远是"Success"。

ReadinessProbe: 用于判断容器是否启动完成(ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态将被修改。Endpoint Controller将从Service的

Endpoint中删除包含该内容所在pod的Endpoint

 

kubelet定期执行LivenessProbe探针来诊断容器IDE健康状况。LivenessProbe有三种实现方式:

1、ExecAction: 在容器内部执行一个命令,如果该命令的返回码为0,则表明容器健康。

如: 通过执行 “cat /tmp/health”判断容器运行是否正常。而pod创建后,在创建/tmp/health文件的10秒后删除该文件,健康检查的初始探测时间(initialDelaySeconds)15秒,

探测结果为fail,导致kubelet杀掉该容器并重启。

[root@salt php-redis]# cat test.yaml 
apiVersion: v1
kind: pod
metadata:
  labels:
    test: liveness
   name: liveness-exec
spec:
  containers:
  - name: liveness
    image: gcr.io/google_containers/busybox
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/health
      initialDelaySeconds: 15
      timeoutSeconds: 1

2、TCPSocketAction: 通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP链接,则表明容器健康

如:通过与容器的localhost:80 建立TCP连接进行健康检查。

[root@salt php-redis]# cat test-TCP.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-healthcheck
spec:
  containers:
  - name: naginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 1

3、HTTPGetAction: 通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器状态健康。

如: kubelet定时发送HTTP请求到localhost:80/_status/healthz来进行容器应用的健康检查。

[root@salt php-redis]# cat test-http.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-healthcheck
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /_status/healthz
        port: 80
      initialDelaySeconds: 30
      timeoutSconds: 1

对于每种探测方式,都需要设置initialDelaySeconds和timeoutSeconds两个参数,他们的含义分别为:

initialDelaySeconds: 启动容器后进行首次健康检查的等待时间,单位为秒

timeoutSeconds: 健康检查发送请求后等待响应的超时时间,单位为秒。当超时发生时,kubelet会认为容器已经无法提供服务,会重启该容器。

posted @ 2021-07-07 16:49  风儿飘  阅读(977)  评论(0编辑  收藏  举报