Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第 6 章 安装 OpenShift Container Platform

要安装 OpenShift Container Platform 集群,您需要运行一系列 Ansible playbook。

重要

红帽不支持使用 --tags--check 选项运行 Ansible playbook。

注意

要将 OpenShift Container Platform 作为独立 registry 安装,请参阅安装独立 registry

6.1. 先决条件

安装 OpenShift Container Platform 前,准备集群主机:

  • 查看 系统和环境要求
  • 如果您的集群规模较大,请查看《 缩放和性能指南以优化安装时间。
  • 准备主机。此过程包括为每个组件类型验证系统和环境要求,安装和配置 docker 服务,以及安装 Ansible 版本 2.6 或更高版本。您必须安装 Ansible 以运行安装 playbook。
  • 配置清单文件以定义您的环境和 OpenShift Container Platform 集群配置。您的初始安装和将来的集群升级都基于此清单文件。
  • 如果要在 Red Hat Enterprise Linux 上安装 OpenShift Container Platform,请决定是使用 RPM 还是系统容器安装方法。RHEL Atomic Host 系统需要使用系统容器。

6.1.1. 运行基于 RPM 的安装程序

基于 RPM 的安装程序使用 RPM 软件包安装的 Ansible 运行本地主机上可用的 playbook 和配置文件。

重要

不要在 nohup 下运行 OpenShift Ansible playbook。将 nohup 与 playbook 结合使用会导致创建文件描述符但不会关闭。因此,系统会消耗掉所有打开的文件,playbook 会失败。

要运行基于 RPM 的安装程序:

  1. 进入 playbook 目录并运行 prerequisites.yml playbook。这个 playbook 会安装所需的软件包(若有),并修改容器运行时。除非需要配置容器运行时,在首次部署集群前仅运行一次此 playbook:

    $ cd /usr/share/ansible/openshift-ansible
    $ ansible-playbook [-i /path/to/inventory] \ 1
      playbooks/prerequisites.yml
    1
    如果您的清单文件不在 /etc/ansible/hosts 目录中,使用 -i 指定清单文件的路径。
  2. 切换到 playbook 目录,运行 deploy_cluster.yml playbook 来启动集群安装:

    $ cd /usr/share/ansible/openshift-ansible
    $ ansible-playbook [-i /path/to/inventory] \ 1
        playbooks/deploy_cluster.yml
    1
    如果您的清单文件不在 /etc/ansible/hosts 目录中,使用 -i 指定清单文件的路径。

. 如果安装成功,验证安装 如果安装失败,重试安装

6.1.2. 运行容器化安装程序

openshift3/ose-ansible 镜像是 OpenShift Container Platform 安装程序的容器化版本。这个安装程序镜像提供和基于 RPM 的安装程序相同的功能,但它可在容器化环境中运行,该环境中提供所有依赖项,而不是直接安装到主机上。使用它的唯一要求是能够运行容器。

6.1.2.1. 将安装程序作为系统容器运行

安装程序镜像可用作 系统容器。系统容器在传统 docker 服务外存储并运行。这可启用从其中一个目标主机运行安装程序镜像,而无需考虑在主机中重启 docker

要使用 Atomic CLI 作为运行一次系统容器运行安装程序,以 root 用户身份执行以下步骤:

  1. 运行 prerequisites.yml playbook:

    # atomic install --system \
        --storage=ostree \
        --set INVENTORY_FILE=/path/to/inventory \ 1
        --set PLAYBOOK_FILE=/usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml \
        --set OPTS="-v" \
        registry.redhat.io/openshift3/ose-ansible:v3.11
    1
    指定清单文件本地主机上的位置。

    此命令使用指定的清单文件和 root 用户的 SSH 配置来运行一组需要完成的任务。

  2. 运行 deploy_cluster.yml playbook:

    # atomic install --system \
        --storage=ostree \
        --set INVENTORY_FILE=/path/to/inventory \ 1
        --set PLAYBOOK_FILE=/usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml \
        --set OPTS="-v" \
        registry.redhat.io/openshift3/ose-ansible:v3.11
    1
    指定清单文件本地主机上的位置。

    此命令使用指定的清单文件和 root 用户的 SSH 配置启动集群安装。它记录终端的输出,并将数据保存到 /var/log/ansible.log 文件。第一次运行这个命令时,镜像会导入到 OSTree 存储中(系统容器使用这个而不是 docker 守护进程存储)。在后续运行时,它将重复使用存储的镜像。

    如果出于某种原因安装失败,在重新运行安装程序前查看 已知问题 以查看任何具体步骤或临时解决方案。

