×

关于就绪探针和存活性探针

使用就绪探针和存活性探针检测和处理不健康的虚拟机 (VM)。您可以在 VM 的规范中包含一个或多个探针,以确保流量不会到达尚未准备好接收流量的 VM,并在 VM 停止响应时创建新的 VM。

就绪探针确定 VM 是否已准备好接受服务请求。如果探针失败,则 VM 将从可用端点列表中移除,直到 VM 准备好为止。

存活性探针确定 VM 是否正在响应。如果探针失败,则 VM 将被删除,并创建一个新的 VM 来恢复响应能力。

您可以通过设置VirtualMachine对象的spec.readinessProbespec.livenessProbe字段来配置就绪探针和存活性探针。这些字段支持以下测试:

HTTP GET

探针使用 Webhook 确定 VM 的运行状况。如果 HTTP 响应代码介于 200 和 399 之间,则测试成功。对于在完全初始化后返回 HTTP 状态码的应用程序,您可以使用 HTTP GET 测试。

TCP 套接字

探针尝试打开到 VM 的套接字。只有在探针能够建立连接的情况下,VM 才被认为是健康的。对于直到初始化完成才开始侦听的应用程序,您可以使用 TCP 套接字测试。

访客代理 ping

探针使用guest-ping命令确定 QEMU 访客代理是否在虚拟机上运行。

定义 HTTP 就绪探针

通过设置虚拟机 (VM) 配置的spec.readinessProbe.httpGet字段来定义 HTTP 就绪探针。

步骤
  1. 在 VM 配置文件中包含就绪探针的详细信息。

    带有 HTTP GET 测试的就绪探针示例
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      annotations:
      name: fedora-vm
      namespace: example-namespace
    # ...
    spec:
      template:
        spec:
          readinessProbe:
            httpGet: (1)
              port: 1500 (2)
              path: /healthz (3)
              httpHeaders:
              - name: Custom-Header
                value: Awesome
            initialDelaySeconds: 120 (4)
            periodSeconds: 20 (5)
            timeoutSeconds: 10 (6)
            failureThreshold: 3 (7)
            successThreshold: 3 (8)
    # ...
    1 要执行以连接到 VM 的 HTTP GET 请求。
    2 探针查询的 VM 端口。在上面的示例中,探针查询端口 1500。
    3 要在 HTTP 服务器上访问的路径。在上面的示例中,如果服务器的 /healthz 路径的处理程序返回成功代码,则 VM 被认为是健康的。如果处理程序返回失败代码,则 VM 将从可用端点列表中移除。
    4 VM 启动后启动就绪探针之前的秒数。
    5 执行探针之间的延迟(秒)。默认延迟为 10 秒。此值必须大于timeoutSeconds
    6 探针超时并假定 VM 失败之前的非活动秒数。默认值为 1。此值必须小于periodSeconds
    7 允许探针失败的次数。默认为 3。在指定的尝试次数之后,pod 将被标记为Unready
    8 探针在失败后必须报告成功的次数才能被认为是成功的。默认为 1。
  2. 运行以下命令创建 VM:

    $ oc create -f <file_name>.yaml

定义 TCP 就绪探针

通过设置虚拟机 (VM) 配置的spec.readinessProbe.tcpSocket字段来定义 TCP 就绪探针。

步骤
  1. 在 VM 配置文件中包含 TCP 就绪探针的详细信息。

    带有 TCP 套接字测试的就绪探针示例
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      annotations:
      name: fedora-vm
      namespace: example-namespace
    # ...
    spec:
      template:
        spec:
          readinessProbe:
            initialDelaySeconds: 120 (1)
            periodSeconds: 20 (2)
            tcpSocket: (3)
              port: 1500 (4)
            timeoutSeconds: 10 (5)
    # ...
    1 VM 启动后启动就绪探针之前的秒数。
    2 执行探针之间的延迟(秒)。默认延迟为 10 秒。此值必须大于timeoutSeconds
    3 要执行的 TCP 操作。
    4 探针查询的 VM 端口。
    5 探针超时并假定 VM 失败之前的非活动秒数。默认值为 1。此值必须小于periodSeconds
  2. 运行以下命令创建 VM:

    $ oc create -f <file_name>.yaml

定义 HTTP 存活性探针

通过设置虚拟机 (VM) 配置的spec.livenessProbe.httpGet字段来定义 HTTP 存活性探针。您可以像就绪探针一样定义 HTTP 和 TCP 测试的存活性探针。此过程配置带有 HTTP GET 测试的存活性探针示例。

