Menu Close

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> 选项 提供。脚本必须使用 0 ( PASS )或 1 ( FAIL )退出。

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

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

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

管理员可以提供可选 的通知 脚本,每当状态发生变化时调用该脚本。keepalived 将以下三个参数传递给脚本:

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

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

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

  1. 创建所需的脚本并创建 ConfigMap 来存放它。脚本没有输入参数,对于确定必须返回 0,对于 FAIL 必须返回 1

    检查脚本,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