×

在 OpenShift Container Platform 4.17 版本中,您可以安装在运行在用户预配基础设施上的 Red Hat OpenStack Platform (RHOSP) 上的集群。

使用您自己的基础设施允许您将集群与现有基础设施和修改集成。此过程比安装程序预配的安装需要更多的人工操作,因为您必须创建所有 RHOSP 资源,例如 Nova 服务器、Neutron 端口和安全组。但是,Red Hat 提供 Ansible playbook 来帮助您完成部署过程。

先决条件

OpenShift Container Platform 的互联网访问

在 OpenShift Container Platform 4.17 中,您需要访问互联网才能安装集群。

您必须具有互联网访问权限才能:

  • 访问OpenShift 集群管理器以下载安装程序并执行订阅管理。如果集群具有互联网访问权限并且您没有禁用遥测,则该服务会自动授权您的集群。

  • 访问Quay.io以获取安装集群所需的软件包。

  • 获取执行集群更新所需的软件包。

如果您的集群无法直接访问互联网,则可以在您预配的某些类型的基础设施上执行受限网络安装。在此过程中,您将下载所需的内容并将其用于使用安装包填充镜像注册表。对于某些安装类型,您安装集群的环境将不需要互联网访问。在更新集群之前,请更新镜像注册表的内容。

在 RHOSP 上安装 OpenShift Container Platform 的资源指南

为了支持 OpenShift Container Platform 安装,您的 Red Hat OpenStack Platform (RHOSP) 配额必须满足以下要求:

表 1. RHOSP 上默认 OpenShift Container Platform 集群的推荐资源
资源

浮动 IP 地址

3

端口

15

路由器

1

子网

1

RAM

88 GB

vCPU

22

卷存储

275 GB

实例

7

安全组

3

安全组规则

60

服务器组

2 个,每个机器池中每增加一个可用区则增加 1 个

集群可能在资源少于推荐资源的情况下运行,但其性能无法保证。

如果 RHOSP 对象存储 (Swift) 可用,并且由具有 `swiftoperator` 角色的用户帐户操作,则它将用作 OpenShift Container Platform 镜像注册表的默认后端。在这种情况下,卷存储需求为 175 GB。Swift 存储空间需求会根据镜像注册表的大小而变化。

默认情况下,您的安全组和安全组规则配额可能较低。如果遇到问题,请以管理员身份运行 `openstack quota set --secgroups 3 --secgroup-rules 60 ` 来增加它们。

OpenShift Container Platform 部署包含控制平面机器、计算机器和引导机器。

控制平面机器

默认情况下,OpenShift Container Platform 安装过程会创建三个控制平面机器。

每台机器需要:

  • 一个来自 RHOSP 配额的实例

  • 一个来自 RHOSP 配额的端口

  • 至少具有 16 GB 内存和 4 个 vCPU 的规格

  • 至少 100 GB 来自 RHOSP 配额的存储空间

计算机器

默认情况下,OpenShift Container Platform 安装过程会创建三个计算机器。

每台机器需要:

  • 一个来自 RHOSP 配额的实例

  • 一个来自 RHOSP 配额的端口

  • 至少具有 8 GB 内存和 2 个 vCPU 的规格

  • 至少 100 GB 来自 RHOSP 配额的存储空间

计算机器承载您在 OpenShift Container Platform 上运行的应用程序;目标是尽可能多地运行应用程序。

引导机器

在安装过程中,会临时配置引导机器来启动控制平面。生产控制平面准备就绪后,将取消引导机器的配置。

引导机器需要:

  • 一个来自 RHOSP 配额的实例

  • 一个来自 RHOSP 配额的端口

  • 至少具有 16 GB 内存和 4 个 vCPU 的规格

  • 至少 100 GB 来自 RHOSP 配额的存储空间

下载 playbook 依赖项

简化用户配置基础架构上安装过程的 Ansible playbook 需要几个 Python 模块。在您将运行安装程序的机器上,添加模块的存储库,然后下载它们。

这些说明假设您使用的是 Red Hat Enterprise Linux (RHEL) 8。
先决条件
  • 您的机器上已安装 Python 3。

步骤
  1. 在命令行上,添加存储库

    1. 注册 Red Hat Subscription Manager

      $ sudo subscription-manager register # If not done already
    2. 提取最新的订阅数据

      $ sudo subscription-manager attach --pool=$YOUR_POOLID # If not done already
    3. 禁用当前存储库

      $ sudo subscription-manager repos --disable=* # If not done already
    4. 添加所需的存储库

      $ sudo subscription-manager repos \
        --enable=rhel-8-for-x86_64-baseos-rpms \
        --enable=openstack-16-tools-for-rhel-8-x86_64-rpms \
        --enable=ansible-2.9-for-rhel-8-x86_64-rpms \
        --enable=rhel-8-for-x86_64-appstream-rpms
  2. 安装模块

    $ sudo yum install python3-openstackclient ansible python3-openstacksdk python3-netaddr ansible-collections-openstack
  3. 确保 `python` 命令指向 `python3`

    $ sudo alternatives --set python /usr/bin/python3

下载安装 playbook

下载 Ansible playbook,您可以使用它在您自己的 Red Hat OpenStack Platform (RHOSP) 基础架构上安装 OpenShift Container Platform。

先决条件
  • 您的机器上已安装 curl 命令行工具。

步骤
  • 要将 playbook 下载到您的工作目录,请从命令行运行以下脚本

    $ xargs -n 1 curl -O <<< '
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/bootstrap.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/common.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/compute-nodes.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/control-plane.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/down-bootstrap.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/down-compute-nodes.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/down-control-plane.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/down-network.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/down-security-groups.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/down-containers.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/inventory.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/network.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/security-groups.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.17/upi/openstack/update-network-resources.yaml'

playbook 已下载到您的机器。

在安装过程中,您可以修改 playbook 来配置您的部署。

保留所有 playbook 以满足集群的整个生命周期。您必须拥有 playbook 才能从 RHOSP 中删除您的 OpenShift Container Platform 集群。

您必须将您在 `bootstrap.yaml`、`compute-nodes.yaml`、`control-plane.yaml`、`network.yaml` 和 `security-groups.yaml` 文件中所做的任何编辑与以 `down-` 为前缀的相应 playbook 相匹配。例如,对 `bootstrap.yaml` 文件的编辑也必须反映在 `down-bootstrap.yaml` 文件中。如果您没有编辑这两个文件,则受支持的集群删除过程将失败。

获取安装程序

在安装 OpenShift Container Platform 之前,请在您用于安装的主机上下载安装文件。

先决条件
  • 您有一台运行 Linux 或 macOS 的计算机,具有 500 MB 的本地磁盘空间。

步骤
  1. 转到 Red Hat Hybrid Cloud Console 上的 集群类型 页面。如果您有 Red Hat 帐户,请使用您的凭据登录。如果没有,请创建一个帐户。

  2. 从页面“自己运行”部分选择您的基础架构提供商。

  3. 从“OpenShift 安装程序”下的下拉菜单中选择您的主机操作系统和架构,然后单击“下载安装程序”。

  4. 将下载的文件放在您想要存储安装配置文件的目录中。

    • 安装程序会在您用于安装集群的计算机上创建多个文件。在完成集群安装后,您必须保留安装程序和安装程序创建的文件。这两个文件都是删除集群所必需的。

    • 即使集群在安装过程中失败,删除安装程序创建的文件也不会删除您的集群。要删除集群,请完成针对您的特定云提供商的 OpenShift Container Platform 卸载过程。

  5. 解压安装程序。例如,在使用 Linux 操作系统的计算机上,运行以下命令

    $ tar -xvf openshift-install-linux.tar.gz
  6. 从 Red Hat OpenShift 集群管理器下载您的安装 pull secret。此 pull secret 允许您向包含的授权机构提供的服务进行身份验证,包括 Quay.io(提供 OpenShift Container Platform 组件的容器镜像)。

