官方文档: Upgrade etcd from 3.4 to 3.5
在一般情况下,从 etcd 3.4 升级到 3.5 可以是一个零停机时间的滚动升级。
注意事项:
- 一个接一个地停止 etcd v3.4 进程,用 etcd v3.5 进程替换它们。
- 在运行所有 v3.5 进程后,v3.5 的新功能对集群可用。
注意:
- 如果你的集群启用了 auth,不支持从 3.4 或更早的版本滚动升级,因为 3.5 改变了与 auth 有关的 WAL 条目的格式(注意,关闭现有的集群并一次性升级所有的成员是可以的)。参考说明: changes a format of WAL entries related to auth
- 要将现有的 etcd 部署升级到 3.5,运行的集群必须是 3.4 或更高版本。如果是在 3.4 之前,请在升级到 3.5 之前升级到3.4。
- 另外,为了确保顺利的滚动升级,运行中的集群必须是健康的。在继续进行之前,通过使用etcdctl端点健康命令检查集群的健康状况。
- 在升级 etcd 之前,一定要先停止环境中依赖 etcd 的服务(kube-apiserver)。
备份 Etcd 集群
参考文章: ETCD 备份与还原
升级 ETCD
下载兼容的新版本 ETCD 安装包,这里使用 Etcd 3.5.5 版本
1
wget https://github.com/etcd-io/etcd/releases/download/v3.5.5/etcd-v3.5.5-linux-amd64.tar.gz
停止所有与 etcd 集群通信的
kube-apiserver
服务1
systemctl stop kube-apiserver
停止集群所有的 etcd 服务
1
systemctl stop etcd
升级 etcd 集群,替换 etcd 二进制文件
1
2
3
4
5
6
7# 解压 etcd 压缩包
tar xf etcd-v3.5.5-linux-amd64.tar.gz
# 拷贝 etcd,etcdctl 二进制文件到 etcd 安装目录
scp etcd-v3.5.5-linux-amd64/{etcd,etcdctl} root@k8s-sit-master01:/usr/local/etcd/bin/
scp etcd-v3.5.5-linux-amd64/{etcd,etcdctl} root@k8s-sit-master02:/usr/local/etcd/bin/
scp etcd-v3.5.5-linux-amd64/{etcd,etcdctl} root@k8s-sit-master03:/usr/local/etcd/bin/所有节点启动 etcd 服务
1
systemctl start etcd
查看 etcd 集群状态
1
2
3
4
5
6
7
8export ETCDCTL_API=3
/usr/local/etcd/bin/etcdctl \
--cacert=/usr/local/etcd/ssl/etcd-ca.pem \
--cert=/usr/local/etcd/ssl/etcd.pem \
--key=/usr/local/etcd/ssl/etcd-key.pem \
--endpoints="https://10.1.40.61:2379,\
https://10.1.40.62:2379,\
https://10.1.40.63:2379" endpoint status --write-out=table输出如下信息
1
2
3
4
5
6
7+-------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://10.1.40.61:2379 | 93ed298870a73c23 | 3.5.5 | 8.4 MB | false | false | 8 | 13672 | 13672 | |
| https://10.1.40.62:2379 | 45e2bed5ef11abc6 | 3.5.5 | 8.4 MB | false | false | 8 | 13672 | 13672 | |
| https://10.1.40.63:2379 | 4a20c27570f92f1b | 3.5.5 | 8.4 MB | true | false | 8 | 13672 | 13672 | |
+-------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+启动 kube-apiserver 服务
1
systemctl start kube-apiserver
查看集群状态
1
2
3
4
5
6
7
8# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true","reason":""}
etcd-2 Healthy {"health":"true","reason":""}
etcd-1 Healthy {"health":"true","reason":""}