19.4. 在您自己的基础架构的 OpenStack 上安装集群


在 OpenShift Container Platform 版本 4.16 中,您可以在运行于用户置备的基础架构上的 Red Hat OpenStack Platform(RHOSP)上安装集群。

通过利用您自己的基础架构,您可以将集群与现有的基础架构集成。与安装程序置备的安装相比,这个过程需要进行更多的操作,因为您必须创建所有 RHOSP 资源,如 Nova 服务器、Neutron 端口和安全组。但是,红帽提供了 Ansible playbook 来帮助您完成部署过程。

19.4.1. 先决条件

19.4.2. OpenShift Container Platform 互联网访问

在 OpenShift Container Platform 4.16 中,您需要访问互联网来安装集群。

您必须具有以下互联网访问权限:

  • 访问 OpenShift Cluster Manager 以下载安装程序并执行订阅管理。如果集群可以访问互联网,并且没有禁用 Telemetry,该服务会自动授权您的集群。
  • 访问 Quay.io,以获取安装集群所需的软件包。
  • 获取执行集群更新所需的软件包。
重要

如果您的集群无法直接访问互联网,则可以在置备的某些类型的基础架构上执行受限网络安装。在此过程中,您可以下载所需的内容,并使用它为镜像 registry 填充安装软件包。对于某些安装类型,集群要安装到的环境不需要访问互联网。在更新集群前,您要更新镜像 registry 的内容。

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

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

表 19.4. RHOSP 上默认 OpenShift Container Platform 集群的建议资源
resourcevalue

浮动 IP 地址

3

端口

15

路由器

1

子网

1

RAM

88 GB

VCPU

22

卷存储

275 GB

实例

7

安全组

3

安全组规则

60

服务器组

2 - 每个机器池中每个额外可用区加 1

集群或许能以少于推荐资源运行,但其性能无法保证。

重要

如果 RHOSP 对象存储(Swift)可用,并由具有 swiftoperator 角色的用户帐户执行,它将用作 OpenShift Container Platform 镜像 registry 的默认后端。在这种情况下,卷存储需要 175 GB。根据镜像 registry 的大小,Swift 空间要求会有所不同。

注意

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

OpenShift Container Platform 部署包含 control plane 机器、计算机器和 bootstrap 机器。

19.4.3.1. control plane 机器

默认情况下,OpenShift Container Platform 安装过程会创建三台 control plane 机器。

每台机器都需要:

  • 来自 RHOSP 配额的实例
  • 来自 RHOSP 配额的端口
  • 至少有 16 GB 内存和 4 个 vCPU 的类别
  • RHOSP 配额中至少有 100 GB 存储空间

19.4.3.2. 计算机器

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

每台机器都需要:

  • 来自 RHOSP 配额的实例
  • 来自 RHOSP 配额的端口
  • 至少有 8 GB 内存和 2 个 vCPU 的类别
  • RHOSP 配额中至少有 100 GB 存储空间
提示

计算机器托管您在 OpenShift Container Platform 上运行的应用程序;运行数量应尽可能多。

19.4.3.3. bootstrap 机器

在安装过程中,会临时置备 bootstrap 机器来支持 control plane。生产 control plane 就绪后,bootstrap 机器会被取消置备。

bootstrap 机器需要:

  • 来自 RHOSP 配额的实例
  • 来自 RHOSP 配额的端口
  • 至少有 16 GB 内存和 4 个 vCPU 的类别
  • RHOSP 配额中至少有 100 GB 存储空间

19.4.4. 下载 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 命令指向 python 3:

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

19.4.5. 下载安装 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.16/upi/openstack/bootstrap.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/common.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/compute-nodes.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/control-plane.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/down-bootstrap.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/down-compute-nodes.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/down-control-plane.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/down-network.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/down-security-groups.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/down-containers.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/inventory.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/network.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/upi/openstack/security-groups.yaml
            https://raw.githubusercontent.com/openshift/installer/release-4.16/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 文件中。如果没有编辑这两个文件,则支持的删除集群过程将失败。

19.4.6. 获取安装程序

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

