Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

29.2.2. 检查和通知脚本

Keepalived 通过定期运行可选用户提供的检查脚本来监控应用程序的健康状况。例如,该脚本可以通过发出请求并验证响应来测试 Web 服务器。

该脚本通过 oc adm ipfailover 命令的 --check-script=<script> 选项提供。对于 PASS1,该脚本必须以 0 退出

默认情况下,检查每两秒完成一次,但可以使用 --check-interval=<seconds> 选项进行更改。

不提供检查脚本时,将运行一个简单的默认脚本来测试 TCP 连接。当监控端口为 0 时,禁止此默认测试。

对于每个虚拟 IP(VIP),keepalived 保留节点的状态。节点上的 VIP 可能处于 MASTERBACKUPFAULT 状态。所有不在 FAULT 状态的节点上的 VIP 均参与协商来决定是否哪个是 VIP 的 MASTER。所有丢失者都进入 BACKUP 状态。当 MASTER 上的 检查 脚本失败时,VIP 会进入 FAULT 状态,并触发重新协商。当 BACKUP 失败时,VIP 会进入 FAULT 状态。当 check 脚本再次在 FAULT 状态的 VIP 上再次传递时,它会退出 FAULT 并协商 MASTER。生成的状态为 MASTERBACKUP

管理员可以提供可选的 notify 脚本,该脚本会在状态更改时调用。keepalived 将以下三个参数传递给脚本:

  • $1 - "GROUP"|"INSTANCE"
  • $2 - 组或实例的名称
  • $3 - 新状态("MASTER"|"BACKUP"|"FAULT")

这些脚本在 IP 故障转移 pod 中运行,并使用 pod 的文件系统,而不是主机文件系统。选项需要脚本的完整路径。管理员必须使容器集中的 脚本从运行 notify 脚本提取结果。提供脚本的建议方法是使用 ConfigMap

检查 和通知 脚本的完整路径名称添加到 keepalived 配置文件 /etc/keepalived/keepalived.conf 中,该文件会在 keepalived 启动时加载。脚本可以通过 ConfigMap 添加到 pod,如下所示。

  1. 创建所需脚本,并创建 ConfigMap 来容纳它。脚本没有输入参数,并且必须返回 0( OK )和 1( 表示 FAIL )。

    检查脚本,mycheckscript.sh

    #!/bin/bash
        # Whatever tests are needed
        # E.g., send request and verify response
    exit 0
  2. 创建 ConfigMap:

    $ oc create configmap mycustomcheck --from-file=mycheckscript.sh
  3. 可以通过两种方式将脚本添加到 pod:使用 oc 命令或编辑部署配置。在这两种情况下,所挂载的 configMap 文件的 defaultMode 必须允许执行。值通常为 0755493 十进制)。

    1. 使用 oc 命令:

      $ oc env dc/ipf-ha-router \
          OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
      $ oc set volume dc/ipf-ha-router --add --overwrite \
          --name=config-volume \
          --mount-path=/etc/keepalive \
          --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
    2. 编辑 ipf-ha-router 部署配置:

      1. 使用 oc edit dc ipf-ha-router 使用文本编辑器编辑路由器部署配置。

        ...
            spec:
              containers:
              - env:
                - name: OPENSHIFT_HA_CHECK_SCRIPT  1
                  value: /etc/keepalive/mycheckscript.sh
        ...
                volumeMounts: 2
                - mountPath: /etc/keepalive
                  name: config-volume
              dnsPolicy: ClusterFirst
        ...
              volumes: 3
              - configMap:
                  defaultMode: 0755 4
                  name: customrouter
                name: config-volume
        ...
        1
        spec.container.env 字段中,添加 OPENSHIFT_HA_CHECK_SCRIPT 环境变量以指向挂载的脚本文件。
        2
        添加 spec.container.volumeMounts 字段以创建挂载点。
        3
        添加新的 spec.volumes 字段以提及 ConfigMap。
        4
        这将设置文件的执行权限。当重新读取后,它将以十进制(493)显示。
      2. 保存更改并退出编辑器。这会重启 ipf-ha-router