Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

4.3. 扩展 etcd

您可以通过在 etcd 主机中添加更多资源或通过添加更多 etcd 主机来纵向扩展 etcd 集群。

注意

由于 etcd 使用的投票系统,集群必须始终包含奇数个成员数。

拥有奇数 etcd 主机的集群可考虑容错。etcd 主机数量为奇数不会改变仲裁所需的数量,但会增加故障的容错能力。例如,对于包含三个成员的群集,仲裁为 2,保留一个失败容错能力。这可确保集群在两个成员健康时继续运行。

建议具有三个 etcd 主机的生产环境级别的集群。

新主机需要一个全新的 Red Hat Enterprise Linux 7 专用主机。etcd 存储应位于 SSD 磁盘上,以实现最佳性能和在 /var/lib/etcd 中挂载的专用磁盘上。

先决条件

  1. 在添加新的 etcd 主机前,备份 etcd 配置和数据以防止数据丢失。
  2. 检查当前的 etcd 集群状态,以避免添加新主机到不健康的集群。运行这个命令:

    # ETCDCTL_API=3 etcdctl --cert="/etc/etcd/peer.crt" \
              --key=/etc/etcd/peer.key \
              --cacert="/etc/etcd/ca.crt" \
              --endpoints="https://*master-0.example.com*:2379,\
                https://*master-1.example.com*:2379,\
                https://*master-2.example.com*:2379"
                endpoint health
    https://master-0.example.com:2379 is healthy: successfully committed proposal: took = 5.011358ms
    https://master-1.example.com:2379 is healthy: successfully committed proposal: took = 1.305173ms
    https://master-2.example.com:2379 is healthy: successfully committed proposal: took = 1.388772ms
  3. 在运行 scaleup playbook 前,请确保新主机已注册到正确的红帽软件频道:

    # subscription-manager register \
        --username=*<username>* --password=*<password>*
    # subscription-manager attach --pool=*<poolid>*
    # subscription-manager repos --disable="*"
    # subscription-manager repos \
        --enable=rhel-7-server-rpms \
        --enable=rhel-7-server-extras-rpms

    etcd 托管在 rhel-7-server-extras-rpms 软件频道中。

  4. 确保从 etcd 集群中删除所有未使用的 etcd 成员。这必须在运行 scaleup playbook 之前完成。

    1. 列出 etcd 成员:

      # etcdctl --cert="/etc/etcd/peer.crt" --key="/etc/etcd/peer.key" \
        --cacert="/etc/etcd/ca.crt" --endpoints=ETCD_LISTEN_CLIENT_URLS member list -w table

      复制未使用的 etcd 成员 ID(如果适用)。

    2. 通过使用以下命令指定其 ID 来删除未使用的成员:

      # etcdctl --cert="/etc/etcd/peer.crt" --key="/etc/etcd/peer.key" \
        --cacert="/etc/etcd/ca.crt" --endpoints=ETCD_LISTEN_CLIENT_URL member remove UNUSED_ETCD_MEMBER_ID
  5. 在当前 etcd 节点上升级 etcd 和 iptables:

    # yum update etcd iptables-services
  6. 为 etcd 主机备份 /etc/etcd 配置。
  7. 如果新的 etcd 成员也是 OpenShift Container Platform 节点,将所需的主机数量添加到集群中
  8. 此流程的其余部分假定您添加了一台主机,但是如果您添加多个主机,请在每个主机上执行所有步骤。

4.3.1. 使用 Ansible 添加新 etcd 主机

流程
  1. 在 Ansible 清单文件中,创建一个名为 [new_etcd] 的新组,再添加新主机。然后,将 new_etcd 组添加为 [OSEv3] 组的子组:

    [OSEv3:children]
    masters
    nodes
    etcd
    new_etcd 1
    
    ... [OUTPUT ABBREVIATED] ...
    
    [etcd]
    master-0.example.com
    master-1.example.com
    master-2.example.com
    
    [new_etcd] 2
    etcd0.example.com 3
    1 2 3
    添加以下行:
    注意

    将旧的 etcd 主机条目 替换为清单文件中的新 etcd 主机条目。在替换旧的 etcd 主机 时,必须创建一个 /etc/etcd/ca/ 目录的副本。另外,您可以在扩展 etcd 主机前重新部署 etcd ca 和 certs。

  2. 在安装 OpenShift Container Platform 并托管 Ansible 清单文件的主机中,切换到 playbook 目录并运行 etcd scaleup playbook:

    $ cd /usr/share/ansible/openshift-ansible
    $ ansible-playbook  playbooks/openshift-etcd/scaleup.yml
  3. 在 playbook 运行后,通过将新 etcd 主机从 [new_etcd] 组移到 [etcd] 组来修改清单文件,使其反映当前的状态:

    [OSEv3:children]
    masters
    nodes
    etcd
    new_etcd
    
    ... [OUTPUT ABBREVIATED] ...
    
    [etcd]
    master-0.example.com
    master-1.example.com
    master-2.example.com
    etcd0.example.com
  4. 如果使用 Flannel,修改位于 /etc/sysconfig/flanneld 主机上的 flanneld 服务配置,使其包含新的 etcd 主机:

    FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
  5. 重启 flanneld 服务:

    # systemctl restart flanneld.service