或者,您可以从 Red Hat 客户门户 检索安装程序,您可以在其中指定要下载的安装程序版本。但是,您必须拥有有效的订阅才能访问此页面。

生成用于集群节点 SSH 访问的密钥对

在 OpenShift Container Platform 安装期间,您可以向安装程序提供 SSH 公钥。该密钥通过其 Ignition 配置文件传递到 Red Hat Enterprise Linux CoreOS (RHCOS) 节点,并用于验证对节点的 SSH 访问。该密钥将添加到每个节点上 `core` 用户的 `~/.ssh/authorized_keys` 列表中,从而实现无密码身份验证。

密钥传递到节点后,您可以使用密钥对以 `core` 用户身份通过 SSH 登录到 RHCOS 节点。要通过 SSH 访问节点,私钥标识必须由您本地用户的 SSH 管理。

如果您想通过 SSH 登录到集群节点以执行安装调试或灾难恢复,则必须在安装过程中提供 SSH 公钥。`./openshift-install gather` 命令也需要 SSH 公钥位于集群节点上。

在需要灾难恢复和调试的生产环境中,不要跳过此过程。

您必须使用本地密钥,而不是使用平台特定方法(例如 AWS 密钥对)配置的密钥。

步骤
  1. 如果您的本地机器上没有现有的 SSH 密钥对可用于对集群节点进行身份验证,请创建一个。例如,在使用 Linux 操作系统的计算机上,运行以下命令

    $ ssh-keygen -t ed25519 -N '' -f <path>/<file_name> (1)
    1 指定新 SSH 密钥的路径和文件名,例如~/.ssh/id_ed25519。如果您已经有现有的密钥对,请确保您的公钥位于您的~/.ssh目录中。

    如果您计划安装一个使用已提交给 NIST 以进行 FIPS 140-2/140-3 验证的 RHEL 加密库的 OpenShift Container Platform 集群(仅限于x86_64ppc64les390x 架构),请不要创建使用ed25519算法的密钥。请改用rsaecdsa算法创建密钥。

  2. 查看公钥 SSH 密钥

    $ cat <path>/<file_name>.pub

    例如,运行以下命令查看~/.ssh/id_ed25519.pub公钥

    $ cat ~/.ssh/id_ed25519.pub
  3. 如果尚未添加,请将 SSH 私钥身份添加到本地用户的 SSH 代理。对于无密码 SSH 身份验证到集群节点,或者如果您想使用./openshift-install gather命令,都需要 SSH 代理管理密钥。

    在某些发行版中,默认的 SSH 私钥身份(例如~/.ssh/id_rsa~/.ssh/id_dsa)会自动管理。

    1. 如果本地用户的ssh-agent进程尚未运行,请将其作为后台任务启动。

      $ eval "$(ssh-agent -s)"
      示例输出
      Agent pid 31874

      如果您的集群处于 FIPS 模式,则只能使用符合 FIPS 的算法来生成 SSH 密钥。密钥必须是 RSA 或 ECDSA。

  4. 将您的 SSH 私钥添加到ssh-agent

    $ ssh-add <path>/<file_name> (1)
    1 指定 SSH 私钥的路径和文件名,例如~/.ssh/id_ed25519
    示例输出
    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
后续步骤
  • 安装 OpenShift Container Platform 时,请向安装程序提供 SSH 公钥。

创建 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像

OpenShift Container Platform 安装程序要求 Red Hat OpenStack Platform (RHOSP) 集群中存在 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。检索最新的 RHCOS 镜像,然后使用 RHOSP CLI 上传它。

先决条件
  • RHOSP CLI 已安装。

步骤
  1. 登录 Red Hat 客户门户的产品下载页面

  2. 在**版本**下,选择适用于 Red Hat Enterprise Linux (RHEL) 8 的最新版本的 OpenShift Container Platform 4.17。

    RHCOS 镜像可能不会随着每次 OpenShift Container Platform 版本的发布而更改。您必须下载版本号小于或等于您安装的 OpenShift Container Platform 版本的镜像。如果可用,请使用与您的 OpenShift Container Platform 版本匹配的镜像版本。

  3. 下载Red Hat Enterprise Linux CoreOS (RHCOS) - OpenStack 镜像 (QCOW)

  4. 解压缩镜像。

    集群使用镜像之前,必须先解压缩 RHOSP 镜像。下载的文件名可能不包含压缩扩展名,例如.gz.tgz。要确定文件是否或如何压缩,请在命令行中输入

    $ file <name_of_downloaded_file>
  5. 使用 RHOSP CLI 从您下载的镜像创建一个名为rhcos的集群镜像

    $ openstack image create --container-format=bare --disk-format=qcow2 --file rhcos-${RHCOS_VERSION}-openstack.qcow2 rhcos
    根据您的 RHOSP 环境,您可能能够以.raw.qcow2格式上传镜像。如果您使用 Ceph,则必须使用.raw格式。
    如果安装程序找到多个同名的镜像,它会随机选择其中一个。为避免此行为,请为 RHOSP 中的资源创建唯一名称。

将镜像上传到 RHOSP 后,即可在安装过程中使用它。

验证外部网络访问

OpenShift Container Platform 安装过程需要外部网络访问。您必须向其提供外部网络值,否则部署将失败。在开始此过程之前,请验证 Red Hat OpenStack Platform (RHOSP) 中是否存在具有外部路由器类型的网络。

步骤
  1. 使用 RHOSP CLI 验证“外部”网络的名称和 ID

    $ openstack network list --long -c ID -c Name -c "Router Type"
    示例输出
    +--------------------------------------+----------------+-------------+
    | ID                                   | Name           | Router Type |
    +--------------------------------------+----------------+-------------+
    | 148a8023-62a7-4672-b018-003462f8d7dc | public_network | External    |
    +--------------------------------------+----------------+-------------+

网络列表中显示具有外部路由器类型的网络。如果至少有一个不存在,请参见创建默认浮动 IP 网络创建默认提供商网络

如果启用了 Neutron trunk 服务插件,则默认情况下会创建一个 trunk 端口。有关更多信息,请参见Neutron trunk 端口

启用对环境的访问

在部署过程中,所有 OpenShift Container Platform 机器都创建在 Red Hat OpenStack Platform (RHOSP) 租户网络中。因此,在大多数 RHOSP 部署中,无法直接访问它们。

您可以在安装过程中使用浮动 IP 地址 (FIP) 配置 OpenShift Container Platform API 和应用程序访问。您也可以在不配置 FIP 的情况下完成安装,但安装程序不会配置外部访问 API 或应用程序的方法。

使用浮动 IP 地址启用访问

创建浮动 IP (FIP) 地址,用于外部访问 OpenShift Container Platform API、集群应用程序和引导过程。