6.1.2.2. 运行其他 playbook

您可以使用 PLAYBOOK_FILE 环境变量指定您要使用容器化安装程序运行的其他 playbook。PLAYBOOK_FILE 的默认值为 /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml,它是主要的集群安装 playbook,当您可以把它设置为容器内的另一个 playbook 的路径。

例如,要在安装前运行 预安装检查 playbook,请使用以下命令:

# atomic install --system \
    --storage=ostree \
    --set INVENTORY_FILE=/path/to/inventory \
    --set PLAYBOOK_FILE=/usr/share/ansible/openshift-ansible/playbooks/openshift-checks/pre-install.yml \ 1
    --set OPTS="-v" \ 2
    registry.redhat.io/openshift3/ose-ansible:v3.11
1
PLAYBOOK_FILE 设置为从 playbooks/ 目录开始的 playbook 的完整路径。playbook 位于与基于 RPM 的安装程序相同的位置。
2
OPTS 设置为在 ansible-playbook 中添加命令行的选项。

6.1.2.3. 将安装程序作为容器运行

安装程序镜像也可以作为一个 docker 容器在 docker 可以运行的任何地方运行。

警告

这个方法不能在被配置的一个主机上运行的安装程序使用,因为安装程序可能会在主机上重启 docker,并破坏安装过程。

注意

虽然此方法和上述系统容器方法使用相同的镜像,但它们在不同入口点和上下文中运行,因此运行时参数会不同。

至少,当作为 docker 容器运行安装程序时,您必须提供:

  • SSH 密钥,以便 Ansible 可以访问您的主机。
  • Ansible 清单文件。
  • 针对该清单运行的 Ansible playbook 的位置。

