kubernetes集群管理系列讲座(四)伸缩etcd节点

2020-06-21  本文已影响0人  炼狱腾蛇Eric

课程目标

1. 环境

IP HOST
10.0.11.36 infra0
10.0.12.21 infra1
10.0.13.126 infra2
10.0.12.157 infra3
10.0.13.118 infra4

且infra0,infra1,infra2是创建好的etcd集群,方法请看这里

2. 向etcd集群中添加节点

官方文档中不建议我们向生产系统中添加节点,因为添加etcd节点会损失集群的性能,增加节点并不会增加集群的性能或者是容量。一般来说不建议对etcd集群扩/缩容。更不要配置任何的etcd集群自动扩展策略。我们建议在生产系统中部署五个member的etcd集群。过程参考github

当然,如果有特殊需求,我们也可以部署7个节点,比如两地三中心的架构,三个DC中分别部署2/2/3个etcd集群。

2.1. 添加一个正常工作的etcd节点

一般来说,添加节点有两个步骤:

注意1:如果原来的etcd使用的是ssl证书在签署的时候,指定了hosts的地址的证书是不能够使用的,比如:

cfssl certinfo -csr server.csr
.
.
  "IPAddresses": [
    "127.0.0.1",
    "10.0.11.36",
    "10.0.12.21",
    "10.0.13.126"
  ]
}

这样的证书在添加了新的member之后是无法正常通信的,需要重新签署证书,把新的节点加入到证书中。

注意2:由于签署的证书只用于数据传输,不用于数据加密,所以即使更换CA,重新签署证书,也是没有问题的。但是,如果我们首次启动etcd集群的时候使用的是非加密方式,后面改成SSL方式启动etcd集群的时候就会报错

注意3:json文件无法使用hosts: [""]这种方式来通配所有地址(理论上可以行,实际操作上报错)

注意4:json文件中可以使用域名来通配一类host,理论上可行,但是没有测试

2.1.1. 环境准备

请参考环境准备下载和解压

2.1.2. 添加节点

2.1.3. 添加一个learner etcd节点

从etcd3.4版本之后,etcd知识把节点添加为learner节点(不会参与投票的节点)。这样做是为了让添加新节点更加的安全,较少添加节点过程中集群的宕机时间,我们建议在节点在完全同步数据之前作为learner节点。所以我们增加节点的步骤变成了下面几个

2.1.4. 添加learner etcd节点具体操作如下

2.2. 如果添加节点出现问题

我们这里举例是同步出现问题,比如:

$ etcd --name infra3 \
  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \
  --initial-cluster-state existing
etcdserver: assign ids error: the member count is unequal
exit 1

我们需要清空数据文件,再更换一下节点的信息(节点名称和IP)

$ etcd --name infra4 \
  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380,infra4=http://10.0.1.14:2380 \
  --initial-cluster-state existing
etcdserver: assign ids error: unmatched member while checking PeerURLs
exit 1

2.3. 如果添加learner节点出现问题

$ etcdctl member add infra4 --peer-urls=http://10.0.1.14:2380 --learner
Error: etcdserver: too many learner members in cluster
$ etcdctl member promote 9bf1b35fc7761a23
Error: etcdserver: can only promote a learner member which is in sync with leader
$ etcdctl member promote 9bf1b35fc7761a23
Error: etcdserver: can only promote a learner member
$ etcdctl member promote 12345abcde
Error: etcdserver: member not found

3. 移除节点

为了方便大家学习,请大家加我的微信,我会把大家加到微信群(微信群的二维码会经常变)和qq群821119334,问题答案云原生技术课堂,有问题可以一起讨论

2020 CKA考试视频 真题讲解 https://www.bilibili.com/video/BV167411K7hp

2020 CKA考试指南 https://www.bilibili.com/video/BV1sa4y1479B/

2020年 5月CKA考试真题 https://mp.weixin.qq.com/s/W9V4cpYeBhodol6AYtbxIA

上一篇 下一篇

猜你喜欢

热点阅读