跳至内容

从单主迁移到多主

使用 etcd-manager 时,从单主 Kubernetes 集群切换到多主 Kubernetes 集群是一个完全优雅的过程。如果您仍在使用旧版 etcd,则需要先迁移到 etcd-manager。

创建实例组

创建新的子网

首先决定要将主节点部署到哪些可用区。每个可用区只能有一个主节点。

然后,您需要为您的可用区添加新的子网。需要添加哪些子网取决于您选择的拓扑结构。最简单的方法是复制您已经拥有的部分。确保您为每种类型添加了额外的子网。例如,如果您有 privateutility 子网,则需要复制这两个子网。

kops get cluster -o yaml > mycluster.yaml

更改子网部分以使其类似于以下内容

  - cidr: 172.20.32.0/19
    name: eu-west-1a
    type: Private
    zone: eu-west-1a
  - cidr: 172.20.64.0/19
    name: eu-west-1b
    type: Private
    zone: eu-west-1b
  - cidr: 172.20.96.0/19
    name: eu-west-1c
    type: Private
    zone: eu-west-1c
  - cidr: 172.20.0.0/22
    name: utility-eu-west-1a
    type: Utility
    zone: eu-west-1a
  - cidr: 172.20.4.0/22
    name: utility-eu-west-1b
    type: Utility
    zone: eu-west-1b
  - cidr: 172.20.8.0/22
    name: utility-eu-west-1c
    type: Utility
    zone: eu-west-1c

创建新的主实例组

下一步是为新的主节点创建两个新的实例组。

kops create instancegroup master-<subnet name> --subnet <subnet name> --role Master

示例

kops create ig master-us-west-1d --subnet us-west-1d --role Master

此命令将打开一个带有默认值的编辑器。确保

  • maxSizeminSize 为 1
  • 仅列出一个区域
  • 您有正确的镜像和机器类型

在集群配置中引用新主节点

再次打开 mycluster.yaml 以将 etcd 成员添加到每个新的主节点中。

$EDITOR mycluster.yaml
  • .spec.etcdClusters 中,在每个集群中添加 2 个新成员,每个新可用区一个。
    - instanceGroup: master-<availability-zone2>
      name: <availability-zone2-name>
    - instanceGroup: master-<availability-zone3>
      name: <availability-zone3-name>

示例

etcdClusters:
  - etcdMembers:
    - instanceGroup: master-eu-west-1a
      name: a
    - instanceGroup: master-eu-west-1b
      name: b
    - instanceGroup: master-eu-west-1c
      name: c
    name: main
  - etcdMembers:
    - instanceGroup: master-eu-west-1a
      name: a
    - instanceGroup: master-eu-west-1b
      name: b
    - instanceGroup: master-eu-west-1c
      name: c
    name: events

更新集群以启动新主节点

更新集群规范并通过运行以下命令应用配置

kops replace -f mycluster.yaml
kops update cluster example.com
kops update cluster example.com --yes

这将启动两个新的主节点。您还需要滚动旧的主节点,以便它可以加入新的 etcd 集群。

大约 5 分钟后,所有三个主节点都应该互相找到。运行以下命令以确保一切正常运行。

kops validate cluster --wait 10m

虽然旋转原始主节点不是严格必需的,但 kOps 会说它需要更新,因为配置已更改。

kops rolling-update cluster --yes