以下是如何使用 docker 运行安装的示例,必须由具有 docker 访问权限的非root 用户运行:

  1. 首先,运行 prerequisites.yml playbook:

    $ docker run -t -u `id -u` \ 1
        -v $HOME/.ssh/id_rsa:/opt/app-root/src/.ssh/id_rsa:Z \ 2
        -v $HOME/ansible/hosts:/tmp/inventory:Z \ 3
        -e INVENTORY_FILE=/tmp/inventory \ 4
        -e PLAYBOOK_FILE=playbooks/prerequisites.yml \ 5
        -e OPTS="-v" \ 6
        registry.redhat.io/openshift3/ose-ansible:v3.11
    1
    -U 'id -u' 使容器与当前用户使用相同的 UID 运行,这样用户就可以使用容器中的 SSH 密钥。只有所有者才有 SSH 私钥的读取权限。
    2
    -v $HOME/.ssh/id_rsa:/opt/app-root/src/.ssh/id_rsa:Z 挂载您的 SSH 密钥 $HOME/.ssh/id_rsa,它位于容器用户的 $HOME/.ssh 目录下。/opt/app-root/src 是容器中用户的 $HOME。如果您将 SSH 密钥挂载到不同位置,使用 -e ANSIBLE_PRIVATE_KEY_FILE=/the/mount/point 或设置 ansible_ssh_private_key_file=/the/mount/point 作为清单中的变量来将 Ansible 指向它。请注意,SSH 密钥使用 :Z 标志挂载。这个标志是必需的,以便容器可以读取其受限 SELinux 上下文下的 SSH 密钥。这也意味着您的原始 SSH 密钥文件将重新标记为类似 system_u:object_r:container_file_t:s0:c113,c247。有关 :Z 的详情,请查看 docker-run(1) 手册页。请记住,在提供这些卷挂载规格时,这可能会造成意外后果。例如,如果您挂载(因此重新标记)整个 $HOME/.ssh 目录,它将阻断主机的 sshd 访问要登录的公钥。因此,您可以考虑使用 SSH 密钥或目录的副本,这样就不会影响原始文件标签。
    3 4
    -v $HOME/ansible/hosts:/tmp/inventory:Z-e INVENTORY_FILE=/tmp/inventory 将静态 Ansible 清单文件挂载到容器中,作为 /tmp/inventory,并将对应的环境变量设置为指向它。与使用 SSH 密钥一样,可能需要使用 :Z 标志来根据现有标签在容器中读取来重新标记清单文件 SELinux 标签。对于用户 $HOME 目录中的文件,这很可能是必需的。您可能希望在挂载清单前将清单复制到专用位置。您可以指定 INVENTORY_URL 环境变量来从 web 服务器下载清单文件,或通过使用 DYNAMIC_SCRIPT_URL 参数指定一个可以提供动态清单的可执行脚步来动态生成清单文件。
    5
    -e PLAYBOOK_FILE=playbooks/prerequisites.yml 指定作为 openshift-ansible 内容顶级目录中的相对路径运行的 playbook。在本例中,可以指定先决条件 playbook。您还可以指定 RPM 的完整路径,或者指定到容器中任何其他 playbook 文件的路径。
    6
    -e OPTS="-v" 为容器中运行的 ansible-playbook 命令提供任意命令行选项。在这个示例中,使用 -v 来提高输出的详细程度。
  2. 接下来,运行 deploy_cluster.yml playbook 来启动集群安装:

    $ docker run -t -u `id -u` \
        -v $HOME/.ssh/id_rsa:/opt/app-root/src/.ssh/id_rsa:Z \
        -v $HOME/ansible/hosts:/tmp/inventory:Z \
        -e INVENTORY_FILE=/tmp/inventory \
        -e PLAYBOOK_FILE=playbooks/deploy_cluster.yml \
        -e OPTS="-v" \
        registry.redhat.io/openshift3/ose-ansible:v3.11

6.1.2.4. 为 OpenStack 运行安装 Playbook

要在现有 OpenStack 安装上安装 OpenShift Container Platform,使用 OpenStack playbook。如需有关 playbook 的更多信息,包括详细的先决条件,请参阅 OpenStack Provisioning readme 文件

要运行 playbook,运行以下命令:

$ ansible-playbook --user openshift \
  -i openshift-ansible/playbooks/openstack/inventory.py \
  -i inventory \
  openshift-ansible/playbooks/openstack/openshift-cluster/provision_install.yml

6.1.3. 关于安装 playbook

安装程序使用模块化 playbook,以便管理员可以根据需要安装特定的组件。通过分隔角色和 playbook 可以更好地将临时管理任务作为目标。这会增加安装过程中的控件并节省时间。

主要的安装 playbook /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml 以特定顺序运行一组独立组件 playbook,安装程序会回到已完成阶段的最后进行报告。如果安装失败,会收到哪个阶段失败的信息以及 Ansible 运行中的错误信息。

重要

虽然 RHEL Atomic Host 支持以系统容器的形式运行 OpenShift Container Platform 服务,但安装方法使用 Ansible(在 RHEL Atomic Host 中不提供)。因此,基于 RPM 的安装程序必须在 RHEL 7 系统中运行。启动安装的主机可以,但不需要一定包含在 OpenShift Container Platform 集群中。另外,安装程序的容器化版本 也可作为系统容器使用,该容器可在 RHEL Atomic Host 系统中运行。