Menu Close

Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第 29 章 高可用性

29.1. 概述

本节介绍在 OpenShift Container Platform 集群中为 pod 和服务设置高可用性。

IP 故障转移(IP failover)在一组节点上管理一个虚拟 IP(VIP)地址池。集合中的每个 VIP 将由从该集合中选择的节点提供服务。只要有单一节点可用,就可以提供 VIP。无法将 VIP 显式分发到节点上。因此,可能有没有 VIP 的节点,以及具有多个 VIP 的其他节点。如果只有一个节点,则所有 VIP 都会位于其中。

注意

VIP 必须可以从集群外部路由。

IP 故障转移会监控每个 VIP 上的端口,以确定该端口能否在节点上访问。如果端口无法访问,则不会将 VIP 分配给该节点。如果端口设为 0,则会禁止此检查。 检查 脚本 执行所需的测试。

IP 故障切换使用 Keepalived 在一组主机上托管一组外部可访问的 VIP 地址。在一个时间点上,每个 VIP 仅由一个主机提供服务。 keepalived 使用 VRRP 协议来确定将服务于 VIP 的主机(来自主机组)。如果主机不可用,或者 Keepalived 监控的服务没有响应,VIP 会切换到集合中的另一台主机。因此,只要主机可用,VIP 就会始终提供服务。

当运行 Keepalived 的主机通过 检查 脚本时,主机会根据其优先级和当前 MASTER 的优先级变为 MASTER 状态,具体由 抢占策略 决定。

管理员可以通过 --notify-script= 选项提供脚本,该选项会在状态发生变化时调用。当为 VIP 服务时,keepalived 处于 MASTER 状态,当另一个节点服务 VIP 时,处于 BACKUP 状态;当 检查 脚本失败时,keepalived 的状态为 FAULT。当状态发生变化时,会调用 notify 脚本 的新状态。

OpenShift Container Platform 支持通过运行 oc adm ipfailover 命令创建 IP 故障切换部署配置。IP 故障转移部署配置指定 VIP 地址的集合,以及服务它们的一组节点。一个集群可以具有多个 IP 故障转移部署配置,各自管理自己的一组唯一的 VIP 地址。IP 故障切换配置中的每个节点运行 IP 故障切换 pod,此 pod 运行 Keepalived

当使用 VIP 访问具有主机网络(如路由器)的 pod 时,应用程序 pod 应在运行 ipfailover pod 的所有节点上运行。这可让任何 ipfailover 节点成为 master 节点,并在需要时服务 VIP。如果应用程序 pod 没有在所有带有 ipfailover 的节点上运行,则一些 ipfailover 节点永远不会为 VIP 服务,或者某些应用程序 pod 永远不会接收任何流量。对 ipfailover 和应用容器集使用相同的选择器和复制数,以避免出现这种不匹配的情况。

在使用 VIP 访问服务时,任何节点都可以位于 ipfailover 节点集中,因为该服务可在所有节点上访问(无论应用程序 pod 在哪里运行)。任何 ipfailover 节点都可以随时成为 master。服务可以使用外部 IP 和服务端口,也可以使用 nodePort。

在服务定义中使用外部 IP 时,VIP 设置为外部 IP,ipfailover 监控端口被设置为服务端口。在群集的每个节点上都打开了 nodePort,该服务将对当前支持 VIP 的任何节点的流量进行负载平衡。在本例中,ipfailover 监控端口在服务定义中被设置为 nodePort。

重要

设置 nodePort 是一个特权操作。

重要

尽管服务 VIP 高度可用,但性能仍会受到影响。keepalived 确保每个 VIP 都由配置中某个节点提供服务,即使其他节点没有服务,多个 VIP 也会在同一节点上结束。当 ipfailover 将多个 VIP 放置在同一节点上时,可能会在一组 VIP 间实现外部负载平衡。

使用 ingressIP 时,您可以将 ipfailover 设置为具有与 ingressIP 范围相同的 VIP 范围。您还可以禁用监控端口。在这种情况下,所有 VIP 都会出现在集群中的同一节点上。任何用户都可以使用 ingressIP 设置服务,并使其高度可用。

重要

集群中最多有 255 个 VIP。