Kubernetes--Pod存活性探测(设置TCP探针)

365 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

设置TCP探针

基于TCP的存活性探测(TCPSocketAction)用于向容器的特定端口发起TCP请求并尝试建立连接进行结果判定,连接建立成功即为通过检测。相比较来说它比基于HTTP的探测要更高效、更节约资源,但精准度略低,毕竟连接建立成功未必意味着页面资源可用。“spec.containers.livenessProbe.tcpSocket”宇段用于定义此类检测,它主要包含以下两个可用的属性。

  • host < string >:请求连接的目标IP地址,默认为Pod IP。
  • port < string >:请求连接的目标端口,必选字段。

下面是一个定义在资源清单文件liveness-tcp.yanal中的示例,它向Pod IP的80/tcp端口发起连接请求,并根据连接建立的状态判定测试结果:

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

这里不再给出具体的创建和测试过程啦~有兴趣的可以参考前两篇文章设置exec探针设置HTTP探针进行测试~~

存活性探测行为属性

使用kubectl describe命令查看配置了存活性探测的Pod对象的详细信息时,其相关容器中会输出类似如下一行的内容:

Liveness: exec [test -e /tmp/hea;thy] delay=0s timeout=1s period=10s #success=1 #failure=3

它给出了探测方式及其额外的配置属性delay 、timeout、period、success和failure及其各自的相关属性值。用户没有明确定义这些属性字段时,它们会使用各自的默认值,例如上面显示出的设定。这些属性信息可通过“spec.containers.livenessProbe”的如下属性字段来给出。

  • initialDelaySeconds < integer >:存活性探测延迟时长,即容器启动多久之后再开始第一次探测操作,显示为delay属性;默认为0秒,即容器启动后立刻便开始进行探测。

  • timeoutSeconds < integer >:存活性探测的超时时长,显示为timeout属性,默认为1s,最小值也为 1s。

  • periodSeconds < integer >:存活性探测的频度,显示为period属性,默认为10s,最小值为1s;过高的频率会对Pod对象带来较大的额外开销,而过低的频率又会使得对错误的反应不及时。

  • successThreshold < integer >:处于失败状态时,探测操作至少连续多少次的成功才被认为是通过检测,显示为#success属性,默认值为 1,最小值也为 1。

  • failureThreshold:处于成功状态时,探测操作至少连续多少次的失败才被视为是检测不通过,显示为#failure属性,默认值为3,最小值为1。

例如,这里可将设置exec探针清单文件中定义的探测示例重新定义为如下所示的内容:

spec:
  containers:
......
    livenessProbe:
      exec:
        command: ["test", "-e", "/tmp/healthy"]
      initialDelaySeconds 5s
       timeoutSeconds 2s
       periodseconds 5s

根据修改的清单再次创建Pod对象并进行效果测试,可以从输出的详细信息中看出Liveness已经更新到自定义的属性,其内容如下所示。具体过程这里不再给出,感兴趣的可以自行测试。

Liveness: exec [test -e /tmp/healthy] delay=5s timeout=2s period=5s #success=1 #failure=3