步骤
  1. 在 VM 配置文件中包含 HTTP 存活性探针的详细信息。

    带有 HTTP GET 测试的存活性探针示例
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      annotations:
      name: fedora-vm
      namespace: example-namespace
    # ...
    spec:
      template:
        spec:
          livenessProbe:
            initialDelaySeconds: 120 (1)
            periodSeconds: 20 (2)
            httpGet: (3)
              port: 1500 (4)
              path: /healthz (5)
              httpHeaders:
              - name: Custom-Header
                value: Awesome
            timeoutSeconds: 10 (6)
    # ...
    1 VM 启动后启动存活性探针之前的秒数。
    2 执行探针之间的延迟(秒)。默认延迟为 10 秒。此值必须大于timeoutSeconds
    3 要执行以连接到 VM 的 HTTP GET 请求。
    4 探针查询的 VM 端口。在上面的示例中,探针查询端口 1500。VM 通过 cloud-init 在端口 1500 上安装并运行一个最小的 HTTP 服务器。
    5 要在 HTTP 服务器上访问的路径。在上面的示例中,如果服务器的/healthz路径的处理程序返回成功代码,则 VM 被认为是健康的。如果处理程序返回失败代码,则 VM 将被删除并创建一个新的 VM。
    6 探针超时并假定 VM 失败之前的非活动秒数。默认值为 1。此值必须小于periodSeconds
  2. 运行以下命令创建 VM:

    $ oc create -f <file_name>.yaml

定义看门狗

您可以通过执行以下步骤来定义一个看门狗来监控客户操作系统:的运行状况

  1. 为虚拟机 (VM) 配置看门狗设备。

  2. 在客户机上安装看门狗代理。

如果客户操作系统无响应,看门狗设备将监控代理并执行以下操作之一:

  • poweroff:VM 将立即关机。如果spec.running设置为truespec.runStrategy未设置为manual,则 VM 将重新启动。

  • reset:VM 原地重新启动,客户操作系统无法响应。

    重新启动时间可能会导致存活性探针超时。如果集群级保护检测到存活性探针失败,则 VM 可能会被强制重新调度,从而增加重新启动时间。

  • shutdown:VM 通过停止所有服务来优雅地关机。

Windows VM 不支持看门狗。

为虚拟机配置看门狗设备

您可以为虚拟机 (VM) 配置看门狗设备。

先决条件
  • VM 必须具有对i6300esb看门狗设备的内核支持。Red Hat Enterprise Linux (RHEL) 镜像支持i6300esb

步骤
  1. 创建一个包含以下内容的YAML文件:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm2-rhel84-watchdog
      name: <vm-name>
    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm2-rhel84-watchdog
        spec:
          domain:
            devices:
              watchdog:
                name: <watchdog>
                i6300esb:
                  action: "poweroff" (1)
    # ...
    1 指定poweroffresetshutdown

    上面的示例在具有 poweroff 操作的 RHEL8 VM 上配置了i6300esb看门狗设备,并将设备公开为/dev/watchdog

    现在,看门狗二进制文件可以使用此设备。

  2. 通过运行以下命令将 YAML 文件应用到您的集群:

    $ oc apply -f <file_name>.yaml
验证

此过程仅用于测试看门狗功能,不得在生产机器上运行。

  1. 运行以下命令以验证 VM 是否已连接到看门狗设备:

    $ lspci | grep watchdog -i
  2. 运行以下命令之一以确认看门狗处于活动状态:

    • 触发内核恐慌

      # echo c > /proc/sysrq-trigger
    • 停止看门狗服务

      # pkill -9 watchdog

在客户机上安装看门狗代理

您可以在客户机上安装看门狗代理并启动watchdog服务。

步骤
  1. 以 root 用户身份登录到虚拟机。

  2. 安装watchdog包及其依赖项:

    # yum install watchdog
  3. 取消注释/etc/watchdog.conf文件中的以下行并保存更改:

    #watchdog-device = /dev/watchdog
  4. 启用watchdog服务以便在启动时启动:

    # systemctl enable --now watchdog.service

定义访客代理 ping 探测

通过设置虚拟机 (VM) 配置的spec.readinessProbe.guestAgentPing字段来定义访客代理 ping 探测。

访客代理 ping 探测仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

先决条件
  • 必须在虚拟机上安装并启用 QEMU 访客代理。

步骤
  1. 在 VM 配置文件中包含访客代理 ping 探测的详细信息。例如:

    访客代理 ping 探测示例
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      annotations:
      name: fedora-vm
      namespace: example-namespace
    # ...
    spec:
      template:
        spec:
          readinessProbe:
            guestAgentPing: {} (1)
            initialDelaySeconds: 120 (2)
            periodSeconds: 20 (3)
            timeoutSeconds: 10 (4)
            failureThreshold: 3 (5)
            successThreshold: 3 (6)
    # ...
    1 连接到 VM 的访客代理 ping 探测。
    2 可选:VM 启动后启动访客代理探测之前的时间(以秒为单位)。
    3 可选:执行探测之间的延迟(以秒为单位)。默认延迟为 10 秒。此值必须大于timeoutSeconds
    4 可选:探测超时且 VM 被认为已失败之前的空闲时间(以秒为单位)。默认值为 1。此值必须小于periodSeconds
    5 可选:允许探测失败的次数。默认为 3。达到指定尝试次数后,pod 将标记为Unready
    6 可选:探测失败后必须报告成功的次数才能被认为成功。默认为 1。
  2. 运行以下命令创建 VM:

    $ oc create -f <file_name>.yaml