先决条件

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

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

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

    重要

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

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

    $ tar -xvf openshift-install-linux.tar.gz
  5. 从 Red Hat OpenShift Cluster Manager 下载安装 pull secret。此 pull secret 允许您与所含授权机构提供的服务进行身份验证,这些服务包括为 OpenShift Container Platform 组件提供容器镜像的 Quay.io。

19.4.7. 为集群节点 SSH 访问生成密钥对

在 OpenShift Container Platform 安装过程中,您可以为安装程序提供 SSH 公钥。密钥通过它们的 Ignition 配置文件传递给 Red Hat Enterprise Linux CoreOS(RHCOS)节点,用于验证对节点的 SSH 访问。密钥添加到每个节点上 core 用户的 ~/.ssh/authorized_keys 列表中,这将启用免密码身份验证。

将密钥传递给节点后,您可以使用密钥对作为用户 核心 通过 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 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 RHEL 加密库(这些加密库已提交给 NIST 用于 FIPS 140-2/140-3 验证)的 OpenShift Container Platform 集群,则不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub

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

    $ cat ~/.ssh/id_ed25519.pub
  3. 将 SSH 私钥身份添加到本地用户的 SSH 代理(如果尚未添加)。在集群节点上,或者要使用 ./openshift-install gather 命令,需要对该密钥进行 SSH 代理管理,才能在集群节点上进行免密码 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.pub

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)

后续步骤

  • 安装 OpenShift Container Platform 时,为安装程序提供 SSH 公钥。

19.4.8. 创建 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. 登录到红帽客户门户网站的产品 下载页面
  2. Version 下,为 Red Hat Enterprise Linux(RHEL)8 选择 OpenShift Container Platform 4.16 的最新发行版本。

    重要

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

  3. 下载 Red Hat Enterprise Linux CoreOS(RHCOS)- OpenStack Image(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 后,就可以在安装过程中使用它。

19.4.9. 验证外部网络访问

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 中继服务插件,则默认创建一个中继端口。如需更多信息,请参阅 Neutron 中继端口

19.4.10. 启用对环境的访问

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

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

19.4.10.1. 启用通过浮动 IP 地址进行访问

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

流程

  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 创建 bootstrap FIP:

    $ openstack floating ip create --description "bootstrap machine" <external_network>
  4. 在 API 和 Ingress FIP 的 DNS 服务器中添加符合这些模式的记录:

    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 资源在集群外可用。

19.4.10.2. 完成没有浮动 IP 地址的安装

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

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

  • os_api_fip
  • os_bootstrap_fip
  • os_ingress_fip

如果无法提供外部网络,也可以将 os_external_network 留 空。如果没有提供 for os_external_network 值,则不会为您创建路由器,如果没有额外的操作,安装程序将无法从 Glance 检索镜像。之后在安装过程中,当您创建网络资源时,您必须自行配置外部连接。

如果您使用 wait-for 命令从因为缺少浮动 IP 地址或名称解析而无法访问集群 API 的系统中运行安装程序,安装会失败。在这些情况下,您可以使用代理网络或者从与机器位于相同网络的系统中运行安装程序。

注意

您可以通过为 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 可供您自己访问,不适合于生产部署,而是允许安装以进行开发和测试。

19.4.11. 为安装程序定义参数

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

流程

  1. 创建 clouds.yaml 文件:

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

      重要

      记得在 auth 字段中添加密码。您还可以将 secret 保存在 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 keymap 中的 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

19.4.12. 在 RHOSP 上创建网络资源

在您自己的基础架构的 Red Hat OpenStack Platform(RHOSP)安装上创建 OpenShift Container Platform 所需的网络资源。为节省时间,请运行提供的 Ansible 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 删除。

19.4.13. 创建安装配置文件

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

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。

流程

  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 用于 control plane 节点,以及计算节点的 8 GB RAM。
      6. 选择集群要部署到的基域。所有 DNS 记录都将是这个基域的子域,并且还包括集群名称。
      7. 为集群输入一个名称。名称长度必须为 14 个或更少字符。
  2. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  3. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

    install-config.yaml 文件会在安装过程中消耗掉。如果要重复使用该文件,您必须立即备份该文件。

现在,文件 install-config.yaml 位于您指定的目录中。

19.4.13.1. 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 使用 x.x.x.5,Ingress VIP 从网络 CIDR 块获取 x.x.x.7。要覆盖这些默认值,请为 DHCP 分配池之外的 platform.openstack.apiVIPsplatform.openstack.ingressVIPs 设置值。

重要

集群安装后无法调整网络的 CIDR 范围。红帽不提供有关在集群安装过程中确定范围的直接指导,因为它需要仔细考虑每个命名空间创建的 pod 数量。

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

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

重要

此示例文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件。

例 19.4. 单个堆栈 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...

例 19.5. 双堆栈 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...

19.4.13.3. 为机器设置自定义子网

安装程序默认使用的 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) 环境。