步骤
  1. 使用 Red Hat OpenStack Platform (RHOSP) CLI 创建 API FIP

    $ openstack floating ip create --description "API <cluster_name>.<base_domain>" <external_network>
  2. 使用 Red Hat OpenStack Platform (RHOSP) CLI 创建应用程序或 Ingress FIP

    $ openstack floating ip create --description "Ingress <cluster_name>.<base_domain>" <external_network>
  3. 使用 Red Hat OpenStack Platform (RHOSP) CLI 创建引导 FIP

    $ openstack floating ip create --description "bootstrap machine" <external_network>
  4. 将遵循以下模式的记录添加到您的 DNS 服务器中,用于 API 和 Ingress FIP

    api.<cluster_name>.<base_domain>.  IN  A  <API_FIP>
    *.apps.<cluster_name>.<base_domain>. IN  A <apps_FIP>

    如果您不控制 DNS 服务器,您可以通过将以下集群域名添加到您的/etc/hosts文件来访问集群

    • <api_floating_ip> api.<cluster_name>.<base_domain>

    • <application_floating_ip> grafana-openshift-monitoring.apps.<cluster_name>.<base_domain>

    • <application_floating_ip> prometheus-k8s-openshift-monitoring.apps.<cluster_name>.<base_domain>

    • <application_floating_ip> oauth-openshift.apps.<cluster_name>.<base_domain>

    • <application_floating_ip> console-openshift-console.apps.<cluster_name>.<base_domain>

    • application_floating_ip integrated-oauth-server-openshift-authentication.apps.<cluster_name>.<base_domain>

    /etc/hosts文件中的集群域名允许本地访问 Web 控制台和集群的监控界面。您也可以使用kubectloc。您可以使用指向<application_floating_ip>的其他条目来访问用户应用程序。此操作仅允许您访问 API 和应用程序,这对于生产部署不适用,但允许进行开发和测试安装。

  5. 将 FIP 添加到inventory.yaml文件中,作为以下变量的值

    • os_api_fip

    • os_bootstrap_fip

    • os_ingress_fip

如果您使用这些值,还必须在inventory.yaml文件中将外部网络输入为os_external_network变量的值。

您可以通过分配浮动 IP 地址并更新防火墙配置,使 OpenShift Container Platform 资源在集群外部可用。

在不使用浮动 IP 地址的情况下完成安装

您可以在 Red Hat OpenStack Platform (RHOSP) 上安装 OpenShift Container Platform,无需提供浮动 IP 地址。

inventory.yaml 文件中,请不要定义以下变量

  • os_api_fip

  • os_bootstrap_fip

  • os_ingress_fip

如果您无法提供外部网络,也可以将 os_external_network 留空。如果您未为 os_external_network 提供值,则不会为您创建路由器,并且在没有其他操作的情况下,安装程序将无法从 Glance 获取镜像。在安装过程的后期,当您创建网络资源时,必须自行配置外部连接。

如果您使用无法访问集群 API 的系统(由于缺少浮动 IP 地址或名称解析)运行带有 wait-for 命令的安装程序,则安装将失败。为了防止在这些情况下安装失败,您可以使用代理网络或从与您的机器位于同一网络的系统运行安装程序。

您可以通过为 API 和 Ingress 端口创建 DNS 记录来启用名称解析。例如

api.<cluster_name>.<base_domain>.  IN  A  <api_port_IP>
*.apps.<cluster_name>.<base_domain>. IN  A <ingress_port_IP>

如果您无法控制 DNS 服务器,则可以将记录添加到您的 /etc/hosts 文件中。此操作仅使您自己可以访问 API,这并不适合生产部署,但允许进行开发和测试安装。

定义安装程序参数

OpenShift Container Platform 安装程序依赖于一个名为 clouds.yaml 的文件。该文件描述了 Red Hat OpenStack Platform (RHOSP) 配置参数,包括项目名称、登录信息和授权服务 URL。

步骤
  1. 创建 clouds.yaml 文件

    • 如果您的 RHOSP 发行版包含 Horizon Web UI,请在其中生成 clouds.yaml 文件。

      请记住向 auth 字段添加密码。您也可以将密钥保存在clouds.yaml 分开的单独文件中

    • 如果您的 RHOSP 发行版不包含 Horizon Web UI,或者您不想使用 Horizon,请自行创建该文件。有关 clouds.yaml 的详细信息,请参阅 RHOSP 文档中的配置 文件

      clouds:
        shiftstack:
          auth:
            auth_url: http://10.10.14.42:5000/v3
            project_name: shiftstack
            username: <username>
            password: <password>
            user_domain_name: Default
            project_domain_name: Default
        dev-env:
          region_name: RegionOne
          auth:
            username: <username>
            password: <password>
            project_name: 'devonly'
            auth_url: 'https://10.10.14.22:5001/v2.0'
  2. 如果您的 RHOSP 安装使用自签名证书颁发机构 (CA) 证书进行端点身份验证

    1. 将证书颁发机构文件复制到您的机器。

    2. cacerts 密钥添加到 clouds.yaml 文件中。该值必须是 CA 证书的绝对路径,且非 root 可访问。

      clouds:
        shiftstack:
          ...
          cacert: "/etc/pki/ca-trust/source/anchors/ca.crt.pem"

      使用自定义 CA 证书运行安装程序后,您可以通过编辑 cloud-provider-config 密钥映射中 ca-cert.pem 密钥的值来更新证书。在命令行上,运行

      $ oc edit configmap -n openshift-config cloud-provider-config
  3. clouds.yaml 文件放置在以下位置之一:

    1. OS_CLIENT_CONFIG_FILE 环境变量的值

    2. 当前目录

    3. Unix 特定的用户配置目录,例如 ~/.config/openstack/clouds.yaml

    4. Unix 特定的站点配置目录,例如 /etc/openstack/clouds.yaml

      安装程序将按照此顺序搜索 clouds.yaml

在 RHOSP 上创建网络资源

创建在您自己的基础架构上安装的 Red Hat OpenStack Platform (RHOSP) 上的 OpenShift Container Platform 所需的网络资源。为了节省时间,请运行提供的 Ansible playbook,这些 playbook 会生成安全组、网络、子网、路由器和端口。

先决条件
  • 您已在“下载 playbook 依赖项”中下载了模块。

  • 您已在“下载安装 playbook”中下载了 playbook。

步骤
  1. 对于双栈集群部署,请编辑 inventory.yaml 文件并取消注释 os_subnet6 属性。

  2. 在命令行上,通过运行以下命令来创建网络资源:

    $ ansible-playbook -i inventory.yaml network.yaml

    API 和 Ingress VIP 字段将在 inventory.yaml playbook 中被分配给网络端口的 IP 地址覆盖。

    network.yaml playbook 创建的资源将由 down-network.yaml playbook 删除。

创建安装配置文件

您可以自定义在 Red Hat OpenStack Platform (RHOSP) 上安装的 OpenShift Container Platform 集群。

先决条件
  • 您拥有 OpenShift Container Platform 安装程序和集群的 pull 密钥。

