Andrew Striletskyi Asked: 2020-07-29 01:28:18 +0800 CST2020-07-29 01:28:18 +0800 CST 2020-07-29 01:28:18 +0800 CST 如何从嵌入式 etcd 切换到外部 etcd 集群 772 是否可以将具有“嵌入式” etcd 的现有集群切换到外部 etcd? 谢谢 kubernetes 1 个回答 Voted Best Answer mdaniel 2020-07-29T08:07:04+08:002020-07-29T08:07:04+08:00 魔鬼在细节中,但在大多数情况下,是的: 将新的外部 etcd 成员加入内部 etcd 集群 更新kubeadm-configConfigMap 以向未来的控制平面成员指示 etcd 所在的位置 修补现有的控制平面 yaml 移除堆叠的 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 成员时重复此操作
魔鬼在细节中,但在大多数情况下,是的:
kubeadm-config
ConfigMap 以向未来的控制平面成员指示 etcd 所在的位置等
确保你对这个文档有所了解,并且已经在一个示例集群上进行了实践,因为如果事情变得糟糕,解开一个愤怒的 etcd 集群是很痛苦的。尽早并经常制作 etcd 快照
kubeadm 配置
ClusterConfiguration
etcd:
并用类似的东西替换密钥现有的控制平面 pod
这只是上述 yaml 的具体化,但在配置之后,控制平面节点不会观察它
kubeadm-config
的变化。如果您有一个自动缩放系统,您实际上可能更乐意只旋转所有控制平面节点,但如果您有“宠物”控制平面节点,那么:并确保新的 apiserver pod 正常启动
etcd 成员拆解
这一步在很大程度上取决于您当前堆叠成员的运行方式,无论是通过 systemd、静态 Pod、操作员……等等,但如果现有流程不这样做,您肯定需要删除他们的成员资格作为阻止他们的一部分
并在您关闭每个嵌入式 etcd 成员时重复此操作