19.4.13.4. 清空计算机器池

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

先决条件

  • 有 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

19.4.13.5. RHOSP 提供商网络上的集群部署

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

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

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

描述 OpenStack 上四个 OpenShift 工作负载的示意图。每个工作负载都通过 NIC 并使用提供商网络连接到外部数据中心。

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

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

注意

集群可以在网络类型允许的情况下支持任意数量的提供商网络连接。例如,VLAN 网络通常支持多达 4096 个连接。

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

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

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

  • RHOSP 网络服务(Neutron)通过 RHOSP 网络 API 启用 并访问。
  • RHOSP 网络服务 启用了端口安全性并允许地址对扩展
  • 提供商网络可以与其他租户共享。

    提示

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

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

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

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

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

    重要

    提供商网络必须由用于创建集群的 RHOSP 项目所有。如果没有,则 RHOSP Compute 服务(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) 规则,以限制对单个项目的网络访问。
19.4.13.5.2. 在提供商网络上部署具有主接口的集群

您可以在 Red Hat OpenStack Platform(RHOSP) 提供商网络上部署具有主网络接口的 OpenShift Container Platform 集群。

先决条件

  • 您的 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: 2
              - 192.0.2.23
            machinesSubnet: fa806b2f-ac49-4bce-b9db-124bc64209bf
            # ...
        networking:
          machineNetwork:
          - cidr: 192.0.2.0/24

1 2
在 OpenShift Container Platform 4.12 及更新的版本中,apiVIPingressVIP 配置设置已弃用。反之,使用列表格式在 apiVIPsingressVIPs 配置设置中输入值。
警告

您不能在将提供商网络用于主网络接口时设置 platform.openstack.externalNetworkplatform.openstack.externalDNS 参数。

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

提示

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

部署集群后,您可以将 pod 附加到额外网络。如需更多信息,请参阅 了解多个网络

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

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

安装配置文件转换为 Kubernetes 清单。清单嵌套到 Ignition 配置文件中,稍后用于配置集群机器。

重要
  • OpenShift Container Platform 安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的 node-bootstrapper 证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 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. 删除定义 control plane 机器的 Kubernetes 清单文件、计算机器集和 control plane 机器集:

    $ 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.yml Kubernetes 清单文件中的 mastersSchedulable 参数是否已设置为 false。此设置可防止在 control plane 机器上调度 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>,请指定相同的安装目录。

    为安装目录中的 bootstrap、control plane 和计算节点创建 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 资源的前缀。通过这样做,您可以避免在同一项目中进行多个部署时的名称冲突。

19.4.15. 准备 bootstrap Ignition 文件

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

编辑 文件并上传该文件。然后,创建一个 Red Hat OpenStack Platform(RHOSP)用来下载主文件的辅助 bootstrap Ignition 配置文件。

先决条件

  • 您有安装程序生成的 bootstrap Ignition 文件,即 bootstrap.ign
  • 安装程序元数据文件中的基础架构 ID 被设置为环境变量($INFRA_ID)。

    • 如果没有设置变量,请参阅 创建 Kubernetes 清单和 Ignition 配置文件
  • 您可以使用 HTTP(S)来存储 bootstrap Ignition 文件。

    • 所记录的步骤使用 RHOSP 镜像服务(Glance),但也可以使用 RHOSP 存储服务(Swift)、Amazon S3、内部 HTTP 服务器或临时 Nova 服务器。

