如何从嵌入式 etcd 切换到外部 etcd 集群

如何从嵌入式 etcd 切换到外部 etcd 集群

是否可以将具有“嵌入式” etcd 的现有集群切换到外部 etcd?

谢谢

答案1

魔鬼藏在细节中,但大部分情况下,是的:

  1. 将新的外部 etcd 成员加入到内部 etcd 集群
  2. 更新kubeadm-configConfigMap 以向未来的控制平面成员指示 etcd 所在的位置
  3. 修补现有的控制平面 yaml
  4. 删除堆叠的 etcd 成员
  5. 祈祷

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 成员时重复此操作

相关内容