Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第 4 章 替换 master 主机

您可以替换失败的 master 主机。

首先,从集群中删除失败的 master 主机,然后添加替换的 master 主机。如果失败的 master 主机运行 etcd,请通过在新的 master 主机上添加 etcd 来扩展 etcd。

重要

您必须完成本主题的所有部分。

4.1. 弃用 master 主机

Master 主机运行重要的服务,如 OpenShift Container Platform API 和控制器服务。为了弃用 master 主机,必须停止这些服务。

OpenShift Container Platform API 服务是一个主动/主动服务,因此只要请求发送到单独的 master 服务器,停止该服务不会影响环境。但是,OpenShift Container Platform 控制器服务是一个主动/被动服务,服务使用 etcd 来决定活跃的 master。

在多主控机架构中弃用 master 主机包括从负载均衡器池中移除 master,以避免尝试使用该 master 的新连接。这个过程很大程度上依赖于使用的负载均衡器。以下步骤显示从 haproxy 中删除 master 的详细信息。如果 OpenShift Container Platform 在云供应商上运行或使用 F5 设备,请查看特定的产品文档来从轮转中删除 master。

流程

  1. 删除 /etc/haproxy/haproxy.cfg 配置文件中的 backend 部分。例如,如果使用 haproxy 弃用名为 master-0.example.com 的 master,请确保从以下内容中删除主机名:

    backend mgmt8443
        balance source
        mode tcp
        # MASTERS 8443
        server master-1.example.com 192.168.55.12:8443 check
        server master-2.example.com 192.168.55.13:8443 check
  2. 然后,重新启动 haproxy 服务。

    $ sudo systemctl restart haproxy
  3. 从负载均衡器中删除 master 后,通过将定义文件移出静态 pod dir /etc/origin/node/pods 来禁用 API 和控制器服务:

    # mkdir -p /etc/origin/node/pods/disabled
    # mv /etc/origin/node/pods/controller.yaml /etc/origin/node/pods/disabled/:
    +
  4. 由于 master 主机是一个可调度的 OpenShift Container Platform 节点,因此请按照 弃用节点主机 部分中的步骤进行操作。
  5. /etc/ansible/hosts Ansible 清单文件中的 [masters][nodes] 组移除 master 主机,以避免在使用该清单文件运行任何 Ansible 任务时出现问题。

    警告

    弃用 Ansible 清单中列出的第一个 master 主机需要额外的举措。

    /etc/origin/master/ca.serial.txt 文件仅对 Ansible 主机清单中列出的第一个 master 生成。如果您弃用了第一个 master 主机,请在进程前将 /etc/origin/master/ca.serial.txt 文件复制到其余 master 主机中。

    重要

    在运行多个 master 的 OpenShift Container Platform 3.11 集群中,其中一个 master 节点会包括额外的 CA 证书(/etc/origin/master, /etc/etcd/ca, 和 /etc/etcd/generated_certs)。这些是应用程序节点和 etcd 节点扩展操作所必需的,如果 CA 主机 master 已被弃用,则必须在另一个 master 节点上恢复。

  6. kubernetes 服务将 master 主机 IP 作为端点包含在内。要验证 master 已被正确弃用,请查看 kubernetes 服务输出并查看已弃用的 master 是否已被删除:

    $ oc describe svc kubernetes -n default
    Name:			kubernetes
    Namespace:		default
    Labels:			component=apiserver
    			provider=kubernetes
    Annotations:		<none>
    Selector:		<none>
    Type:			ClusterIP
    IP:			10.111.0.1
    Port:			https	443/TCP
    Endpoints:		192.168.55.12:8443,192.168.55.13:8443
    Port:			dns	53/UDP
    Endpoints:		192.168.55.12:8053,192.168.55.13:8053
    Port:			dns-tcp	53/TCP
    Endpoints:		192.168.55.12:8053,192.168.55.13:8053
    Session Affinity:	ClientIP
    Events:			<none>

    主机成功弃用后,可以安全地删除之前运行主控机的主机。