使用就绪探针和存活探针来检测和处理不健康的虚拟机 (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