×

本主题描述了如何在 OpenShift Container Platform 集群上为 Pod 和服务配置 IP 故障转移。

IP 故障转移使用 Keepalived 在一组主机上托管一组外部可访问的虚拟 IP (VIP) 地址。每个 VIP 地址一次仅由单个主机提供服务。Keepalived 使用虚拟路由器冗余协议 (VRRP) 来确定主机集中哪个主机提供哪个 VIP 的服务。如果主机不可用,或者 Keepalived 正在监视的服务没有响应,则 VIP 将切换到集合中的另一个主机。这意味着只要主机可用,VIP 就会始终得到服务。

集合中的每个 VIP 都由从集合中选择的节点提供服务。如果只有一个节点可用,则提供 VIP 服务。无法在节点上明确分配 VIP,因此可能存在没有 VIP 的节点和具有许多 VIP 的节点。如果只有一个节点,则所有 VIP 都位于该节点上。

管理员必须确保所有 VIP 地址都满足以下要求:

  • 从集群外部在配置的主机上可访问。

  • 集群内不用于任何其他用途。

每个节点上的 Keepalived 都会确定所需的服务是否正在运行。如果是,则支持 VIP,并且 Keepalived 将参与协商以确定哪个节点提供 VIP 服务。为了让节点参与,服务必须在 VIP 上的监视端口上侦听,或者必须禁用检查。

集合中的每个 VIP 都可能由不同的节点提供服务。

IP 故障转移监控每个 VIP 上的一个端口,以确定该端口在节点上是否可达。如果端口不可达,则该 VIP 不会分配给该节点。如果端口设置为0,则此检查将被抑制。检查脚本执行必要的测试。

当运行 Keepalived 的节点通过检查脚本后,该节点上的 VIP 可以根据其优先级、当前主节点的优先级以及抢占策略来进入master状态。

集群管理员可以通过OPENSHIFT_HA_NOTIFY_SCRIPT变量提供一个脚本,每当节点上 VIP 的状态发生变化时,都会调用此脚本。Keepalived 在服务 VIP 时使用master状态,在其他节点服务 VIP 时使用backup状态,在检查脚本失败时使用fault状态。状态发生变化时,将使用新状态调用通知脚本。

您可以在 OpenShift Container Platform 上创建 IP 故障转移部署配置。IP 故障转移部署配置指定一组 VIP 地址以及在其上提供服务的节点集。集群可以有多个 IP 故障转移部署配置,每个配置管理自己的一组唯一 VIP 地址。IP 故障转移配置中的每个节点都运行一个 IP 故障转移 Pod,并且此 Pod 运行 Keepalived。

当使用 VIP 访问具有主机网络的 Pod 时,应用程序 Pod 运行在所有运行 IP 故障转移 Pod 的节点上。这使得任何 IP 故障转移节点都可以根据需要成为主节点并服务 VIP。如果应用程序 Pod 没有在所有具有 IP 故障转移的节点上运行,则某些 IP 故障转移节点永远不会服务 VIP,或者某些应用程序 Pod 永远不会接收任何流量。使用相同的选择器和副本数量,针对 IP 故障转移和应用程序 Pod,以避免这种不匹配。

当使用 VIP 访问服务时,任何节点都可以位于 IP 故障转移节点集中,因为无论应用程序 Pod 在哪里运行,服务在所有节点上都是可达的。任何 IP 故障转移节点都可以随时成为主节点。服务可以使用外部 IP 和服务端口,也可以使用NodePort。设置NodePort是一个特权操作。

在服务定义中使用外部 IP 时,VIP 将设置为外部 IP,IP 故障转移监控端口将设置为服务端口。使用节点端口时,该端口在集群中的每个节点上都打开,并且服务将来自当前服务 VIP 的任何节点的流量进行负载均衡。在这种情况下,IP 故障转移监控端口将设置为服务定义中的NodePort

即使服务 VIP 具有高可用性,性能仍然可能受到影响。Keepalived 确保配置中的某个节点服务每个 VIP,即使其他节点没有任何 VIP,多个 VIP 也可能最终位于同一节点上。当 IP 故障转移将多个 VIP 放置在同一节点上时,跨一组 VIP 进行外部负载均衡的策略可能会受到影响。

