4.15. 配置代理健康检查
您可以使用启动、存活度和就绪度探测在 AMQ Broker 上配置健康检查。
- 启动探测(startup probe)指示容器内的应用程序是否启动。
- 存活度探测决定容器是否仍然在运行。
- 就绪度探测(Readiness probe)决定容器是否准备好接受服务请求
如果启动探测或存活度探测检查 Pod 失败,则探测会重启 Pod。
AMQ Broker 包括默认的就绪度和存活度探测。默认存活度探测通过 ping 代理的 HTTP 端口来检查代理是否在运行。默认就绪度探测通过打开到为代理配置的每个 acceptor 端口的连接来检查代理是否可以接受网络流量。
使用默认存活度和就绪度探测的一个限制是它们无法识别底层问题,例如代理的文件系统出现问题。您可以创建自定义存活度和就绪度探测,这些探测使用代理的命令行实用程序 artemis 来运行更全面的健康检查。
AMQ Broker 不包括默认启动探测。您可以在 ActiveMQArtemis 自定义资源(CR)中配置启动探测。
4.15.1. 配置启动探测 复制链接链接已复制到粘贴板!
您可以配置启动探测来检查代理容器中的 AMQ Broker 应用程序是否已启动。
流程
编辑代理部署的 CR 实例。
使用 OpenShift 命令行界面:
- 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
编辑部署的 CR。
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
使用 OpenShift Container Platform Web 控制台:
- 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
- 在左侧窗格中,单击 menu: administration Resource Definitions]。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
- 点代理部署的实例。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,允许您编辑 CR 实例。
在 CR 的
deploymentPlan部分中,添加一个startupProbe部分。例如:spec: deploymentPlan: startupProbe: exec: command: - /bin/bash - '-c' - /opt/amq/bin/artemis - 'check' - 'node' - '--up' - '--url' - 'tcp://$HOSTNAME:61616' initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 3 failureThreshold: 30命令-
要在容器中运行的启动探测命令。在示例中,启动探测使用
artemis check node命令来验证 AMQ Broker 是否已在容器中为代理 Pod 启动。 initialDelaySeconds-
探测在容器启动后运行前的延迟(以秒为单位)。默认值为
0。 periodSeconds-
探测运行的时间间隔(以秒为单位)。默认值为
10。 timeoutSeconds-
启动 probe 命令等待代理回复的时间(以秒为单位)。如果未收到对 命令的响应,则命令将终止。默认值为
1。 failureThreshold连续的最小失败(包括超时)后探测被认为是失败的启动探测。当探测被认为有失败时,它会重启 Pod。默认值为
3。根据集群的资源和代理日志大小,您可能需要增加故障阈值,以允许代理有足够的时间启动并通过探测检查。否则,代理会进入一个循环条件,在一个循环条件中重复达到失败阈值,并且代理在每次启动探测时都会重启。例如,如果您将
failureThreshold设置为30,且探测以默认间隔 10 秒运行,代理有 300 秒才能启动并传递探测检查。
- 保存 CR。
其他资源
4.15.2. 配置存活度和就绪度探测 复制链接链接已复制到粘贴板!
以下示例演示了如何为代理部署配置主自定义资源(CR)实例,以使用存活度和就绪度探测运行健康检查。
先决条件
- 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
编辑代理部署的 CR 实例。
使用 OpenShift 命令行界面:
- 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
编辑部署的 CR。
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
使用 OpenShift Container Platform Web 控制台:
- 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
- 在左侧窗格中,单击 menu: administration Resource Definitions]。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
- 点代理部署的实例。
- 点 YAML 标签。
要配置存活度探测,请在 CR 的
deploymentPlan部分中添加livenessProbe部分。例如:spec: deploymentPlan: livenessProbe: initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 30initialDelaySeconds探测在容器启动后运行前的延迟(以秒为单位)。默认值为
5。注意如果部署也配置了启动探测,您可以将存活度和就绪度探测的延迟设置为 0。这两个探测仅在启动探测通过后运行。如果启动探测已通过,它会确认代理已成功启动,因此不需要运行存活度和就绪度探测时出现延迟。
periodSeconds-
探测运行的时间间隔(以秒为单位)。默认值为
5。 failureThreshold表示探测的存活度探测的最小连续故障(包括超时)失败。当探测失败时,它会重启 Pod。默认值为 3。
如果您的部署没有配置启动探测,它会验证代理应用程序是否在存活度探测运行前启动,您可能需要提高故障阈值,以允许代理启动并传递存活度探测检查。否则,代理可以进入一个循环条件,在一个循环条件中重复达到失败阈值,并且代理 Pod 在每次存活度探测时都会重启。
代理启动和传递存活度探测检查所需的时间取决于集群的资源以及代理日志的大小。例如,如果您将
failureThreshold设置为 30,并且探测以默认间隔 5 秒运行,代理有 150 秒才能启动并传递存活度探测检查。注意如果您没有配置存活度探测,或者如果配置的探测中没有处理器,AMQ Broker Operator 会创建一个具有以下配置的默认 TCP 探测。默认 TCP 探测尝试向指定端口上代理容器打开一个套接字。
spec: deploymentPlan: livenessProbe: tcpSocket: port: 8181 initialDelaySeconds: 30 timeoutSeconds: 5
要配置就绪度探测,请在 CR 的
deploymentPlan部分中添加一个readinessProbe部分。例如:spec: deploymentPlan: readinessProbe: initialDelaySeconds: 5 periodSeconds: 5如果您没有配置就绪度探测,则内置 脚本会 检查所有接受者是否可以接受连接。
如果要配置更全面的健康检查,请将
artemis check命令行工具添加到存活度或就绪度探测配置中。如果要配置健康检查来创建与代理的完整客户端连接,请在
livenessProbe或readinessProbe部分中添加exec部分。在exec部分中,添加一个command部分。在command部分中,添加artemis check node命令语法。例如:spec: deploymentPlan: readinessProbe: exec: command: - bash - '-c' - /home/jboss/amq-broker/bin/artemis - check - node - '--silent' - '--acceptor' - <acceptor name> - '--user' - $AMQ_USER - '--password' - $AMQ_PASSWORD initialDelaySeconds: 30 timeoutSeconds: 5默认情况下,
artemis check node命令使用名为artemis的 acceptor 的 URI。如果代理具有名为artemis的接收器,您可以从命令中排除 the-acceptor <acceptor name> 选项。注意$AMQ_USER和$AMQ_PASSWORD是 AMQ Operator 配置的环境变量。如果要配置生成和使用消息的健康检查,这也会在
livenessProbe或readinessProbe部分中验证代理文件系统的健康状况,请添加exec部分。在exec部分中,添加一个command部分。在command部分中,添加artemis check queue命令语法。例如:spec: deploymentPlan: readinessProbe: exec: command: - bash - '-c' - /home/jboss/amq-broker/bin/artemis - check - queue - '--name' - livenessqueue - '--produce' - "1" - '--consume' - "1" - '--silent' - '--user' - $AMQ_USER - '--password' - $AMQ_PASSWORD initialDelaySeconds: 30 timeoutSeconds: 5注意您指定的队列名称必须在代理上配置,且
anycast为routingType。例如:apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemisAddress metadata: name: livenessqueue namespace: activemq-artemis-operator spec: addressName: livenessqueue queueConfiguration: purgeOnNoConsumers: false maxConsumers: -1 durable: true enabled: true queueName: livenessqueue routingType: anycast
- 保存 CR。
其他资源