如何配置 Kubernetes 就绪性和活动性探测

一、什么是 Kubernetes 中的探测器

由于多种原因,应用程序可能变得不可靠。您需要确保应用程序处于所需状态。Kubernetes 提供了一种检查容器运行状况的方法。这种健康诊断称为探针。

二、探测容器的方法

kubelet 使用以下方法之一在其容器上完成探测:

2.1、执行

Kubelet 在容器内执行命令。结果取决于命令的退出代码。退出代码 0 表示诊断成功。

2.2、 httpget

Kubelet 向容器 IP 地址的指定端口发送请求。介于 200 和 400(含)之间的响应代码表示诊断成功。GET

2.3、tcp 套接字

Kubelet 尝试在容器 IP 地址的指定端口上建立 TCP 连接。已建立的连接表示诊断成功。

三、探头类型

Kubernetes 中有三种类型的探测器:

  1. 活体探头
  2. 就绪情况探测
  3. 启动探针

启动探测器是此列表中最近添加的,本文不对其进行讨论。

四、活体探头

活动探测器检测容器是否处于活动状态。这用于确保 Pod 的可用性。如果存活探测成功,kubelet 不会执行任何操作,因为容器已处于所需状态。如果失败,kubelet 会杀死容器,进一步的操作过程取决于容器的指定重启策略

4.1、为什么要使用活体探针?

Kubelet 通过查看容器的状态来检查容器的运行状况。问题是 的状态不反映容器子进程的运行状况。如果您有单个进程容器,则无需指定活动探测器。否则,应使用活动探测器。PID 1PID 1

五、就绪情况探测

就绪情况探测检测容器是否已准备好为传入的网络请求提供服务。您不希望将流量发送到尚未准备好运行的 Pod。如果就绪探测失败,控制窗格将停止发往容器的网络流量。在容器上运行第一个就绪情况探测之前,默认就绪状态设置为就绪情况探测在其整个生命周期内定期在容器上运行。Failure

5.1、为什么使用就绪情况探测?

所有子进程启动后,应将网络流量发送到容器。如果没有就绪探测,Kubernetes 会在启动后立即将网络流量发送到容器。这并不意味着子进程已启动。在此状态下向容器发送网络流量可能会导致错误。每次容器重新启动或创建应用程序的新实例时,应用程序都会遇到错误。PID 1

六、如何在 Kubernetes 中配置探测

在场内定义探测器。每个探头都有以下五个参数:pods.spec.containers

  1. initialDelaySeconds:这指定容器启动后等待探测器运行的时间(以秒为单位)。默认值为 0。
  2. 周期秒:指定每个周期探测器之间的时间间隔。默认值为 10。
  3. timeoutSeconds:指定每个探测器必须等待才能获得响应的时间。默认值为 0。
  4. 成功阈值:指定指示诊断成功的成功探测计数。默认值为 1。
  5. 失败阈值:指定指示诊断失败的失败探测器计数。默认值为 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 配置活动、就绪和启动探测。

赞(0)
未经允许不得转载:主机百科 » 如何配置 Kubernetes 就绪性和活动性探测