当使用ExternalIP时,您可以将 IP 故障转移设置为与ExternalIP范围相同的 VIP 范围。您也可以禁用监控端口。在这种情况下,所有 VIP 都出现在集群中的同一节点上。任何用户都可以使用ExternalIP设置服务并使其具有高可用性。

集群中最多有 254 个 VIP。

IP 故障转移环境变量

下表包含用于配置 IP 故障转移的变量。

表 1. IP 故障转移环境变量
变量名称 默认值 描述

OPENSHIFT_HA_MONITOR_PORT

80

IP 故障转移 Pod 尝试在每个虚拟 IP (VIP) 上打开与该端口的 TCP 连接。如果建立连接,则认为服务正在运行。如果将此端口设置为0,则测试始终通过。

OPENSHIFT_HA_NETWORK_INTERFACE

IP 故障转移用于发送虚拟路由器冗余协议 (VRRP) 流量的接口名称。默认值为eth0

OPENSHIFT_HA_REPLICA_COUNT

2

要创建的副本数量。这必须与 IP 故障转移部署配置中的spec.replicas值匹配。

OPENSHIFT_HA_VIRTUAL_IPS

要复制的 IP 地址范围列表。必须提供此列表。例如,1.2.3.4-6,1.2.3.9

OPENSHIFT_HA_VRRP_ID_OFFSET

0

用于设置虚拟路由器 ID 的偏移值。使用不同的偏移值允许在同一集群中存在多个 IP 故障转移配置。默认偏移量为0,允许的范围为0255

OPENSHIFT_HA_VIP_GROUPS

为 VRRP 创建的组数。如果未设置,则为使用OPENSHIFT_HA_VIP_GROUPS变量指定的每个虚拟 IP 范围创建一个组。

OPENSHIFT_HA_IPTABLES_CHAIN

INPUT

iptables 链的名称,用于自动添加iptables规则以允许 VRRP 流量。如果未设置值,则不会添加iptables规则。如果链不存在,则不会创建它。

OPENSHIFT_HA_CHECK_SCRIPT

Pod 文件系统中定期运行以验证应用程序是否正在运行的脚本的完整路径名。

OPENSHIFT_HA_CHECK_INTERVAL

2

运行检查脚本的周期(以秒为单位)。

OPENSHIFT_HA_NOTIFY_SCRIPT

每当状态发生变化时运行的脚本在 Pod 文件系统中的完整路径名。

OPENSHIFT_HA_PREEMPTION

preempt_nodelay 300

处理新的更高优先级主机的策略。nopreempt策略不会将主节点从较低优先级主机移动到较高优先级主机。

在集群中配置 IP 故障转移

作为集群管理员,您可以根据标签选择器定义的整个集群或节点子集上配置 IP 故障转移。您还可以配置集群中的多个 IP 故障转移部署,每个部署彼此独立。

IP 故障转移部署确保在与约束或使用的标签匹配的每个节点上运行故障转移 Pod。

此 Pod 运行 Keepalived,Keepalived 可以监控端点并使用虚拟路由器冗余协议 (VRRP) 将虚拟 IP (VIP) 从一个节点故障转移到另一个节点,如果第一个节点无法访问服务或端点。

对于生产用途,请设置一个至少选择两个节点的selector,并将replicas设置为所选节点的数量。