步骤
  1. 创建 install-config.yaml 文件。

    1. 更改到包含安装程序的目录,然后运行以下命令:

      $ ./openshift-install create install-config --dir <installation_directory> (1)
      1 对于 <installation_directory>,请指定存储安装程序创建的文件的目录名称。

      指定目录时

      • 验证该目录是否具有执行权限。此权限是必需的,用于在安装目录下运行 Terraform 二进制文件。

      • 使用空目录。某些安装资源(例如 bootstrap X.509 证书)的有效期很短,因此您不能重复使用安装目录。如果您想从另一个集群安装中重复使用单个文件,您可以将它们复制到您的目录中。但是,安装资源的文件名可能会在不同版本之间发生变化。从早期 OpenShift Container Platform 版本复制安装文件时,请谨慎操作。

    2. 在提示符下,提供云的配置详细信息。

      1. 可选:选择要用于访问集群机器的 SSH 密钥。

        对于您想要在其上执行安装调试或灾难恢复的生产 OpenShift Container Platform 集群,请指定您的 ssh-agent 进程使用的 SSH 密钥。

      2. 选择 **openstack** 作为目标平台。

      3. 指定要用于安装集群的 Red Hat OpenStack Platform (RHOSP) 外部网络名称。

      4. 指定要用于外部访问 OpenShift API 的浮动 IP 地址。

      5. 指定至少具有 16 GB RAM 的 RHOSP 实例类型,用于控制平面节点,以及具有 8 GB RAM 的实例类型,用于计算节点。

      6. 选择要将集群部署到的基础域。所有 DNS 记录都将是此基础域的子域,并且还将包括集群名称。

      7. 输入集群的名称。名称必须为 14 个字符或更少。

  2. 修改 install-config.yaml 文件。您可以在“安装配置参数”部分找到有关可用参数的更多信息。

  3. 备份 install-config.yaml 文件,以便您可以使用它来安装多个集群。

    install-config.yaml 文件在安装过程中会被使用。如果您想重复使用该文件,则现在必须对其进行备份。

您现在已在您指定的目录中拥有 install-config.yaml 文件。

RHOSP 部署中的自定义子网

可选地,您可以在您选择的 Red Hat OpenStack Platform (RHOSP) 子网上部署集群。子网的 GUID 作为install-config.yaml 文件中platform.openstack.machinesSubnet的值传递。

此子网用作集群的主子网。默认情况下,节点和端口在此子网上创建。您可以通过将platform.openstack.machinesSubnet属性的值设置为子网的 UUID,在不同的 RHOSP 子网上创建节点和端口。

在使用自定义子网运行 OpenShift Container Platform 安装程序之前,请验证您的配置是否满足以下要求:

  • platform.openstack.machinesSubnet使用的子网启用了 DHCP。

  • platform.openstack.machinesSubnet的 CIDR 与networking.machineNetwork的 CIDR 匹配。

  • 安装程序用户有权在此网络上创建端口,包括具有固定 IP 地址的端口。

使用自定义子网的集群具有以下限制:

  • 如果您计划安装使用浮动 IP 地址的集群,则platform.openstack.machinesSubnet子网必须连接到连接到externalNetwork网络的路由器。

  • 如果在install-config.yaml文件中设置了platform.openstack.machinesSubnet值,则安装程序不会为您的 RHOSP 机器创建私有网络或子网。

  • 您不能同时使用platform.openstack.externalDNS属性和自定义子网。要向使用自定义子网的集群添加 DNS,请在 RHOSP 网络上配置 DNS。

默认情况下,API VIP 从网络的 CIDR 块中获取 x.x.x.5,而 Ingress VIP 获取 x.x.x.7。要覆盖这些默认值,请设置platform.openstack.apiVIPsplatform.openstack.ingressVIPs的值,这些值位于 DHCP 分配池之外。

网络的 CIDR 范围在集群安装后不可调整。Red Hat 不提供关于在集群安装期间确定范围的直接指导,因为它需要仔细考虑每个命名空间中创建的 Pod 数量。

RHOSP 的自定义 install-config.yaml 文件示例

以下install-config.yaml文件示例演示了所有可能的 Red Hat OpenStack Platform (RHOSP) 自定义选项。

此示例文件仅供参考。您必须使用安装程序获取您的install-config.yaml文件。
单栈install-config.yaml文件示例
apiVersion: v1
baseDomain: example.com
controlPlane:
  name: master
  platform: {}
  replicas: 3
compute:
- name: worker
  platform:
    openstack:
      type: ml.large
  replicas: 3
metadata:
  name: example
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  serviceNetwork:
  - 172.30.0.0/16
  networkType: OVNKubernetes
platform:
  openstack:
    cloud: mycloud
    externalNetwork: external
    computeFlavor: m1.xlarge
    apiFloatingIP: 128.0.0.1
fips: false
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...
双栈install-config.yaml文件示例
apiVersion: v1
baseDomain: example.com
controlPlane:
  name: master
  platform: {}
  replicas: 3
compute:
- name: worker
  platform:
    openstack:
      type: ml.large
  replicas: 3
metadata:
  name: example
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  - cidr: fd01::/48
    hostPrefix: 64
  machineNetwork:
  - cidr: 192.168.25.0/24
  - cidr: fd2e:6f44:5dd8:c956::/64
  serviceNetwork:
  - 172.30.0.0/16
  - fd02::/112
  networkType: OVNKubernetes
platform:
  openstack:
    cloud: mycloud
    externalNetwork: external
    computeFlavor: m1.xlarge
    apiVIPs:
    - 192.168.25.10
    - fd2e:6f44:5dd8:c956:f816:3eff:fec3:5955
    ingressVIPs:
    - 192.168.25.132
    - fd2e:6f44:5dd8:c956:f816:3eff:fe40:aecb
    controlPlanePort:
      fixedIPs:
      - subnet:
          name: openshift-dual4
      - subnet:
          name: openshift-dual6
      network:
        name: openshift-dual
fips: false
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...

为机器设置自定义子网

安装程序默认使用的 IP 范围可能与您安装 OpenShift Container Platform 时创建的 Neutron 子网不匹配。如有必要,请通过编辑安装配置文件来更新新机器的 CIDR 值。

先决条件
  • 您拥有由 OpenShift Container Platform 安装程序生成的install-config.yaml文件。

  • 您已安装 Python 3。

步骤
  1. 在命令行中,浏览到包含install-config.yamlinventory.yaml文件的目录。

  2. 从该目录中,运行脚本编辑install-config.yaml文件或手动更新文件。

    • 要使用脚本设置值,请运行以下命令:

      $ python -c 'import yaml
      path = "install-config.yaml"
      data = yaml.safe_load(open(path))
      inventory = yaml.safe_load(open("inventory.yaml"))["all"]["hosts"]["localhost"]
      machine_net = [{"cidr": inventory["os_subnet_range"]}]
      api_vips = [inventory["os_apiVIP"]]
      ingress_vips = [inventory["os_ingressVIP"]]
      ctrl_plane_port = {"network": {"name": inventory["os_network"]}, "fixedIPs": [{"subnet": {"name": inventory["os_subnet"]}}]}
      if inventory.get("os_subnet6"): (1)
          machine_net.append({"cidr": inventory["os_subnet6_range"]})
          api_vips.append(inventory["os_apiVIP6"])
          ingress_vips.append(inventory["os_ingressVIP6"])
          data["networking"]["networkType"] = "OVNKubernetes"
          data["networking"]["clusterNetwork"].append({"cidr": inventory["cluster_network6_cidr"], "hostPrefix": inventory["cluster_network6_prefix"]})
          data["networking"]["serviceNetwork"].append(inventory["service_subnet6_range"])
          ctrl_plane_port["fixedIPs"].append({"subnet": {"name": inventory["os_subnet6"]}})
      data["networking"]["machineNetwork"] = machine_net
      data["platform"]["openstack"]["apiVIPs"] = api_vips
      data["platform"]["openstack"]["ingressVIPs"] = ingress_vips
      data["platform"]["openstack"]["controlPlanePort"] = ctrl_plane_port
      del data["platform"]["openstack"]["externalDNS"]
      open(path, "w").write(yaml.dump(data, default_flow_style=False))'
      1 适用于双栈 (IPv4/IPv6) 环境。

