探针

Kubernetes提供的探针机制,可以用来检测目标是否存活或是否可用。

其提供了两类探针:

  • 存活探针(liveness probe)

  • 就绪探针(readiness probe)

存活探针(liveness probe)

存活探针是用来检查容器是否在运行,可以为Pod中的每个容器单独指定存活探针,若探测失败,则会定期执行探针并重启容器。

存活探针有三种探测机制:

  • HTTP GET针对设定的URL执行请求,根据响应状态码判断容器状态(2xx或3xx为成功,其他或不响应为失败);

  • TCP套接字:与指定端口建立TCP连接,建立失败则探测失败;

  • Exec:在容器内执行任意命令,根据命令返回的状态码判断容器状态(0为成功,其他为失败);

创建探针

在下面这个例子中,将展示如何使用这三种探测机制:

apiVersion: v1
kind: Pod
metadata:
  name: liveness
  labels:
    test: liveness
spec:
  restartPolicy: OnFailure
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:    # 定义执行liveness检测的方法(用来确定何时通过重启容器实现自愈)
      exec:    # exec探测机制
        command:    # 用于检测使用的命令,以下命令返回0,表示正确,返回1,则不正确,需要做出操作,若连续执行3次探测均失败,则会杀掉该Pod,并重启
        - cat
        - /tmp/healthy
      httpGet:    # HTTP GET探针,对容器的IP地址执行HTTP GET请求,若响应状态码不代表错误。则被认为探测成功
        path: /    # http请求的路径
        port: 8080    # 探针连接的网络端口
      tcpSocket:    # TCP套接字探针,尝试与容器指定端口建立TCP连接,如果建立成功则探测成功,否则失败
        port: 8081
      initialDelaySeconds: 10    # 容器创建后10s再开始检测
      periodSeconds: 5    # 每5秒执行一次liveness检测

就绪探针(readiness probe)

就绪探针是用来检查容器是否准备就绪,是否可以加入Service接收客户端请求,可以为Pod中的每个容器单独指定就绪探针,若探测失败,则Pod状态不会变成Ready。

就绪探针同样有三种探测机制,与存活探针一样:

  • HTTP GET针对设定的URL执行请求,根据响应状态码判断容器状态(2xx或3xx为成功,其他或不响应为失败);

  • TCP套接字:与指定端口建立TCP连接,建立失败则探测失败;

  • Exec:在容器内执行任意命令,根据命令返回的状态码判断容器状态(0为成功,其他为失败);

创建探针

apiVersion: v1
kind: Pod
metadata:
  name: readiness
  labels:
    test: readiness
spec:
  restartPolicy: OnFailure
  containers:
  - name: readiness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    readinessProbe:    # 定义执行readiness检测的方法(用来确定何时将容器加入Service的Endpoint列表中,向外界提供服务)
      exec:    # exec探测机制
        command:    # 用于检测使用的命令,以下命令返回0,表示正确,返回1,则不正确,需要做出操作,若连续执行3次探测均失败,则会将READY置为0,即不可用
        - cat
        - /tmp/healthy
      httpGet:    # HTTP GET探针,对容器的IP地址执行HTTP GET请求,若响应状态码不代表错误。则被认为探测成功
        path: /    # http请求的路径
        port: 8080    # 探针连接的网络端口
      tcpSocket:    # TCP套接字探针,尝试与容器指定端口建立TCP连接,如果建立成功则探测成功,否则失败
        port: 8081
      initialDelaySeconds: 10    # 容器创建后10s再开始检测
      periodSeconds: 5    # 每5秒执行一次readiness检测

Last updated

Was this helpful?