先决条件
步骤
  1. 创建 IP 故障转移服务帐户

    $ oc create sa ipfailover
  2. 更新hostNetwork的安全上下文约束 (SCC)

    $ oc adm policy add-scc-to-user privileged -z ipfailover
    $ oc adm policy add-scc-to-user hostnetwork -z ipfailover
  3. 仅限 Red Hat OpenStack Platform (RHOSP):完成以下步骤以使故障转移 VIP 地址在 RHOSP 端口上可达。

    1. 使用 RHOSP CLI 在 RHOSP 集群的allowed_address_pairs参数中显示默认 RHOSP API 和 VIP 地址。

      $ openstack port show <cluster_name> -c allowed_address_pairs
      输出示例
      *Field*                  *Value*
      allowed_address_pairs    ip_address='192.168.0.5', mac_address='fa:16:3e:31:f9:cb'
                               ip_address='192.168.0.7', mac_address='fa:16:3e:31:f9:cb'
    2. 为 IP 故障转移部署设置不同的 VIP 地址,并通过在 RHOSP CLI 中输入以下命令使其在 RHOSP 端口上可达。不要将任何默认 RHOSP API 和 VIP 地址设置为 IP 故障转移部署的故障转移 VIP 地址。

      1.1.1.1故障转移 IP 地址作为允许的地址添加到 RHOSP 端口的示例。
      $ openstack port set <cluster_name> --allowed-address ip-address=1.1.1.1,mac-address=fa:fa:16:3e:31:f9:cb
    3. 创建一个部署 YAML 文件来为您的部署配置 IP 故障转移。请参阅后面步骤中的“IP 故障转移配置的示例部署 YAML”。

    4. 在 IP 故障转移部署中指定以下规范,以便您将故障转移 VIP 地址传递到OPENSHIFT_HA_VIRTUAL_IPS环境变量。

      1.1.1.1 VIP 地址添加到OPENSHIFT_HA_VIRTUAL_IPS的示例。
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ipfailover-keepalived
      # ...
            spec:
                env:
                - name: OPENSHIFT_HA_VIRTUAL_IPS
                value: "1.1.1.1"
      # ...
  4. 创建一个部署 YAML 文件来配置 IP 故障转移。

    对于 Red Hat OpenStack Platform (RHOSP),您无需重新创建部署 YAML 文件。您已在之前的说明中创建了此文件。

    IP 故障转移配置示例部署 YAML
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ipfailover-keepalived (1)
      labels:
        ipfailover: hello-openshift
    spec:
      strategy:
        type: Recreate
      replicas: 2
      selector:
        matchLabels:
          ipfailover: hello-openshift
      template:
        metadata:
          labels:
            ipfailover: hello-openshift
        spec:
          serviceAccountName: ipfailover
          privileged: true
          hostNetwork: true
          nodeSelector:
            node-role.kubernetes.io/worker: ""
          containers:
          - name: openshift-ipfailover
            image: registry.redhat.io/openshift4/ose-keepalived-ipfailover-rhel9:v4.17
            ports:
            - containerPort: 63000
              hostPort: 63000
            imagePullPolicy: IfNotPresent
            securityContext:
              privileged: true
            volumeMounts:
            - name: lib-modules
              mountPath: /lib/modules
              readOnly: true
            - name: host-slash
              mountPath: /host
              readOnly: true
              mountPropagation: HostToContainer
            - name: etc-sysconfig
              mountPath: /etc/sysconfig
              readOnly: true
            - name: config-volume
              mountPath: /etc/keepalive
            env:
            - name: OPENSHIFT_HA_CONFIG_NAME
              value: "ipfailover"
            - name: OPENSHIFT_HA_VIRTUAL_IPS (2)
              value: "1.1.1.1-2"
            - name: OPENSHIFT_HA_VIP_GROUPS (3)
              value: "10"
            - name: OPENSHIFT_HA_NETWORK_INTERFACE (4)
              value: "ens3" #The host interface to assign the VIPs
            - name: OPENSHIFT_HA_MONITOR_PORT (5)
              value: "30060"
            - name: OPENSHIFT_HA_VRRP_ID_OFFSET (6)
              value: "0"
            - name: OPENSHIFT_HA_REPLICA_COUNT (7)
              value: "2" #Must match the number of replicas in the deployment
            - name: OPENSHIFT_HA_USE_UNICAST
              value: "false"
            #- name: OPENSHIFT_HA_UNICAST_PEERS
              #value: "10.0.148.40,10.0.160.234,10.0.199.110"
            - name: OPENSHIFT_HA_IPTABLES_CHAIN (8)
              value: "INPUT"
            #- name: OPENSHIFT_HA_NOTIFY_SCRIPT (9)
            #  value: /etc/keepalive/mynotifyscript.sh
            - name: OPENSHIFT_HA_CHECK_SCRIPT (10)
              value: "/etc/keepalive/mycheckscript.sh"
            - name: OPENSHIFT_HA_PREEMPTION (11)
              value: "preempt_delay 300"
            - name: OPENSHIFT_HA_CHECK_INTERVAL (12)
              value: "2"
            livenessProbe:
              initialDelaySeconds: 10
              exec:
                command:
                - pgrep
                - keepalived
          volumes:
          - name: lib-modules
            hostPath:
              path: /lib/modules
          - name: host-slash
            hostPath:
              path: /
          - name: etc-sysconfig
            hostPath:
              path: /etc/sysconfig
          # config-volume contains the check script
          # created with `oc create configmap keepalived-checkscript --from-file=mycheckscript.sh`
          - configMap:
              defaultMode: 0755
              name: keepalived-checkscript
            name: config-volume
          imagePullSecrets:
            - name: openshift-pull-secret (13)
    1 IP 故障转移部署的名称。
    2 要复制的 IP 地址范围列表。必须提供此列表。例如,1.2.3.4-6,1.2.3.9
    3 为 VRRP 创建的组数。如果未设置,则为使用OPENSHIFT_HA_VIP_GROUPS变量指定的每个虚拟 IP 范围创建一个组。
    4 IP 故障转移用于发送 VRRP 通信的接口名称。默认情况下,使用eth0
    5 IP 故障转移 Pod 会尝试在此端口上对每个 VIP 建立 TCP 连接。如果建立连接,则认为服务正在运行。如果此端口设置为0,则测试始终通过。默认值为80
    6 用于设置虚拟路由器 ID 的偏移值。使用不同的偏移值允许在同一集群中存在多个 IP 故障转移配置。默认偏移量为0,允许的范围为0255
    7 要创建的副本数量。这必须与 IP 故障转移部署配置中的spec.replicas值匹配。默认值为2
    8 要自动添加iptables规则以允许 VRRP 通信的iptables链的名称。如果未设置此值,则不会添加iptables规则。如果链不存在,则不会创建它,并且 Keepalived 将以单播模式运行。默认为INPUT
    9 每当状态发生变化时运行的脚本在 Pod 文件系统中的完整路径名。
    10 Pod 文件系统中定期运行以验证应用程序是否正在运行的脚本的完整路径名。
    11 处理新的更高优先级主机的策略。默认值为preempt_delay 300,如果较低优先级的 master 正在持有 VIP,则会导致 Keepalived 实例在 5 分钟后接管 VIP。
    12 检查脚本运行的周期(秒)。默认值为2
    13 在创建部署之前创建拉取密钥,否则在创建部署时将出现错误。