清空计算机池

要继续使用您自己的基础设施进行安装,请将安装配置文件中的计算机器数量设置为零。稍后,您将手动创建这些机器。

先决条件
  • 您拥有由 OpenShift Container Platform 安装程序生成的install-config.yaml文件。

步骤
  1. 在命令行中,浏览到包含install-config.yaml的目录。

  2. 从该目录中,运行脚本编辑install-config.yaml文件或手动更新文件。

    • 要使用脚本设置值,请运行:

      $ python -c '
      import yaml;
      path = "install-config.yaml";
      data = yaml.safe_load(open(path));
      data["compute"][0]["replicas"] = 0;
      open(path, "w").write(yaml.dump(data, default_flow_style=False))'
    • 要手动设置值,请打开文件并将compute.<first entry>.replicas的值设置为0

在 RHOSP 提供商网络上部署集群

您可以在 Red Hat OpenStack Platform (RHOSP) 上部署 OpenShift Container Platform 集群,其主网络接口位于提供商网络上。提供商网络通常用于使项目直接访问可用于访问互联网的公共网络。您还可以将提供商网络作为网络创建过程的一部分在项目之间共享。

RHOSP 提供商网络直接映射到数据中心中现有的物理网络。RHOSP 管理员必须创建它们。

在以下示例中,OpenShift Container Platform 工作负载使用提供商网络连接到数据中心。

A diagram that depicts four OpenShift workloads on OpenStack. Each workload is connected by its NIC to an external data center by using a provider network.

安装在提供商网络上的 OpenShift Container Platform 集群不需要租户网络或浮动 IP 地址。安装程序在安装过程中不会创建这些资源。

提供商网络类型的示例包括平面(未标记)和 VLAN(802.1Q 标记)。

集群可以支持与网络类型允许的连接一样多的提供商网络连接。例如,VLAN 网络通常支持最多 4096 个连接。

您可以在RHOSP 文档中了解更多关于提供商和租户网络的信息。

集群安装的 RHOSP 提供商网络要求

在安装 OpenShift Container Platform 集群之前,您的 Red Hat OpenStack Platform (RHOSP) 部署和提供商网络必须满足许多条件:

  • RHOSP 网络服务 (Neutron) 已启用 并可通过 RHOSP 网络 API 访问。

  • RHOSP 网络服务已启用端口安全和允许的地址对扩展。

  • 提供商网络可以与其他租户共享。

    使用带有--share标志的openstack network create命令来创建可以共享的网络。

  • 您用于安装集群的 RHOSP 项目必须拥有提供商网络以及相应的子网。

    要为名为“openshift”的项目创建网络,请输入以下命令:
    $ openstack network create --project openshift
    要为名为“openshift”的项目创建子网,请输入以下命令:
    $ openstack subnet create --project openshift

    要了解有关在 RHOSP 上创建网络的更多信息,请阅读提供商网络文档

    如果集群由admin用户拥有,则必须以该用户身份运行安装程序才能在网络上创建端口。

    提供商网络必须由用于创建集群的 RHOSP 项目拥有。如果没有,RHOSP 计算服务 (Nova) 无法从此网络请求端口。

  • 验证提供商网络是否可以访问 RHOSP 元数据服务 IP 地址,默认为169.254.169.254

    根据您的 RHOSP SDN 和网络服务配置,您可能需要在创建子网时提供路由。例如:

    $ openstack subnet create --dhcp --host-route destination=169.254.169.254/32,gateway=192.0.2.2 ...
  • 可选:要保护网络,请创建基于角色的访问控制 (RBAC)规则,以将网络访问限制为单个项目。

部署在提供商网络上具有主接口的集群

您可以部署一个 OpenShift Container Platform 集群,其主网络接口位于 Red Hat OpenStack Platform (RHOSP) 提供商网络上。

先决条件
  • 您的 Red Hat OpenStack Platform (RHOSP) 部署已按照“RHOSP 集群安装的提供商网络要求”中所述进行配置。

步骤
  1. 在文本编辑器中,打开install-config.yaml文件。

  2. platform.openstack.apiVIPs属性的值设置为 API VIP 的 IP 地址。

  3. platform.openstack.ingressVIPs属性的值设置为 Ingress VIP 的 IP 地址。

  4. platform.openstack.machinesSubnet属性的值设置为提供商网络子网的 UUID。

  5. networking.machineNetwork.cidr属性的值设置为提供商网络子网的 CIDR 块。

platform.openstack.apiVIPsplatform.openstack.ingressVIPs属性都必须是networking.machineNetwork.cidr块中未分配的 IP 地址。

依赖 RHOSP 提供商网络的集群安装配置示例文件片段
        ...
        platform:
          openstack:
            apiVIPs: (1)
              - 192.0.2.13
            ingressVIPs: (1)
              - 192.0.2.23
            machinesSubnet: fa806b2f-ac49-4bce-b9db-124bc64209bf
            # ...
        networking:
          machineNetwork:
          - cidr: 192.0.2.0/24
1 在 OpenShift Container Platform 4.12 及更高版本中,apiVIPingressVIP配置设置已弃用。请改用列表格式在apiVIPsingressVIPs配置设置中输入值。

使用提供商网络作为主网络接口时,不能设置platform.openstack.externalNetworkplatform.openstack.externalDNS参数。

部署集群时,安装程序将使用install-config.yaml文件在提供商网络上部署集群。

您可以将其他网络(包括提供商网络)添加到platform.openstack.additionalNetworkIDs列表中。

部署集群后,可以将 Pod 附加到其他网络。有关更多信息,请参见理解多个网络

创建 Kubernetes 清单文件和 Ignition 配置文件

由于您必须修改一些集群定义文件并手动启动集群机器,因此您必须生成集群配置机器所需的 Kubernetes 清单文件和 Ignition 配置文件。

安装配置文件将转换为 Kubernetes 清单文件。清单文件将打包到 Ignition 配置文件中,稍后将使用这些文件来配置集群机器。

  • OpenShift Container Platform 安装程序生成的 Ignition 配置文件包含在 24 小时后过期的证书,届时将自动续订。如果在续订证书之前关闭集群,并在 24 小时后重新启动集群,则集群会自动恢复已过期的证书。例外情况是,您必须手动批准挂起的node-bootstrapper证书签名请求 (CSR) 以恢复 kubelet 证书。有关更多信息,请参见有关“从过期的控制平面证书中恢复”的文档。

  • 建议您在生成 Ignition 配置文件后 12 小时内使用它们,因为 24 小时证书将在集群安装后 16 到 22 小时之间轮换。在 12 小时内使用 Ignition 配置文件,可以避免在安装过程中证书更新运行时安装失败。

先决条件
  • 您已获得 OpenShift Container Platform 安装程序。

  • 您已创建install-config.yaml安装配置文件。

