Pod 健康检查(探针)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

学习目标:

  • 探针有哪些规则
  • 通过什么方法检查
  • 探针运行的方式

一、健康检查(探针)

健康检查:又称为探针( Probe),探针是由 kubelet 对容器执行的定期诊断。

官网示例:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

1.1 探针的三种规则

liveness Probe

  • liveness Probe:存活探针:判断容器是否正在运行。如果探测失败,则 kubelet 会杀死容器,并且容器将根据 restartPolicy 来设置 pod状态。如果容器不提供存活探针,则默认状态为 Success。

readiness Probe

  • readiness Probe:可读性探针:判断容器是否准备好接受请求。如果探测失败,端点控制器将从与 Pod 匹配的所有 service endpoints 中 剔除删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success。

startup Probe

  • startup Probe(1.17版本增加的):**判断容器内的应用程序是否已启动,主要针对于不能确定具体启动时间的应用。**如果配置了 startupProbe 探测,在则在 startupProbe 状态为 Success 之前,其他所有探针都处于无效状态,直到它成功后其他探针才起作用。如果 startupProbe 失败,kubelet 将杀死容器,容器将根据 restartPolicy 来重启。如果容器没有配置 startupProbe,则默认状态为Success。

注:以上规则可以同时定义。在 readinessProbe 检测成功之前,Pod 的 running 状态是不会变成 ready 状态的。

1.2 Probe 支持三种检查方法

  • exec在容器内执行 指定一段命令。如果命令退出时 返回码为 0 则认为诊断成功。
  • tcpSocket:对指定端口上的容器的IP地址 进行TCP检查(三次握手)。如果端口打开,TCP 连接成功,则诊断被认为是成功的。
  • httpGet:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码在 200~400 之间,则诊断被认为是成功的。监测的是 路径上的文件在不在。

每次探测都将获得以下三种结果之一:
成功:容器通过了诊断。
失败:容器未通过诊断。
未知:诊断失败,因此不会采取任何行动。

二、探针测试

2.1 exec 探测方式

//示例1: exec 方式

apiVersion: v1
kind: Pod  #自主式pod类型
metadata:
labels:
trest: liveness
name: liveness-exec
spec:
  containers:
  - name: liveness
  image: k8s.gcr.io/ busybox
  args:
  - /bin/sh-
  - -C
  - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 60
  livenessProbe:
    exec:
      command:
      - cat
      - /tmp/healthy
    failureThreshold: 1
    initialDelayseconds: 5
    periodSeconds: 5




//initialDelaySeconds:容器启动,探针延后工作,默认是0s。
指定 kubelet在执行第一次探测前 应延迟等待X秒后开始探测,即第一次探测是在容器启动后的第6秒才开始执行。默认是0秒,最小值是0

//periodSeconds:探针探测周期,指定了kubelet应该每5秒执行一次存活探测。默认是10秒。最小值是1

#failureThreshold:当探测失败时,Kubernetes将在放弃之前重试的次数。
存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是3。最小值是1

#timeoutSeconds:探测的超时后等待多少秒。默认值是1秒。最小值是1(在Kubernetes 1.20版本之前,exec 探针会忽略timeoutSeconds探针会无限期地持续运行,甚至可能超过所配置的限期,直到返回结果为止。)

可以看到Pod 中只有一个容器。kubelet 在执行第一次探测前需要等待5秒,kubelet 会每5秒执行一次存活探测。kubelet 在容器内执行命令 cat /tmp/healthy来进行探测。如果命令执行成功并且返回值为 0,kubelet就会认为这个容器是健康存活的。

vim exec.yaml

apiversion: v1
kind: Pod
metadata:
  name: liveness-exec
  namespace: default
spec:
containers:
  - name: liveness-exec-container
    image: busybox
    imagePullPolicy: .IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/live ; sleep 30; rm -rf /tmp/live; sleep 3600"]
    livenessProbe :  #设置存活探针
      exec:	#exec 检查方法
        command: [ "test" , "-e", "/tmp/live"]  #检查文件目录是否存在
    initialDelayseconds: 1   #容器启动,探针延后1秒工作
    periodSeconds: 3   #kubelet应该每3秒执行一次存活探测


#保存后,创建资源
kubectl create -f exec.yaml
kubectl describe pods liveness-exec

2.2 httpGet 方式

//示例2:httpGet方式
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Heade
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值