配置检查和通知脚本

Keepalived 通过定期运行可选的用户提供的检查脚本来监控应用程序的运行状况。例如,脚本可以通过发出请求并验证响应来测试 Web 服务器。作为集群管理员,您可以提供一个可选的通知脚本,该脚本在状态更改时调用。

检查和通知脚本在 IP 故障转移 Pod 中运行,并使用 Pod 文件系统,而不是主机文件系统。但是,IP 故障转移 Pod 在/hosts挂载路径下提供主机文件系统。配置检查或通知脚本时,必须提供脚本的完整路径。提供脚本的推荐方法是使用ConfigMap对象。

检查和通知脚本的完整路径名将添加到 Keepalived 配置文件_/etc/keepalived/keepalived.conf中,该文件在 Keepalived 每次启动时都会加载。可以使用ConfigMap对象按照以下方法将脚本添加到 Pod 中。

检查脚本

未提供检查脚本时,将运行一个简单的默认脚本,该脚本测试 TCP 连接。当监控端口为0时,此默认测试将被抑制。

每个 IP 故障转移 Pod 管理一个 Keepalived 守护程序,该守护程序管理运行 Pod 的节点上一个或多个虚拟 IP (VIP) 地址。Keepalived 守护程序保持该节点上每个 VIP 的状态。特定节点上的特定 VIP 可能处于masterbackupfault状态。

如果检查脚本返回非零值,则节点将进入backup状态,并重新分配其持有的任何 VIP。

通知脚本

Keepalived 将以下三个参数传递给通知脚本

  • $1 - groupinstance

  • $2 - groupinstance的名称

  • $3 - 新状态:masterbackupfault

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已使用具有cluster-admin权限的用户登录到集群。

步骤
  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。已安装ConfigMap对象的默认模式文件必须能够使用oc命令或通过编辑部署配置来运行。值为0755,十进制为493,是典型的。

    $ oc set env deploy/ipfailover-keepalived \
        OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
    $ oc set volume deploy/ipfailover-keepalived --add --overwrite \
        --name=config-volume \
        --mount-path=/etc/keepalive \
        --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'

    oc set env命令对空格敏感。=号两侧都不能有空格。

    您也可以编辑ipfailover-keepalived部署配置

    $ oc edit deploy ipfailover-keepalived
        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字段以提及 config map。
    4 这设置了文件的运行权限。读取时,它以十进制493显示。

    保存更改并退出编辑器。这将重新启动ipfailover-keepalived

配置 VRRP 预占

当节点上的虚拟 IP (VIP) 通过检查脚本通过后离开fault状态时,如果其优先级低于当前处于master状态的节点上的 VIP,则该节点上的 VIP 将进入backup状态。nopreempt策略不会将master从主机上较低优先级的 VIP 移动到主机上较高优先级的 VIP。使用默认值preempt_delay 300,Keepalived 将等待指定的 300 秒,然后将master移动到主机上较高优先级的 VIP。

步骤
  • 要指定预占,请输入oc edit deploy ipfailover-keepalived以编辑路由器部署配置

    $ oc edit deploy ipfailover-keepalived
    ...
        spec:
          containers:
          - env:
            - name: OPENSHIFT_HA_PREEMPTION  (1)
              value: preempt_delay 300
    ...
    1 设置OPENSHIFT_HA_PREEMPTION
    • preempt_delay 300:Keepalived 将等待指定的 300 秒,然后将master移动到主机上较高优先级的 VIP。这是默认值。

    • nopreempt:不会将master从主机上较低优先级的 VIP 移动到主机上较高优先级的 VIP。

部署多个 IP 故障转移实例

IP 故障转移部署配置管理的每个 IP 故障转移 Pod(每个节点或副本 1 个 Pod)都运行一个 Keepalived 守护程序。随着配置更多 IP 故障转移部署配置,将创建更多 Pod,并且更多守护程序将加入到公共虚拟路由冗余协议 (VRRP) 协商中。此协商由所有 Keepalived 守护程序完成,它确定哪些节点为哪些虚拟 IP (VIP) 提供服务。

在内部,Keepalived 为每个 VIP 分配一个唯一的vrrp-id。当做出决定时,协商将使用这组vrrp-id,对应于获胜vrrp-id的 VIP 将在获胜节点上提供服务。

因此,对于在 IP 故障转移部署配置中定义的每个 VIP,IP 故障转移 Pod 必须分配相应的vrrp-id。这是从OPENSHIFT_HA_VRRP_ID_OFFSET开始,依次将vrrp-id分配给 VIP 列表来实现的。vrrp-id的值范围为1..255

当有多个 IP 故障转移部署配置时,必须指定OPENSHIFT_HA_VRRP_ID_OFFSET,以便有空间增加部署配置中的 VIP 数量,并且没有任何vrrp-id范围重叠。

配置超过 254 个地址的 IP 故障转移

IP 故障转移管理最多支持 254 组虚拟 IP (VIP) 地址。默认情况下,OpenShift Container Platform 将一个 IP 地址分配给每个组。您可以使用OPENSHIFT_HA_VIP_GROUPS变量更改此设置,以便每个组中包含多个 IP 地址,并在配置 IP 故障转移时定义每个虚拟路由冗余协议 (VRRP) 实例可用的 VIP 组数。

对 VIP 进行分组可在 VRRP 故障转移事件中创建更广泛的 VIP 分配范围,并且在集群中的所有主机都可本地访问服务时非常有用。例如,当使用ExternalIP公开服务时。

作为故障转移规则,不要将服务(例如路由器)限制在一个特定主机上。相反,应将服务复制到每个主机,以便在 IP 故障转移的情况下,无需在新主机上重新创建服务。

如果您使用 OpenShift Container Platform 健康检查,则 IP 故障转移和分组的性质意味着不会检查组中的所有实例。因此,必须使用Kubernetes 健康检查来确保服务处于活动状态。

先决条件
  • 您已使用具有cluster-admin权限的用户登录到集群。