步骤
  1. 切换到包含 OpenShift Container Platform 安装程序的目录,并为集群生成 Kubernetes 清单文件。

    $ ./openshift-install create manifests --dir <installation_directory> (1)
    1 对于<installation_directory>,请指定包含您创建的install-config.yaml文件的安装目录。
  2. 删除定义控制平面机器、计算机器集和控制平面机器集的 Kubernetes 清单文件。

    $ rm -f openshift/99_openshift-cluster-api_master-machines-*.yaml openshift/99_openshift-cluster-api_worker-machineset-*.yaml openshift/99_openshift-machine-api_master-control-plane-machine-set.yaml

    由于您自己创建和管理这些资源,因此无需初始化它们。

    • 您可以保留计算机器集文件以使用机器 API 创建计算机器,但是您必须更新对它们的引用以匹配您的环境。

  3. 检查<installation_directory>/manifests/cluster-scheduler-02-config.ymlKubernetes 清单文件中mastersSchedulable参数是否设置为false。此设置可防止将 Pod 调度到控制平面机器上。

    1. 打开<installation_directory>/manifests/cluster-scheduler-02-config.yml文件。

    2. 找到mastersSchedulable参数并确保将其设置为false

    3. 保存并退出文件。

  4. 要创建 Ignition 配置文件,请从包含安装程序的目录运行以下命令。

    $ ./openshift-install create ignition-configs --dir <installation_directory> (1)
    1 对于<installation_directory>,请指定相同的安装目录。

    在安装目录中为引导程序、控制平面和计算节点创建 Ignition 配置文件。kubeadmin-passwordkubeconfig文件创建在./<installation_directory>/auth目录中。

    .
    ├── auth
    │   ├── kubeadmin-password
    │   └── kubeconfig
    ├── bootstrap.ign
    ├── master.ign
    ├── metadata.json
    └── worker.ign
  5. 将元数据文件的infraID键导出为环境变量。

    $ export INFRA_ID=$(jq -r .infraID metadata.json)
metadata.json中提取infraID键,并将其用作您创建的所有 RHOSP 资源的前缀。这样做可以避免在同一项目中进行多次部署时发生名称冲突。

准备引导程序 Ignition 文件

OpenShift Container Platform 安装过程依赖于从引导程序 Ignition 配置文件创建的引导程序机器。

编辑文件并上传它。然后,创建一个 Red Hat OpenStack Platform (RHOSP) 用于下载主文件的辅助引导程序 Ignition 配置文件。

先决条件
  • 您拥有安装程序生成的引导程序 Ignition 文件bootstrap.ign

  • 安装程序的元数据文件中的基础架构 ID 设置为环境变量 ($INFRA_ID)。

    • 如果未设置该变量,请参见**创建 Kubernetes 清单文件和 Ignition 配置文件**。

  • 您可以使用 HTTP(S) 可访问的方式来存储引导程序 Ignition 文件。

    • 此文档过程使用 RHOSP 镜像服务 (Glance),但您也可以使用 RHOSP 存储服务 (Swift)、Amazon S3、内部 HTTP 服务器或临时 Nova 服务器。

步骤
  1. 运行以下 Python 脚本。该脚本修改引导程序 Ignition 文件以在运行时设置主机名和(如果可用)CA 证书文件。

    import base64
    import json
    import os
    
    with open('bootstrap.ign', 'r') as f:
        ignition = json.load(f)
    
    files = ignition['storage'].get('files', [])
    
    infra_id = os.environ.get('INFRA_ID', 'openshift').encode()
    hostname_b64 = base64.standard_b64encode(infra_id + b'-bootstrap\n').decode().strip()
    files.append(
    {
        'path': '/etc/hostname',
        'mode': 420,
        'contents': {
            'source': 'data:text/plain;charset=utf-8;base64,' + hostname_b64
        }
    })
    
    ca_cert_path = os.environ.get('OS_CACERT', '')
    if ca_cert_path:
        with open(ca_cert_path, 'r') as f:
            ca_cert = f.read().encode()
            ca_cert_b64 = base64.standard_b64encode(ca_cert).decode().strip()
    
        files.append(
        {
            'path': '/opt/openshift/tls/cloud-ca-cert.pem',
            'mode': 420,
            'contents': {
                'source': 'data:text/plain;charset=utf-8;base64,' + ca_cert_b64
            }
        })
    
    ignition['storage']['files'] = files;
    
    with open('bootstrap.ign', 'w') as f:
        json.dump(ignition, f)
  2. 使用 RHOSP CLI 创建使用引导程序 Ignition 文件的镜像。

    $ openstack image create --disk-format=raw --container-format=bare --file bootstrap.ign <image_name>
  3. 获取镜像的详细信息。

    $ openstack image show <image_name>

    记下file的值;它遵循模式v2/images/<image_ID>/file

    验证您创建的镜像是否处于活动状态。
  4. 检索镜像服务的公共地址。

    $ openstack catalog show image
  5. 将公共地址与镜像file值组合,并将结果保存为存储位置。该位置遵循模式<image_service_public_URL>/v2/images/<image_ID>/file

  6. 生成身份验证令牌并保存令牌 ID。

    $ openstack token issue -c id -f value
  7. 将以下内容插入名为$INFRA_ID-bootstrap-ignition.json的文件中,并编辑占位符以匹配您自己的值。

    {
      "ignition": {
        "config": {
          "merge": [{
            "source": "<storage_url>", (1)
            "httpHeaders": [{
              "name": "X-Auth-Token", (2)
              "value": "<token_ID>" (3)
            }]
          }]
        },
        "security": {
          "tls": {
            "certificateAuthorities": [{
              "source": "data:text/plain;charset=utf-8;base64,<base64_encoded_certificate>" (4)
            }]
          }
        },
        "version": "3.2.0"
      }
    }
    1 ignition.config.merge.source的值替换为引导程序 Ignition 文件存储 URL。
    2 httpHeaders中的name设置为"X-Auth-Token"
    3 httpHeaders中的value设置为您的令牌 ID。
    4 如果引导程序 Ignition 文件服务器使用自签名证书,请包含 base64 编码的证书。
  8. 保存辅助 Ignition 配置文件。

引导程序 Ignition 数据将在安装过程中传递给 RHOSP。

引导程序 Ignition 文件包含敏感信息,例如clouds.yaml凭据。确保将其存储在安全的地方,并在完成安装过程后将其删除。

在 RHOSP 上创建控制平面 Ignition 配置文件

在您自己的基础架构上 Red Hat OpenStack Platform (RHOSP) 上安装 OpenShift Container Platform 需要控制平面 Ignition 配置文件。您必须创建多个配置文件。

与引导 Ignition 配置一样,您必须为每台控制平面机器显式定义主机名。
先决条件
  • 安装程序元数据文件中的基础设施 ID 作为环境变量 ($INFRA_ID) 设置。

    • 如果未设置该变量,请参阅“创建 Kubernetes 清单和 Ignition 配置文件”。

步骤
  • 在命令行上,运行以下 Python 脚本

    $ for index in $(seq 0 2); do
        MASTER_HOSTNAME="$INFRA_ID-master-$index\n"
        python -c "import base64, json, sys;
    ignition = json.load(sys.stdin);
    storage = ignition.get('storage', {});
    files = storage.get('files', []);
    files.append({'path': '/etc/hostname', 'mode': 420, 'contents': {'source': 'data:text/plain;charset=utf-8;base64,' + base64.standard_b64encode(b'$MASTER_HOSTNAME').decode().strip(), 'verification': {}}, 'filesystem': 'root'});
    storage['files'] = files;
    ignition['storage'] = storage
    json.dump(ignition, sys.stdout)" <master.ign >"$INFRA_ID-master-$index-ignition.json"
    done

    您现在拥有三个控制平面 Ignition 文件:<INFRA_ID>-master-0-ignition.json<INFRA_ID>-master-1-ignition.json<INFRA_ID>-master-2-ignition.json

