从单主迁移到多主 ¶
使用 etcd-manager 时,从单主 Kubernetes 集群切换到多主 Kubernetes 集群是一个完全优雅的过程。如果您仍在使用旧版 etcd,则需要先迁移到 etcd-manager。
创建实例组 ¶
创建新的子网 ¶
首先决定要将主节点部署到哪些可用区。每个可用区只能有一个主节点。
然后,您需要为您的可用区添加新的子网。需要添加哪些子网取决于您选择的拓扑结构。最简单的方法是复制您已经拥有的部分。确保您为每种类型添加了额外的子网。例如,如果您有 private
和 utility
子网,则需要复制这两个子网。
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
此命令将打开一个带有默认值的编辑器。确保
maxSize
和minSize
为 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