15.6. 虚拟机健康检查
您可以通过在 VirtualMachine
资源中定义就绪度和存活度探测来配置虚拟机 (VM) 健康检查。
15.6.1. 关于就绪度和存活度探测 复制链接链接已复制到粘贴板!
使用就绪度和存活度探测来检测和处理不健康的虚拟机 (VM)。您可以在虚拟机规格中包含一个或多个探测,以确保流量无法访问未就绪的虚拟机,并在虚拟机变得无响应时创建新虚拟机。
就绪度探测决定 VMI 是否准备好接受服务请求。如果探测失败,则 VMI 会从可用端点列表中移除,直到 VMI 就绪为止。
存活度探测决定 VMI 是否响应。如果探测失败,则会删除虚拟机并创建一个新的虚拟机来恢复响应性。
您可以通过设置 VirtualMachine
对象的 spec.readinessProbe
和 spec.livenessProbe
字段来配置就绪度和存活度探测。这些字段支持以下测试:
- HTTP GET
- 该探测使用 Web hook 确定 VMI 的健康状况。如果 HTTP 响应代码介于 200 和 399 之间,则测试成功。您可以将 HTTP GET 测试用于在完全初始化时返回 HTTP 状态代码的应用程序。
- TCP 套接字
- 该探测尝试为 VMI 打开一个套接字。只有在探测可以建立连接时,VMI 才被视为健康。对于在初始化完成前不会开始监听的应用程序,可以使用 TCP 套接字测试。
- 客户机代理 ping
-
该探测使用
guest-ping
命令来确定 QEMU 客户机代理是否在虚拟机上运行。
15.6.1.1. 定义 HTTP 就绪度探测 复制链接链接已复制到粘贴板!
通过设置虚拟机配置的 spec.readinessProbe.httpGet
字段来定义 HTTP 就绪度探测。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
在虚拟机配置文件中包括就绪度探测的详细信息。
使用 HTTP GET 测试就绪度探测示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 执行的 HTTP GET 请求以连接 VM。
- 2
- 探测查询的虚拟机端口。在上例中,探测查询端口 1500。
- 3
- 在 HTTP 服务器上访问的路径。在上例中,如果服务器的 /healthz 路径的处理程序返回成功代码,则 VMI 被视为健康。如果处理程序返回失败代码,则虚拟机将从可用端点列表中移除。
- 4
- 虚拟机启动就绪度探测前的时间(以秒为单位)。
- 5
- 执行探测之间的延迟(以秒为单位)。默认延迟为 10 秒。这个值必须大于
timeoutSeconds
。 - 6
- 在不活跃的时间(以秒为单位)超过这个值时探测会超时,且假定 VM 失败。默认值为 1。这个值必须小于
periodSeconds
。 - 7
- 探测允许失败的次数。默认值为 3。在进行了指定数量的尝试后,pod 被标记为
Unready
。 - 8
- 在失败后,在探测报告成功的次数达到这个值时才能被视为成功。默认值为 1。
运行以下命令来创建虚拟机:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.6.1.2. 定义 TCP 就绪度探测 复制链接链接已复制到粘贴板!
通过设置虚拟机 (VM) 配置的 spec.readinessProbe.tcpSocket
字段来定义 TCP 就绪度探测。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
在虚拟机配置文件中包括 TCP 就绪度探测的详细信息。
使用 TCP 套接字测试的就绪度探测示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建虚拟机:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.6.1.3. 定义 HTTP 存活度探测 复制链接链接已复制到粘贴板!
通过设置虚拟机 (VM) 配置的 spec.livenessProbe.httpGet
字段来定义 HTTP 存活度探测。您可以按照与就绪度探测相同的方式为存活度探测定义 HTTP 和 TCP 测试。此流程使用 HTTP GET 测试配置示例存活度探测。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
在虚拟机配置文件中包括 HTTP 存活度探测的详细信息。
使用 HTTP GET 测试的存活度探测示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 虚拟机启动存活度探测前的时间(以秒为单位)。
- 2
- 执行探测之间的延迟(以秒为单位)。默认延迟为 10 秒。这个值必须大于
timeoutSeconds
。 - 3
- 执行的 HTTP GET 请求以连接 VM。
- 4
- 探测查询的虚拟机端口。在上例中,探测查询端口 1500。VM 通过 cloud-init 在端口 1500 上安装并运行最小 HTTP 服务器。
- 5
- 在 HTTP 服务器上访问的路径。在上例中,如果服务器的
/healthz
路径的处理程序返回成功代码,则 VMI 被视为健康。如果处理程序返回失败代码,则会删除虚拟机并创建新虚拟机。 - 6
- 在不活跃的时间(以秒为单位)超过这个值时探测会超时,且假定 VM 失败。默认值为 1。这个值必须小于
periodSeconds
。
运行以下命令来创建虚拟机:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.6.2. 定义 watchdog 复制链接链接已复制到粘贴板!
您可以通过执行以下步骤来定义 watchdog 来监控客户端操作系统的健康状态:
- 为虚拟机配置 watchdog 设备。
- 在客户机上安装 watchdog 代理。
watchdog 设备监控代理,并在客户机操作系统不响应时执行以下操作之一:
-
poweroff
:虚拟机立即关闭。如果spec.runStrategy
没有设置为manual
,则虚拟机会重启。 reset
:虚拟机重新启动,客户机操作系统无法响应。注意重启时间可能会导致存活度探测超时。如果集群级别的保护检测到失败的存活度探测,则虚拟机可能会被强制重新调度,从而增加重启时间。
-
shutdown
:通过停止所有服务来正常关闭虚拟机。
watchdog 不适用于 Windows 虚拟机。
15.6.2.1. 为虚拟机配置 watchdog 设备 复制链接链接已复制到粘贴板!
您可以为虚拟机配置 watchdog 设备。
先决条件
-
对于
x86
系统,虚拟机必须使用与i6300esb
watchdog 设备一起使用的内核。如果使用s390x
架构,则必须为diag288
启用内核。Red Hat Enterprise Linux (RHEL)镜像支持i6300esb
和diag288
。 -
已安装 OpenShift CLI(
oc
)。
流程
创建包含以下内容的
YAML
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上面的示例使用
poweroff
操作配置虚拟机上的 watchdog 设备,并将设备公开为/dev/watchdog
。现在,watchdog 二进制文件可以使用这个设备。
运行以下命令,将 YAML 文件应用到集群:
$ oc apply -f <file_name>.yaml
$ oc apply -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此流程仅用于测试 watchdog 功能,且不得在生产环境中运行。
运行以下命令来验证虚拟机是否已连接到 watchdog 设备:
lspci | grep watchdog -i
$ lspci | grep watchdog -i
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令之一以确认 watchdog 处于活跃状态:
触发内核 panic:
echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-trigger
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 停止 watchdog 服务:
pkill -9 watchdog
# pkill -9 watchdog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.6.2.2. 在客户机上安装 watchdog 代理 复制链接链接已复制到粘贴板!
您可以在客户机上安装 watchdog 代理并启动 watchdog
服务。
流程
- 以 root 用户身份登录虚拟机。
只有在 IBM Z®(
s390x
)上安装时才需要这一步。运行以下命令来启用watchdog
:modprobe diag288_wdt
# modprobe diag288_wdt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证虚拟机中是否存在
/dev/watchdog
文件路径:ls /dev/watchdog
# ls /dev/watchdog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
watchdog
软件包及其依赖项:yum install watchdog
# yum install watchdog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/watchdog.conf
文件中取消注释以下行并保存更改:#watchdog-device = /dev/watchdog
#watchdog-device = /dev/watchdog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在引导时启用
watchdog
服务:systemctl enable --now watchdog.service
# systemctl enable --now watchdog.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.6.3. 定义客户机代理 ping 探测 复制链接链接已复制到粘贴板!
通过设置虚拟机 (VM) 配置的 spec.readinessProbe.guestAgentPing
字段来定义客户机代理 ping 探测。
客户机代理 ping 探测只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 必须在虚拟机上安装并启用 QEMU 客户机代理。
-
已安装 OpenShift CLI(
oc
)。
流程
在虚拟机配置文件中包括客户机代理 ping 探测的详情。例如:
客户机代理 ping 探测示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建虚拟机:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow