使用就绪探针和存活性探针检测和处理不健康的虚拟机 (VM)。您可以在 VM 的规范中包含一个或多个探针,以确保流量不会到达尚未准备好接收流量的 VM,并在 VM 停止响应时创建新的 VM。
就绪探针确定 VM 是否已准备好接受服务请求。如果探针失败,则 VM 将从可用端点列表中移除,直到 VM 准备好为止。
存活性探针确定 VM 是否正在响应。如果探针失败,则 VM 将被删除,并创建一个新的 VM 来恢复响应能力。
您可以通过设置VirtualMachine
对象的spec.readinessProbe
和spec.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 就绪探针。
步骤
-
在 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。 |
-
运行以下命令创建 VM:
$ oc create -f <file_name>.yaml
定义 TCP 就绪探针
通过设置虚拟机 (VM) 配置的spec.readinessProbe.tcpSocket
字段来定义 TCP 就绪探针。
步骤
-
在 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 。 |
-
运行以下命令创建 VM:
$ oc create -f <file_name>.yaml
定义 HTTP 存活性探针
通过设置虚拟机 (VM) 配置的spec.livenessProbe.httpGet
字段来定义 HTTP 存活性探针。您可以像就绪探针一样定义 HTTP 和 TCP 测试的存活性探针。此过程配置带有 HTTP GET 测试的存活性探针示例。
步骤
-
在 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 。 |
-
运行以下命令创建 VM:
$ oc create -f <file_name>.yaml