更新 RHOSP 上的网络资源

更新您自己的基础架构上 Red Hat OpenStack Platform (RHOSP) 上的 OpenShift Container Platform 安装所需的网络资源。

先决条件
  • 您的机器上已安装 Python 3。

  • 您已在“下载 playbook 依赖项”中下载了模块。

  • 您已在“下载安装 playbook”中下载了 playbook。

步骤
  1. 可选:将外部网络值添加到 inventory.yaml playbook 中

    inventory.yaml Ansible Playbook 中的外部网络值示例
    ...
          # The public network providing connectivity to the cluster. If not
          # provided, the cluster external connectivity must be provided in another
          # way.
    
          # Required for os_api_fip, os_ingress_fip, os_bootstrap_fip.
          os_external_network: 'external'
    ...

    如果您未在 inventory.yaml 文件中为 os_external_network 提供值,则必须确保虚拟机能够自行访问 Glance 和外部连接。

  2. 可选:将外部网络和浮动 IP (FIP) 地址值添加到 inventory.yaml playbook 中

    inventory.yaml Ansible Playbook 中的 FIP 值示例
    ...
          # OpenShift API floating IP address. If this value is non-empty, the
          # corresponding floating IP will be attached to the Control Plane to
          # serve the OpenShift API.
          os_api_fip: '203.0.113.23'
    
          # OpenShift Ingress floating IP address. If this value is non-empty, the
          # corresponding floating IP will be attached to the worker nodes to serve
          # the applications.
          os_ingress_fip: '203.0.113.19'
    
          # If this value is non-empty, the corresponding floating IP will be
          # attached to the bootstrap machine. This is needed for collecting logs
          # in case of install failure.
          os_bootstrap_fip: '203.0.113.20'

    如果您未定义 os_api_fipos_ingress_fip 的值,则必须执行安装后网络配置。

    如果您未定义 os_bootstrap_fip 的值,则安装程序无法从失败的安装中下载调试信息。

    有关更多信息,请参阅“启用对环境的访问”。

  3. 在命令行上,通过运行 security-groups.yaml playbook 创建安全组

    $ ansible-playbook -i inventory.yaml security-groups.yaml
  4. 在命令行上,通过运行 update-network-resources.yaml playbook 更新网络资源

    $ ansible-playbook -i inventory.yaml update-network-resources.yaml (1)
    1 此 playbook 将向网络、子网、端口和路由器添加标签。它还将浮动 IP 地址附加到 API 和入口端口,并为这些端口设置安全组。
  5. 可选:如果要控制 Nova 服务器使用的默认解析器,请运行 RHOSP CLI 命令

    $ openstack subnet set --dns-nameserver <server_1> --dns-nameserver <server_2> "$INFRA_ID-nodes"
  6. 可选:您可以使用创建的 inventory.yaml 文件来自定义安装。例如,您可以部署使用裸机机器的集群。

部署使用裸机机器的集群

如果希望集群使用裸机机器,请修改 inventory.yaml 文件。您的集群可以同时拥有在裸机上运行的控制平面机器和计算机器,或者仅拥有计算机器。

请确保您的 install-config.yaml 文件反映您用于裸机工作节点的 RHOSP 网络是否支持浮动 IP 地址。

先决条件
  • RHOSP 裸机服务 (Ironic) 已启用,可通过 RHOSP 计算 API 访问。

  • 裸机可作为 RHOSP 规格 使用。

  • 如果您的集群运行在高于 16.1.6 且低于 16.2.4 的 RHOSP 版本上,则裸机工作节点将无法工作,这是由于 已知问题 导致元数据服务对于 OpenShift Container Platform 节点上的服务不可用。

  • RHOSP 网络支持虚拟机和裸机服务器连接。

  • 如果要在预先存在的网络上部署机器,则会预配 RHOSP 子网。

  • 如果要在安装程序预配的网络上部署机器,则 RHOSP 裸机服务 (Ironic) 能够侦听并与在租户网络上运行的预启动执行环境 (PXE) 启动机器交互。

  • 您在 OpenShift Container Platform 安装过程中创建了 inventory.yaml 文件。

步骤
  1. inventory.yaml 文件中,编辑机器的规格

    1. 如果要使用裸机控制平面机器,请将 os_flavor_master 的值更改为裸机规格。

    2. os_flavor_worker 的值更改为裸机规格。

      裸机 inventory.yaml 文件示例
      all:
        hosts:
          localhost:
            ansible_connection: local
            ansible_python_interpreter: "{{ansible_playbook_python}}"
      
            # User-provided values
            os_subnet_range: '10.0.0.0/16'
            os_flavor_master: 'my-bare-metal-flavor' (1)
            os_flavor_worker: 'my-bare-metal-flavor' (2)
            os_image_rhcos: 'rhcos'
            os_external_network: 'external'
      ...
      1 如果要使用裸机控制平面机器,请将此值更改为裸机规格。
      2 将此值更改为用于计算机的裸机规格。

使用更新的 inventory.yaml 文件完成安装过程。部署期间创建的机器将使用您添加到文件中的规格。

安装程序在等待裸机机器启动时可能会超时。

如果安装程序超时,请重新启动,然后使用安装程序的 wait-for 命令完成部署。例如

$ ./openshift-install wait-for install-complete --log-level debug

在 RHOSP 上创建引导机器

创建一个引导机器,并为其提供在 Red Hat OpenStack Platform (RHOSP) 上运行所需的网络访问权限。Red Hat 提供一个 Ansible playbook,您可以运行它来简化此过程。

先决条件
  • 您已在“下载 playbook 依赖项”中下载了模块。

  • 您已在“下载安装 playbook”中下载了 playbook。

  • inventory.yamlcommon.yamlbootstrap.yaml Ansible playbook 位于公共目录中。

  • 安装程序创建的 metadata.json 文件与 Ansible playbook 位于同一目录中。

步骤
  1. 在命令行上,将工作目录更改为 playbook 的位置。

  2. 在命令行上,运行 bootstrap.yaml playbook

    $ ansible-playbook -i inventory.yaml bootstrap.yaml
  3. 引导服务器激活后,查看日志以验证是否已接收 Ignition 文件

    $ openstack console log show "$INFRA_ID-bootstrap"

在 RHOSP 上创建控制平面机器

使用生成的 Ignition 配置文件创建三台控制平面机器。Red Hat 提供一个 Ansible playbook,您可以运行它来简化此过程。

先决条件
  • 您已在“下载 playbook 依赖项”中下载了模块。

  • 您已在“下载安装 playbook”中下载了 playbook。

  • 安装程序元数据文件中的基础设施 ID 作为环境变量 ($INFRA_ID) 设置。

  • inventory.yamlcommon.yamlcontrol-plane.yaml Ansible playbook 位于公共目录中。

  • 您拥有在“创建控制平面 Ignition 配置文件”中创建的三个 Ignition 文件。

