Pod的存活性探测

设置exec探针

通过在目标容器中执行用户设定的命令执行结果来判断容器的健康状况。0表示成功,其余均为失败。使用spec.containers.livenessProbe.exec字段设置此类检测,该字段只有一个属性command。下面是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: liveness
spec:
  containers:
  - name: myapp
    image: busybox
    args: ["/bin/sh", "-c", "touch /tmp/healthy; sleep 60; rm -f /tmp/healthy; sleep 600"]
    livenessProbe:
      exec:
        command: ["test", "-e", "/tmp/healthy"]

上述示例启动了一个容器,并且在容器内创建了一个文件,然后60秒之后删除。还定义了一个探测器,通过检测文件是否存在来监测容器是否正常运行。使用相关命令创建Pod之后,就可以使用kubectl describe来查看Pod的运行情况。

设置HTTP探针

向目标容器发起一个HTTP请求,根据响应码判断结果。使用spec.containers.livenessProbe.httpGet字段进行定义,可用的配置包括下面几个:

  • host :请求的主机地址。默认为Pod IP,还可以在httpHeaders中使用”Host:”来定义
  • port :请求的端口,必选字段
  • httpHeaders <[]Object>: 自定义的请求报文首部
  • path :请求的HTTP资源路径,即URL path
  • scheme:请求连接使用的协议。默认为HTTP

下面是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: liveness-http
spec:
  containers:
  - name: liveness-http
    image: nginx:1.14-alpine
    ports:
    - name: http
      containerPort: 80
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Healthy > /usr/share/nginx/html/healthz"]
    livenessProbe:
      httpGet:
        path: /healthz
        port: http
        scheme: HTTP

设置TCP探针

向特定端口发起TCP连接。连接成功即通过检测。使用spec.containers.livenessProbe.tcpSocket字段定义,主要有以下两个可用属性:

  • host :请求连接的目标ip地址
  • port :请求连接的目标端口,必选字段。

下面是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: liveness-tcp
spec:
  containers:
  - name: liveness-tcp
    image: nginx:1.14-alpine
    ports:
    - name: http
      containerPort: 80
    livenessProbe:
      tcpSocket:
        port: http

存活性探测行为属性

spec.containers.livenessProbe的一些其他自定义属性:

  • initialDelaySeconds :存活性探测延迟时长,即容器启动后多久开始第一次探测操作,默认为0。
  • timeoutSeconds :存活性探测的超时时长默认为1。
  • periodSeconds :探测频率,默认为10,最小为1
  • successThreshold :探测失败之后,连续多少次检测成功才视为成功。默认为1
  • failureThreshold :探测结果连续失败多少次才视为失败,默认为3最小为1。