流程

  1. 运行以下 Python 脚本:该脚本修改 bootstrap 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,创建使用 bootstrap 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. 将公共地址与 镜像文件 值组合,并在存储位置保存结果。位置遵循 <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 值替换为 bootstrap Ignition 文件存储 URL。
    2
    httpHeaders 中将 name 设置为 "X-Auth-Token"。
    3
    httpHeaders 中将 value 设置为您的令牌 ID。
    4
    如果 bootstrap Ignition 文件服务器使用自签名证书,请包含 base64 编码的证书。
  8. 保存辅助 Ignition 配置文件。

bootstrap Ignition 数据将在安装过程中传递给 RHOSP。

警告

bootstrap Ignition 文件包含敏感信息,如 clouds.yaml 凭证。确保将其保存在安全的地方,并在完成安装后将其删除。

19.4.16. 在 RHOSP 上创建 control plane Ignition 配置文件

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

注意

与 bootstrap Ignition 配置一样,您必须明确为每个 control plane 机器定义主机名。

先决条件

  • 来自安装程序元数据文件中的基础架构 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

    您现在有三个 control plane Ignition 文件:& lt;INFRA_ID>-master-0-ignition.json<INFRA_ID>-master-1-ignition.json<INFRA_ID>-master-2-ignition.json

19.4.17. 更新 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 文件中提供 for 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 和 Ingress 端口,并为这些端口设置安全组。
  5. 可选:如果要控制 Nova 服务器使用的默认解析程序,请运行 RHOSP CLI 命令:

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

19.4.17.1. 使用裸机部署集群

如果您希望集群使用裸机,请修改 inventory.yaml 文件。集群可以同时在裸机上运行 control plane 和计算机器,或者只在计算机器上运行。

注意

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

先决条件

  • RHOSP Bare Metal 服务(Ironic) 通过 RHOSP Compute API 启用并访问。
  • 裸机 可作为 RHOSP 类别 提供。
  • 如果您的集群在一个大于 16.1.6 且小于 16.2.4 的 RHOSP 版本上运行,则裸机 worker 无法正常工作,因为存在一个已知问题会导致元数据服务对 OpenShift Container Platform 节点上的服务不可用。
  • RHOSP 网络支持 VM 和裸机服务器附加。
  • 如果要将机器部署到预先存在的网络中,则会置备 RHOSP 子网。
  • 如果要在安装程序置备的网络中部署机器,RHOSP Bare Metal 服务(Ironic)可以侦听在租户网络上运行的 Preboot eXecution Environment(PXE)引导机器并与之交互。
  • 作为 OpenShift Container Platform 安装过程的一部分,创建了 inventory.yaml 文件。

流程

  1. inventory.yaml 文件中,编辑机器的类别:

    1. 如果要使用裸机 control plane 机器,请将 os_flavor_master 的值改为裸机类型。
    2. 将值 of 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
      如果要使用裸机 control plane 机器,请将这个值改为一个裸机类型。
      2
      将此值更改为用于计算机器的裸机类别。

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

注意

在等待裸机引导时,安装程序可能会超时。

如果安装程序超时,重启并使用安装程序的 wait-for 命令完成部署。例如:

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

19.4.18. 在 RHOSP 上创建 bootstrap 机器

创建 bootstrap 机器,为其提供在 Red Hat OpenStack Platform(RHOSP)上运行所需的网络访问权限。红帽提供了一个 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. bootstrap 服务器活跃后,查看日志以验证是否收到 Ignition 文件:

    $ openstack console log show "$INFRA_ID-bootstrap"

19.4.19. 在 RHOSP 上创建 control plane 机器

使用您生成的 Ignition 配置文件创建三台 control plane 机器。红帽提供了一个 Ansible playbook,您可以运行它来简化此过程。

先决条件

  • 下载了"下载 playbook 依赖项"中的模块。
  • 下载了"下载安装 playbook"中的 playbook。
  • 来自安装程序元数据文件中的基础架构 ID 被设置为环境变量($INFRA_ID)。
  • inventory.yamlcommon.yamlcontrol-plane.yaml Ansible playbook 位于一个通用目录中。
  • 您有三个在"Creating control plane Ignition 配置文件"中创建的 Ignition 文件。

流程

  1. 在命令行中,将工作目录更改为 playbook 的位置。
  2. 如果 control plane Ignition 配置文件尚未位于工作目录中,请将它们复制到其中。
  3. 在命令行中运行 control-plane.yaml playbook:

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

    $ openshift-install wait-for bootstrap-complete

    您将看到确认 control plane 机器正在运行并加入集群的信息:

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