步骤
  1. 在命令行上,将工作目录更改为 playbook 的位置。

  2. 如果控制平面 Ignition 配置文件尚未位于您的工作目录中,请将其复制到其中。

  3. 在命令行上,运行 control-plane.yaml playbook

    $ ansible-playbook -i inventory.yaml control-plane.yaml
  4. 运行以下命令来监控引导过程

    $ openshift-install wait-for bootstrap-complete

    您将看到确认控制平面机器正在运行并已加入集群的消息

    INFO API v1.30.3 up
    INFO Waiting up to 30m0s for bootstrapping to complete...
    ...
    INFO It is now safe to remove the bootstrap resources

使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件以默认系统用户身份登录到您的集群。kubeconfig 文件包含集群信息,CLI 使用这些信息将客户端连接到正确的集群和 API 服务器。该文件特定于一个集群,并在 OpenShift Container Platform 安装期间创建。

先决条件
  • 您已部署 OpenShift Container Platform 集群。

  • 您已安装 oc CLI。

步骤
  1. 导出 kubeadmin 凭据

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig (1)
    1 对于 <installation_directory>,请指定存储安装文件的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令

    $ oc whoami
    示例输出
    system:admin

从 RHOSP 中删除引导资源

删除不再需要的引导资源。

先决条件
  • 您已在“下载 playbook 依赖项”中下载了模块。

  • 您已在“下载安装 playbook”中下载了 playbook。

  • inventory.yamlcommon.yamldown-bootstrap.yaml Ansible 剧本位于同一个目录下。

  • 控制平面机器正在运行。

    • 如果您不知道机器的状态,请参见“验证集群状态”。

步骤
  1. 在命令行上,将工作目录更改为 playbook 的位置。

  2. 在命令行上运行down-bootstrap.yaml剧本。

    $ ansible-playbook -i inventory.yaml down-bootstrap.yaml

引导端口、服务器和浮动IP地址已删除。

如果您之前没有禁用引导Ignition文件URL,请现在禁用。

在RHOSP上创建计算机器

搭建控制平面后,创建计算机器。Red Hat 提供一个 Ansible 剧本,您可以运行它来简化此过程。

先决条件
  • 您已在“下载 playbook 依赖项”中下载了模块。

  • 您已在“下载安装 playbook”中下载了 playbook。

  • inventory.yamlcommon.yamlcompute-nodes.yaml Ansible 剧本位于同一个目录下。

  • 安装程序创建的 metadata.json 文件与 Ansible playbook 位于同一目录中。

  • 控制平面处于活动状态。

步骤
  1. 在命令行上,将工作目录更改为 playbook 的位置。

  2. 在命令行上运行剧本。

    $ ansible-playbook -i inventory.yaml compute-nodes.yaml
后续步骤
  • 批准机器的证书签名请求。

批准您的机器的证书签名请求

当您向集群添加机器时,会为每个添加的机器生成两个待处理的证书签名请求 (CSR)。您必须确认这些 CSR 已获批准,或者如有必要,自行批准它们。必须先批准客户端请求,然后批准服务器请求。

先决条件
  • 您已向集群添加机器。

步骤
  1. 确认集群是否识别这些机器。

    $ oc get nodes
    示例输出
    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  63m  v1.30.3
    master-1  Ready     master  63m  v1.30.3
    master-2  Ready     master  64m  v1.30.3

    输出列出了您创建的所有机器。

    在批准一些 CSR 之前,上述输出可能不包括计算节点(也称为工作节点)。

  2. 查看待处理的 CSR,并确保您看到为添加到集群的每台机器的客户端请求显示“待处理”或“已批准”状态。

    $ oc get csr
    示例输出
    NAME        AGE     REQUESTOR                                                                   CONDITION
    csr-8b2br   15m     system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending
    csr-8vnps   15m     system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending
    ...

    在此示例中,两台机器正在加入集群。您可能会在列表中看到更多已批准的 CSR。

  3. 如果 CSR 未获批准,在您添加的所有机器的待处理 CSR 都处于“待处理”状态后,批准集群机器的 CSR。

    由于 CSR 会自动轮换,因此在将机器添加到集群后一小时内批准您的 CSR。如果您在一小时内未批准它们,证书将轮换,每个节点将存在两个以上的证书。您必须批准所有这些证书。批准客户端 CSR 后,Kubelet 会为服务证书创建辅助 CSR,这需要手动批准。然后,如果 Kubelet 请求具有相同参数的新证书,则machine-approver会自动批准后续的服务证书续订请求。

    对于在未启用机器 API 的平台(例如裸机和其他用户预配的基础架构)上运行的集群,您必须实现一种自动批准 kubelet 服务证书请求 (CSR) 的方法。如果未批准请求,则oc execoc rshoc logs命令将无法成功,因为API服务器连接到 kubelet 时需要服务证书。任何联系 Kubelet 端点的操作都需要此证书批准到位。此方法必须监视新的 CSR,确认 CSR 是由system:nodesystem:admin组中的node-bootstrapper服务帐户提交的,并确认节点的身份。

    • 要分别批准它们,请对每个有效的 CSR 运行以下命令:

      $ oc adm certificate approve <csr_name> (1)
      1 <csr_name>是当前 CSR 列表中 CSR 的名称。
    • 要批准所有待处理的 CSR,请运行以下命令:

      $ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approve

      在批准一些 CSR 之前,某些 Operators 可能会不可用。

  4. 现在您的客户端请求已获批准,您必须查看添加到集群的每台机器的服务器请求。

    $ oc get csr
    示例输出
    NAME        AGE     REQUESTOR                                                                   CONDITION
    csr-bfd72   5m26s   system:node:ip-10-0-50-126.us-east-2.compute.internal                       Pending
    csr-c57lv   5m26s   system:node:ip-10-0-95-157.us-east-2.compute.internal                       Pending
    ...
  5. 如果剩余的 CSR 未获批准且处于“待处理”状态,请批准集群机器的 CSR。

    • 要分别批准它们,请对每个有效的 CSR 运行以下命令:

      $ oc adm certificate approve <csr_name> (1)
      1 <csr_name>是当前 CSR 列表中 CSR 的名称。
    • 要批准所有待处理的 CSR,请运行以下命令:

      $ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
  6. 批准所有客户端和服务器 CSR 后,机器将具有“就绪”状态。通过运行以下命令进行验证:

    $ oc get nodes
    示例输出
    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  73m  v1.30.3
    master-1  Ready     master  73m  v1.30.3
    master-2  Ready     master  74m  v1.30.3
    worker-0  Ready     worker  11m  v1.30.3
    worker-1  Ready     worker  11m  v1.30.3

    批准服务器 CSR 后,机器可能需要几分钟才能过渡到“就绪”状态。

附加信息

验证安装是否成功

验证 OpenShift Container Platform 安装是否完成。

先决条件
  • 您拥有安装程序 (openshift-install)

步骤
  • 在命令行中输入:

    $ openshift-install --log-level debug wait-for install-complete

程序将输出控制台 URL 以及管理员的登录信息。

OpenShift Container Platform 的遥测访问

在 OpenShift Container Platform 4.17 中,默认运行的遥测服务用于提供有关集群运行状况和更新成功情况的指标,需要互联网访问。如果您的集群已连接到互联网,则遥测会自动运行,并且您的集群会注册到OpenShift 集群管理器

确认您的OpenShift 集群管理器清单正确无误后(由遥测自动维护或使用 OpenShift 集群管理器手动维护),使用订阅监控在帐户或多集群级别跟踪您的 OpenShift Container Platform 订阅。

其他资源

后续步骤