一、什么是 Kubernetes 中的探测器
由于多种原因,应用程序可能变得不可靠。您需要确保应用程序处于所需状态。Kubernetes 提供了一种检查容器运行状况的方法。这种健康诊断称为探针。
二、探测容器的方法
kubelet 使用以下方法之一在其容器上完成探测:
2.1、执行
Kubelet 在容器内执行命令。结果取决于命令的退出代码。退出代码 0 表示诊断成功。
2.2、 httpget
Kubelet 向容器 IP 地址的指定端口发送请求。介于 200 和 400(含)之间的响应代码表示诊断成功。GET
2.3、tcp 套接字
Kubelet 尝试在容器 IP 地址的指定端口上建立 TCP 连接。已建立的连接表示诊断成功。
三、探头类型
Kubernetes 中有三种类型的探测器:
- 活体探头
- 就绪情况探测
- 启动探针
启动探测器是此列表中最近添加的,本文不对其进行讨论。
四、活体探头
活动探测器检测容器是否处于活动状态。这用于确保 Pod 的可用性。如果存活探测成功,kubelet 不会执行任何操作,因为容器已处于所需状态。如果失败,kubelet 会杀死容器,进一步的操作过程取决于容器的指定重启策略。
4.1、为什么要使用活体探针?
Kubelet 通过查看容器的状态来检查容器的运行状况。问题是 的状态不反映容器子进程的运行状况。如果您有单个进程容器,则无需指定活动探测器。否则,应使用活动探测器。PID 1PID 1
五、就绪情况探测
就绪情况探测检测容器是否已准备好为传入的网络请求提供服务。您不希望将流量发送到尚未准备好运行的 Pod。如果就绪探测失败,控制窗格将停止发往容器的网络流量。在容器上运行第一个就绪情况探测之前,默认就绪状态设置为就绪情况探测在其整个生命周期内定期在容器上运行。Failure
5.1、为什么使用就绪情况探测?
所有子进程启动后,应将网络流量发送到容器。如果没有就绪探测,Kubernetes 会在启动后立即将网络流量发送到容器。这并不意味着子进程已启动。在此状态下向容器发送网络流量可能会导致错误。每次容器重新启动或创建应用程序的新实例时,应用程序都会遇到错误。PID 1
六、如何在 Kubernetes 中配置探测
在场内定义探测器。每个探头都有以下五个参数:pods.spec.containers
- initialDelaySeconds:这指定容器启动后等待探测器运行的时间(以秒为单位)。默认值为 0。
- 周期秒:指定每个周期探测器之间的时间间隔。默认值为 10。
- timeoutSeconds:指定每个探测器必须等待才能获得响应的时间。默认值为 0。
- 成功阈值:指定指示诊断成功的成功探测计数。默认值为 1。
- 失败阈值:指定指示诊断失败的失败探测器计数。默认值为 3。
所有这些参数都用于配置探测器。要遵循本指南,您需要配置一个 Kubernetes 集群和 kubectl 客户端。您可以使用Vultr Kubernetes Engine在云中部署 Kubernetes 集群并测试探针。在您的计算机上进行配置并按照操作。kubectl
6.1、创建活动探测器
查看以下配置文件:
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-demo
spec:
  containers:
  - name: basic-container
    image: registry.k8s.io/busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 20; rm -f /tmp/healthy; sleep 1000
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 10
此配置创建单个容器 Pod 并定义活动探测。该探头用于执行诊断。创建容器后,执行命令。此命令将:exectouch /tmp/healthy; sleep 20; rm -f /tmp/healthy; sleep 100
- 创建文件/tmp/healthy
- 等待 20 秒。
- 删除文件。/tmp/healthy
- 使容器再保持活动状态 1000 秒。
请注意字段下的字段。这是定义活动探测器的位置。在这里,活体探测器将在创建容器后等待 5 秒,以 10 秒的时间间隔开始定期诊断。它使用 exec 方式执行探测。如果命令返回 0,则探测成功。livenessProbecontainerscat /tmp/healthy
创建容器:
kubectl apply -f config.yaml
检查容器的事件:
kubectl describe liveness-demo
在输出的末尾,您可以看到类似以下内容:
Events:
    Type    Reason     Age   From               Message
      ----    ------     ----  ----               -------
    Normal  Scheduled  25s   default-scheduler  Successfully assigned default/liveness-demo to probescluster-3a397dd3c5ec
    Normal  Pulling    25s   kubelet            Pulling image "registry.k8s.io/busybox"
    Normal  Pulled     22s   kubelet            Successfully pulled image "registry.k8s.io/busybox" in 3.292188263s
    Normal  Created    22s   kubelet            Created container basic-container
    Normal  Started    22s   kubelet            Started container basic-container
到目前为止,豆荚是健康且正在运行的。25 秒后,再次检查容器的事件:
kubectl apply -f config.yaml
您可以期望看到类似以下内容:
Events:
    Type     Reason     Age               From               Message
      ----     ------     ----              ----               -------
    Normal   Scheduled  56s               default-scheduler  Successfully assigned default/liveness-demo to probescluster-3a397dd3c5ec
    Normal   Pulling    55s               kubelet            Pulling image "registry.k8s.io/busybox"
    Normal   Pulled     52s               kubelet            Successfully pulled image "registry.k8s.io/busybox" in 3.292188263s
    Normal   Created    52s               kubelet            Created container basic-container
    Normal   Started    52s               kubelet            Started container basic-container
    Warning  Unhealthy  5s (x3 over 25s)  kubelet            Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory
    Normal   Killing    5s                kubelet            Container basic-container failed liveness probe, will be restarted
从输出中可以看到,5 秒前,存活探测失败,提示 kubectl 重启容器。现在,检查容器的状态:
kubectl get pod liveness-demo
预期产出:
NAME            READY   STATUS    RESTARTS     AGE
liveness-demo   1/1     Running   1 (4s ago)   85s
请注意,“重新启动”字段显示确认容器已重新启动。1
6.2、配置就绪探测
配置就绪情况探测类似于配置活动探测。可以通过在配置文件中的字段下添加以下内容来创建类似的准备情况检查探测器。pods.spec.containers
    readinessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 10
七、结论
本文介绍了 Kubernetes 的活跃性和就绪性探测、它们的使用以及如何配置它们。若要了解详细信息,请参阅在 kubernetes.io 配置活动、就绪和启动探测。

 主机百科
主机百科