19.4.20. 使用 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

19.4.21. 从 RHOSP 删除 bootstrap 资源

删除您不再需要的 bootstrap 资源。

先决条件

  • 下载了"下载 playbook 依赖项"中的模块。
  • 下载了"下载安装 playbook"中的 playbook。
  • inventory.yamlcommon.yamldown-bootstrap.yaml Ansible playbook 位于一个通用目录中。
  • control plane 机器正在运行。

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

流程

  1. 在命令行中,将工作目录更改为 playbook 的位置。
  2. 在命令行中运行 down-bootstrap.yaml playbook:

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

bootstrap 端口、服务器和浮动 IP 地址会被删除。

警告

如果您之前没有禁用 bootstrap Ignition 文件 URL,现在需要禁用。

19.4.22. 在 RHOSP 上创建计算机器

启动 control plane 后,创建计算机器。红帽提供了一个 Ansible playbook,您可以运行它来简化此过程。

先决条件

  • 下载了"下载 playbook 依赖项"中的模块。
  • 下载了"下载安装 playbook"中的 playbook。
  • inventory.yamlcommon.yamlcompute-nodes.yaml Ansible playbook 位于一个通用目录中。
  • 安装程序创建的 metadata.json 文件与 Ansible playbook 位于同一个目录中。
  • control plane 处于活跃状态。

流程

  1. 在命令行中,将工作目录更改为 playbook 的位置。
  2. 在命令行中运行 playbook:

    $ ansible-playbook -i inventory.yaml compute-nodes.yaml

后续步骤

  • 批准机器的证书签名请求。

19.4.23. 批准机器的证书签名请求

当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(CSR)。您必须确认这些 CSR 已获得批准,或根据需要自行批准。必须首先批准客户端请求,然后批准服务器请求。

先决条件

  • 您已将机器添加到集群中。

流程

  1. 确认集群可以识别这些机器:

    $ oc get nodes

    输出示例

    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  63m  v1.29.4
    master-1  Ready     master  63m  v1.29.4
    master-2  Ready     master  64m  v1.29.4

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

    注意

    在有些 CSR 被批准前,前面的输出可能不包括计算节点(也称为 worker 节点)。

  2. 检查待处理的 CSR,并确保添加到集群中的每台机器都有 PendingApproved 状态的客户端请求:

    $ 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 都处于 Pending 状态 后,请批准集群机器的 CSR:

    注意

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

    注意

    对于在未启用机器 API 的平台上运行的集群,如裸机和其他用户置备的基础架构,您必须实施一种方法来自动批准 kubelet 提供证书请求(CSR)。如果没有批准请求,则 oc exec、ocrshoc 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 被批准前,一些 Operator 可能无法使用。

  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 没有被批准,且处于 Pending 状态,请批准集群机器的 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 后,机器将 处于 Ready 状态。运行以下命令验证:

    $ oc get nodes

    输出示例

    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  73m  v1.29.4
    master-1  Ready     master  73m  v1.29.4
    master-2  Ready     master  74m  v1.29.4
    worker-0  Ready     worker  11m  v1.29.4
    worker-1  Ready     worker  11m  v1.29.4

    注意

    批准服务器 CSR 后可能需要几分钟时间让机器过渡到 Ready 状态

其他信息

19.4.24. 验证安装是否成功

验证 OpenShift Container Platform 安装已经完成。

先决条件

  • 有安装程序(openshift-install)

流程

  • 在命令行中输入:

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

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

19.4.25. OpenShift Container Platform 的 Telemetry 访问

在 OpenShift Container Platform 4.16 中,默认运行的 Telemetry 服务提供有关集群健康状况和成功更新的指标,需要访问互联网。如果您的集群连接到互联网,Telemetry 会自动运行,而且集群会注册到 OpenShift Cluster Manager

确认 OpenShift Cluster Manager 清单正确后,可以由 Telemetry 自动维护,也可以使用 OpenShift Cluster Manager 手动维护,使用订阅监控来跟踪帐户或多集群级别的 OpenShift Container Platform 订阅。

其他资源

19.4.26. 后续步骤

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.