是否可以将具有“嵌入式” etcd 的现有集群切换到外部 etcd?
谢谢
答案1
魔鬼藏在细节中,但大部分情况下,是的:
- 将新的外部 etcd 成员加入到内部 etcd 集群
- 更新
kubeadm-config
ConfigMap 以向未来的控制平面成员指示 etcd 所在的位置 - 修补现有的控制平面 yaml
- 删除堆叠的 etcd 成员
- 祈祷
etcd
确定你了解这个文件,并在示例集群上进行了练习,因为如果出现问题,解开一个有问题的 etcd 集群会很痛苦。尽早并经常制作 etcd 快照
kubeadm-配置
kubectl -n kube-system edit configmap kubeadm-config
并将ClusterConfiguration
etcd:
密钥替换为类似的东西
etcd:
external:
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client.crt
endpoints:
- https://your-new-etcd-url:2379
keyFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client.key
现有的控制平面 pod
这只是上面描述的 yaml 的具体化,但在配置之后,控制平面节点不会监视其中的kubeadm-config
变化。如果您有一个自动缩放系统,您可能实际上更乐意轮换所有控制平面节点,但如果您有“宠物”控制平面节点,那么:
containers:
- command:
- kube-apiserver
# ...
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/etcd/apiserver-etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/pki/etcd/apiserver-etcd-client.key
- --etcd-servers=https://your-new-etcd-url:2379
并确保新的 apiserver pod 正常运行
etcd 成员拆除
此步骤取决于好的折扣关于当前堆叠成员的运行方式,无论是通过 systemd、静态 pod、操作员……无论如何,但如果现有流程没有这样做,你肯定需要删除他们的成员资格,以阻止他们
export ETCDCTL_API=3
etcdctl member list
# find the memberid of the one to remove
bye_bye_member_id=cafebabedeadbeef
etcdctl member remove $bye_bye_member_id
并在关闭每个嵌入式 etcd 成员时重复此操作