跳至内容

高可用性 (HA)

介绍

出于测试目的,kubernetes 仅使用单个主节点就可以正常工作。但是,当主节点不可用时(例如由于升级或实例故障),kubernetes API 将不可用。集群中运行的 Pod 和服务将继续运行,只要它们不依赖于与 API 的交互,但添加节点、缩放 Pod、替换已终止的 Pod 等操作将无法正常工作。运行 kubectl 也将无法正常工作。

kOps 在专用自动扩展组 (ASG) 中运行每个主节点,并将数据存储在 EBS 卷上。这样,如果主节点被终止,ASG 将启动一个新的主节点实例,其中包含主节点的卷。由于使用了专用的 EBS 卷,因此每个主节点都绑定到固定的可用区 (AZ)。如果 AZ 不可用,该 AZ 中的主节点实例也将不可用。

因此,对于生产环境使用,您需要在具有多个主节点的 HA 设置中运行 kubernetes。使用多个主节点,您既可以执行平滑(零停机)升级,也可以在 AZ 故障时生存。

很少有区域提供少于 3 个 AZ。在这种情况下,在同一个 AZ 中运行多个主节点是一种选择。如果包含多个主节点的 AZ 不可用,那么使用此配置仍然会存在停机时间。但是,对主节点的常规更改(例如升级)将是平滑的,并且不会出现停机时间。

如果您已经有一个单节点主节点集群,并且想要将其转换为多节点主节点集群,请阅读单节点到多节点主节点文档。

请注意,跨越多个 AZ 运行集群比跨越一个或两个 AZ 运行集群的成本更高。这不仅是因为主节点 EC2 成本,还因为您需要为跨 AZ 流量付费。因此,根据您的工作负载,您可能还需要考虑仅在两个 AZ 中运行工作节点。只要您的应用程序不依赖于仲裁,您仍然可以实现 AZ 容错。

创建 HA 集群

示例 1:公共拓扑

开始使用 HA 集群的最简单方法是运行 kops create cluster,如下所示。--master-zones 标志列出了您希望主节点运行的区域。默认情况下,kOps 将为每个 AZ 创建一个主节点。由于 kubernetes etcd 集群在主节点上运行,因此您必须指定奇数个区域才能获得仲裁。

kops create cluster \
    --node-count 3 \
    --zones us-west-2a,us-west-2b,us-west-2c \
    --master-zones us-west-2a,us-west-2b,us-west-2c \
    hacluster.example.com

示例 2:私有拓扑

使用私有网络拓扑创建集群

kops create cluster \
    --node-count 3 \
    --zones us-west-2a,us-west-2b,us-west-2c \
    --master-zones us-west-2a,us-west-2b,us-west-2c \
    --topology private \
    --networking <provider> \
    ${NAME}

请注意,默认网络提供程序 (kubenet) 不支持私有拓扑。

示例 3:同一 AZ 中的多个主节点

如果需要(例如在区域少于 3 个 AZ 的情况下),您可以在同一个 AZ 中启动多个主节点。

kops create cluster \
    --node-count 3 \
    --master-count 3 \
    --zones cn-north-1a,cn-north-1b \
    --master-zones cn-north-1a,cn-north-1b \
    hacluster.k8s.local