etcd运行在Kubernetes时重新配置

etcd 是一个一致且高度可用的键值存储,用作 Kubernetes 所有集群数据的后备存储。

一、etcd 增量运行时重新配置支持

etcd 支持增量运行时重新配置,允许用户在运行时更新集群的成员资格。

仅当大多数集群成员正常运行时,才能处理重新配置请求。强烈建议在生产中始终具有大于 2 的群集大小。从两个成员集群中删除成员是不安全的。

1.重新配置用例

重新配置群集的一些常见原因。这些原因中的大多数仅涉及添加或删除成员的组合,这在下面的(集群重新配置操作)中进行了说明。

集群重新配置操作参考:https://etcd.io/docs/v3.5/op-guide/runtime-configuration/#cluster-reconfiguration-operations

1.1 etcd集群之间沟通通信

要使用安全对等通信配置etcd,请指定标志和并使用HTTPS 作为 网址架构。--peer-key-file=peer.key--peer-cert-file=peer.cert
下面是在k8s集群容器中以pod形式运行etcd集群,etcd集群使用安全对等通信配置示例如下:

image

要使用安全的客户端通信配置 etcd,请指定标志和并使用 HTTPS 作为 网址架构。
下面是使用安全的客户端命令的示例通信:--key-file=k8sclient.key--cert-file=k8sclient.cert

image

1.2 循环或升级多台计算机

如果由于计划维护(硬件升级、网络停机等)需要迁移多个集群成员,建议一次只修改一个成员。
移除领导人是安全的,但是在选举过程中会有一段短暂的停机时间。如果集群拥有超过50MB的v2数据,建议(迁移成员的数据目录)。

迁移成员的数据目录参考:https://etcd.io/docs/v2.3/admin_guide/#member-migration

1.2.1 成员迁移

方式一:当有计划的机器维护时,将etcd成员硬件配置维护升级时,而不丢失数据并不更改成员ID。
    停止成员进程。
    将当前空闲成员的数据目录备份。

etcd集群以pod形式在k8s集群容器中运行如下:
模拟停止成员进程方式
image
image
停止后成员查看
image

备份停止成员的数据目录
image
etcd集群成员数据目录如下:
image
image
备份成员的数据目录只需备份备份宿主机上的目录即可
宿主机磁盘分区如下:
image
要更换现在/dev/vdc硬盘为ssd硬盘
/dev/vdc硬盘的挂载点是/var/lib/docker
systemctl stop kubelet && systemctl stop docker
备份挂载点/var/lib/docker目录数据
卸载挂载点:umount -t ext3 /var/lib/docker
image
删除/etc/fstab挂载点信息
解除硬盘挂载,挂载新的硬盘如下:
image
image
将备份的/var/lib/docker目录数据解压到/var/lib/下
重启系统
查看docker、kubelet服务
image
查看etcd集群成员信息
image

方式二:更换失败的etcd成员
Etcd集群通过容忍次要成员故障来实现高可用性。但是,要改善集群的整体运行状况,请立即替换故障成员。当多个成员失效时,逐个替换它们。替换失败的成员包括两个步骤:删除失败的成员和添加新成员。
虽然etcd在内部保持唯一的成员id,但建议为每个成员使用唯一的名称,以避免人为错误。
查看etcd集群列表及状态
ETCDCTL_API=3 etcdctl --write-out="table" --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member list
ETCDCTL_API=3 etcdctl --write-out="table" --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --endpoints https://192.168.101.8:2379 endpoint status --cluster
目前etcd集群192.168.101.9:2379成员异常,需进行更换掉,如下图


etcd集群以pod形式在k8s集群容器中运行,更换一台新服务器加入k8s集群

加一台新控制master节点到k8s集群中,之前kubeadm-certs Secret和解密密钥keys 会在两个小时后失效。

需要重新生成如下:
调用时,主控制平面的证书被加密并上传到secret.——upload-cert
如果需要重新上传证书并生成新的解密密钥,需要在集群节点控制平面执行如下命令:
kubeadm init phase upload-certs --upload-certs
I0602 16:59:16.796938   26696 version.go:254] remote version is much newer: v1.27.2; falling back to: stable-1.21
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
e1b81228ff109abdaeadd6b5e137e5eaf7559ed73bc00a442270ecd516eebd18

--discovery-token-ca-cert-hash
例如,使用OpenSSL命令行和kubeadm token create——print-join-command生成
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
kubeadm token create --print-join-command
![image](https://img2023.cnblogs.com/blog/1262848/202306/1262848-20230602173905344-1264826809.png)

使用上面生成的certificate key值和CA密钥sha256值组成加入集群
kubeadm join llj.k8s.lb:6443 --token kepeic.kpdf0md6wnycnak6 --discovery-token-ca-cert-hash sha256:30ebd93acbe9bd5a17453b3b657e1306e516c8d7ac7939404a19fd2054b6dae6 --control-plane --certificate-key e1b81228ff109abdaeadd6b5e137e5eaf7559ed73bc00a442270ecd516eebd18 		

出现报错如下:
image
需要删除失败etcd成员

查看etcd成员
ETCDCTL_API=3 etcdctl --write-out="table" --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member list
通过id删除etcd成员
ETCDCTL_API=3 etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member remove a76b515c35a5cd36 
删除成员后查看
ETCDCTL_API=3 etcdctl --write-out="table" --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member list

image
加入成功后查看
image

方式二:
当有计划的报废时,将etcd成员迁移到另一台机器,而不丢失数据并更改成员ID。
	停止成员进程。
	将当前空闲成员的数据目录复制到新计算机。
	根据运行时重新配置指令,更新被替换成员的对等url以反映新机器。
	在新机器上启动etcd,使用相同的配置和数据目录的副本。
posted @ 2023-06-02 17:50  梁博客  阅读(339)  评论(0)    收藏  举报