Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

9.3. 将现有的 master 替换为 etcd colocated

在将机器迁移到不同的数据中心以及分配给它的网络和 IP 将改变时,请按照以下步骤操作。

  1. 备份主 etcdmaster 节点。

    重要

    确保您备份 /etc/etcd/ 目录,如 etcd 备份 说明中所述。

  2. 在需要替换 master 时,置备任意数量的新机器。
  3. 添加或扩展集群。例如,如果要添加 3 个带有 etcd 在一起的 master,扩展 3 个 master 节点。
重要

在 OpenShift Container Platform 版本 3.11 的初始发行版本中,scaleup.yml playbook 不会扩展 etcd。这个问题已在 OpenShift Container Platform 3.11.59 及更高版本中解决。

  1. 添加 master。在这一流程的第 3 步,在 [new_masters][new_nodes] 中添加新数据中心的主机,运行 openshift_node_group.yml playbook,并运行 master scaleup.yml playbook。
  2. 将相同的主机放在 etcd 部分中,运行 openshift_node_group.yml playbook,并运行 etcd scaleup.yml playbook。
  3. 验证主机是否已添加:

    # oc get nodes
  4. 验证 master 主机 IP 是否已添加:

    # oc get ep kubernetes
  5. 验证已添加了 etcd。ETCDCTL_API 的值取决于所使用的版本:

    # source /etc/etcd/etcd.conf
    # ETCDCTL_API=2 etcdctl --cert-file=$ETCD_PEER_CERT_FILE --key-file=$ETCD_PEER_KEY_FILE \
      --ca-file=/etc/etcd/ca.crt --endpoints=$ETCD_LISTEN_CLIENT_URLS member list
  6. /etc/origin/master/ca.serial.txt/etc/origin/master 目录复制到清单文件中最先列出的新 master 主机。默认情况下,这是 /etc/ansible/hosts

    1. 删除 etcd 主机。
  7. /etc/etcd/ca 目录复制到清单文件中第一个列出的新 etcd 主机中。默认情况下,这是 /etc/ansible/hosts
  8. master-config.yaml 文件中删除旧的 etcd 客户端:

    # grep etcdClientInfo -A 11 /etc/origin/master/master-config.yaml
  9. 重启 master:

    # master-restart api
    # master-restart controllers
  10. 从集群中删除旧的 etcd 成员。ETCDCTL_API 的值取决于所使用的版本:

    # source /etc/etcd/etcd.conf
    # ETCDCTL_API=2 etcdctl --cert-file=$ETCD_PEER_CERT_FILE --key-file=$ETCD_PEER_KEY_FILE \
      --ca-file=/etc/etcd/ca.crt --endpoints=$ETCD_LISTEN_CLIENT_URLS member list
  11. 获取以上命令的输出中的 ID,并使用 ID 删除旧的成员:

    # etcdctl --cert-file=$ETCD_PEER_CERT_FILE --key-file=$ETCD_PEER_KEY_FILE \
      --ca-file=/etc/etcd/ca.crt --endpoints=$ETCD_LISTEN_CLIENT_URL member remove 1609b5a3a078c227
  12. 通过删除 etcd pod 定义来停止旧 etcd 主机上的 etcd 服务:

    # mkdir -p /etc/origin/node/pods-stopped
    # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
    1. 通过将定义文件从静态 pod dir /etc/origin/node/pods 中移出,关闭旧的 master API 和控制器服务:

      # mkdir -p /etc/origin/node/pods/disabled
      # mv /etc/origin/node/pods/controller.yaml /etc/origin/node/pods/disabled/:
    2. 从 HA 代理配置中删除 master 节点,该配置在原生安装过程中默认作为负载均衡器安装。
    3. 弃用机器。
  13. 通过删除 pod 定义并重启主机来停止 master 上的节点服务:

    # mkdir -p /etc/origin/node/pods-stopped
    # mv /etc/origin/node/pods/* /etc/origin/node/pods-stopped/
    # reboot
  14. 删除节点资源:

    # oc delete node