步骤
  • 要更改分配给每个组的 IP 地址数量,请更改OPENSHIFT_HA_VIP_GROUPS变量的值,例如:

    IP 故障转移配置的示例Deployment YAML
    ...
        spec:
            env:
            - name: OPENSHIFT_HA_VIP_GROUPS (1)
              value: "3"
    ...
    1 如果在具有七个 VIP 的环境中将OPENSHIFT_HA_VIP_GROUPS设置为3,则它会创建三个组,将三个 VIP 分配给第一组,将两个 VIP 分配给其余两个组。

如果由OPENSHIFT_HA_VIP_GROUPS设置的组数少于设置为进行故障转移的 IP 地址数,则该组包含多个 IP 地址,并且所有地址都作为一个单元移动。

ExternalIP 的高可用性

在非云集群中,可以将 IP 故障转移和服务的ExternalIP结合使用。其结果是为使用ExternalIP创建服务的用户提供高可用性服务。

此方法是指定集群网络配置的spec.ExternalIP.autoAssignCIDRs范围,然后在创建 IP 故障转移配置时使用相同的范围。

由于 IP 故障转移最多可以支持整个集群的 255 个 VIP,因此spec.ExternalIP.autoAssignCIDRs必须为/24或更小。

移除 IP 故障转移

最初配置 IP 故障转移时,集群中的工作节点将使用iptables规则进行修改,该规则显式允许在224.0.0.18上用于 Keepalived 的组播数据包。由于节点发生了更改,因此移除 IP 故障转移需要运行一个作业来移除iptables规则并移除 Keepalived 使用的虚拟 IP 地址。

步骤
  1. 可选:识别并删除存储为配置映射的任何检查和通知脚本

    1. 确定是否有任何 IP 故障转移 Pod 使用配置映射作为卷

      $ oc get pod -l ipfailover \
        -o jsonpath="\
      {range .items[?(@.spec.volumes[*].configMap)]}
      {'Namespace: '}{.metadata.namespace}
      {'Pod:       '}{.metadata.name}
      {'Volumes that use config maps:'}
      {range .spec.volumes[?(@.configMap)]}  {'volume:    '}{.name}
        {'configMap: '}{.configMap.name}{'\n'}{end}
      {end}"
      示例输出
      Namespace: default
      Pod:       keepalived-worker-59df45db9c-2x9mn
      Volumes that use config maps:
        volume:    config-volume
        configMap: mycustomcheck
    2. 如果上一步提供了用作卷的配置映射的名称,则删除这些配置映射

      $ oc delete configmap <configmap_name>
  2. 确定现有的 IP 故障转移部署

    $ oc get deployment -l ipfailover
    示例输出
    NAMESPACE   NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    default     ipfailover   2/2     2            2           105d
  3. 删除部署

    $ oc delete deployment <ipfailover_deployment_name>
  4. 移除ipfailover服务帐户

    $ oc delete sa ipfailover
  5. 运行一个作业,该作业将移除最初配置 IP 故障转移时添加的 IP 表规则

    1. 创建一个文件,例如remove-ipfailover-job.yaml,其内容类似于以下示例

      apiVersion: batch/v1
      kind: Job
      metadata:
        generateName: remove-ipfailover-
        labels:
          app: remove-ipfailover
      spec:
        template:
          metadata:
            name: remove-ipfailover
          spec:
            containers:
            - name: remove-ipfailover
              image: registry.redhat.io/openshift4/ose-keepalived-ipfailover-rhel9:v4.17
              command: ["/var/lib/ipfailover/keepalived/remove-failover.sh"]
            nodeSelector: (1)
              kubernetes.io/hostname: <host_name>  (2)
            restartPolicy: Never
      1 nodeSelector可能与旧 IP 故障转移部署中使用的选择器相同。
      2 为配置了 IP 故障转移的集群中的每个节点运行该作业,并每次替换主机名。
    2. 运行作业

      $ oc create -f remove-ipfailover-job.yaml
      示例输出
      job.batch/remove-ipfailover-2h8dm created
验证
  • 确认该作业已移除 IP 故障转移的初始配置。

    $ oc logs job/remove-ipfailover-2h8dm
    示例输出
    remove-failover.sh: OpenShift IP Failover service terminating.
      - Removing ip_vs module ...
      - Cleaning up ...
      - Releasing VIPs  (interface eth0) ...