19.4. 使用用户置备的基础架构在 RHV 上安装集群


在 OpenShift Container Platform 版本 4.10 中,您可以在 Red Hat Virtualization(RHV)和其他您提供的基础架构上安装自定义的 OpenShift Container Platform 集群。OpenShift Container Platform 文档使用 用户置备的基础架构来 引用此基础架构类型。

下图显示了在 RHV 集群上运行的潜在 OpenShift Container Platform 集群示例。

RHV 集群上的 OpenShift Container Platform 集群图

RHV 主机运行包含 control plane 和计算 pod 的虚拟机。其中一个主机还运行 Manager 虚拟机和一个包含临时 control plane pod 的 bootstrap 虚拟机。]

19.4.1. 先决条件

在 RHV 环境上安装 OpenShift Container Platform 集群需要满足以下条件。

19.4.2. OpenShift Container Platform 互联网访问

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

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

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

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

19.4.3. RHV 环境的要求

要安装并运行 OpenShift Container Platform 版本 4.10 集群,RHV 环境必须满足以下要求。

不满足这些要求可能会导致安装或进程失败。另外,无法满足这些要求可能会导致 OpenShift Container Platform 集群在安装后几天或几星期后失败。

对 CPU、内存和存储资源的以下要求是基于 默认值 乘以安装程序创建的默认虚拟机数。除了 RHV 环境用于非 OpenShift Container Platform 操作的资源外,这些资源还必须可用。

默认情况下,安装程序会在安装过程中创建七台虚拟机。首先,它会创建一个 bootstrap 虚拟机来提供临时服务和 control plane,同时创建 OpenShift Container Platform 集群的其余部分。当安装程序完成集群创建后,删除 bootstrap 机器会释放其资源。

如果在 RHV 环境中增加虚拟机数量,则必须相应地增加资源。

要求

  • RHV 版本为 4.4。
  • RHV 环境有一个数据中心,其状态为 Up
  • RHV 数据中心包含一个 RHV 集群。
  • RHV 集群具有专门用于 OpenShift Container Platform 集群的以下资源:

    • 最小 28 个 vCPU:在安装过程中创建的七台虚拟机中每个都需要 4 个.
    • 112 GiB RAM 或更多,包括:

      • 16 GiB 或更多用于提供临时 control plane 的 bootstrap 机器。
      • 每个提供 control plane 机器的 control plane 机器都需要 16 GiB 或以上。
      • 每个运行应用程序工作负载的三台计算机器都需要 16 GiB 或以上。
  • RHV 存储域必须满足 etcd 后端性能要求
  • 在生产环境中,每个虚拟机必须具有 120 GiB 或更多存储。因此,存储域必须为默认的 OpenShift Container Platform 集群提供 840 GiB 或更多存储。在资源受限或非生产环境中,每个虚拟机必须具有 32 GiB 或更多存储,因此对于默认的 OpenShift Container Platform 集群,存储域必须具有 230 GiB 或更多存储。
  • 要在安装和更新过程中从红帽生态系统目录下载镜像,RHV 集群必须可以访问互联网。Telemetry 服务还需要互联网连接来简化订阅和权利流程。
  • RHV 集群必须具有一个虚拟网络,可访问 RHV Manager 上的 REST API。确保在这个网络中启用了 DHCP,因为安装程序创建的虚拟机会使用 DHCP 获取其 IP 地址。
  • 具有以下最低权限的用户帐户和组,用于在目标 RHV 集群上安装和管理 OpenShift Container Platform 集群:

    • DiskOperator
    • DiskCreator
    • UserTemplateBasedVm
    • TemplateOwner
    • TemplateCreator
    • 目标集群中的 ClusterAdmin
警告

应用最小权限原则:避免在安装过程中使用带有 RHV SuperUser 权限的管理员帐户。安装程序会将您提供的凭证保存到一个临时的 ovirt-config.yaml 文件中,该文件可能会被破坏。

19.4.4. 验证 RHV 环境的要求

验证 RHV 环境是否满足安装和运行 OpenShift Container Platform 集群的要求。不满足这些要求可能会导致失败。

重要

这些要求基于安装程序用来创建 control plane 和计算机器的默认资源。这些资源包括 vCPU、内存和存储。如果更改这些资源或增加 OpenShift Container Platform 机器的数量,请相应地调整这些要求。

流程

  1. 检查 RHV 版本是否支持安装 OpenShift Container Platform 版本 4.10。

    1. 在 RHV 管理门户中,单击右上角的 ? 帮助图标,然后选择 About
    2. 在打开的窗口中,记下 RHV 软件版本
    3. 确认 RHV 版本为 4.4。如需有关支持的版本组合的更多信息,请参阅 RHV 上的 OpenShift Container Platform 支持列表
  2. 检查数据中心、集群和存储。

    1. 在 RHV 管理门户中,点击 Compute Data Centers
    2. 确认可以访问您要安装 OpenShift Container Platform 的数据中心。
    3. 单击该数据中心的名称。
    4. 在数据中心详情中,Storage 选项卡中确认您要安装 OpenShift Container Platform 的存储域是 Active
    5. 记录下 域名 以供稍后使用。
    6. 确认 Free Space 至少为 230 GiB。
    7. 确认存储域满足 etcd 后端性能要求您可以使用 fio 性能基准工具进行测量
    8. 在数据中心详情中点击 Clusters 选项卡。
    9. 找到您要安装 OpenShift Container Platform 的 RHV 集群。记录集群名称以供稍后使用。
  3. 检查 RHV 主机资源。

    1. 在 RHV 管理门户中,点击 Compute > Clusters
    2. 点击您要安装 OpenShift Container Platform 的集群。
    3. 在集群详情中点击 Hosts 选项卡。
    4. 检查主机,并确认它们有至少 28 个 逻辑 CPU 内核, 专门用于 OpenShift Container Platform 集群。
    5. 记录 逻辑 CPU 内核数 以便稍后使用。
    6. 确认这些 CPU 内核被分配,在安装过程中创建的七台虚拟机中的每一台都可以有四个内核。
    7. 确认主机总共有 112 GiB 的 Max free Memory for scheduling new virtual machines,以满足以下每个 OpenShift Container Platform 机器的要求:

      • bootstrap 机器需要 16 GiB
      • 三个 control plane 机器都需要 16 GiB
      • 三个计算机器各自都需要 16 GiB
    8. 记录下 Max free Memory for scheduling new virtual machine 的数量, 以便稍后使用。
  4. 验证安装 OpenShift Container Platform 的虚拟网络是否可以访问 RHV Manager 的 REST API。在这个网络上的虚拟机中,使用 curl 访问 RHV Manager 的 REST API:

    $ curl -k -u <username>@<profile>:<password> \ 1
    https://<engine-fqdn>/ovirt-engine/api 2
    1
    对于 <username>,请指定具有在 RHV 上创建和管理 OpenShift Container Platform 集群的 RHV 帐户的用户名。对于 <profile>, 请指定登录配置集,您可以进入 RHV 管理门户登录页面并查看 Profile 下拉列表。对于 <password>,指定该用户名的密码。
    2
    对于 <engine-fqdn>,请指定 RHV 环境的完全限定域名。

    例如:

    $ curl -k -u ocpadmin@internal:pw123 \
    https://rhv-env.virtlab.example.com/ovirt-engine/api

19.4.5. 用户置备的基础架构对网络的要求

所有 Red Hat Enterprise Linux CoreOS(RHCOS)机器都需要在启动时在 initramfs 中配置联网,以获取它们的 Ignition 配置文件。

在初次启动过程中,机器需要 IP 地址配置,该配置通过 DHCP 服务器或静态设置,提供所需的引导选项。建立网络连接后,机器会从 HTTP 或 HTTPS 服务器下载 Ignition 配置文件。然后,Ignition 配置文件用于设置每台机器的确切状态。Machine Config Operator 在安装后完成对机器的更多更改,如应用新证书或密钥。

建议使用 DHCP 服务器对集群机器进行长期管理。确保 DHCP 服务器已配置为向集群机器提供持久的 IP 地址、DNS 服务器信息和主机名。

注意

如果用户置备的基础架构没有 DHCP 服务,您可以在 RHCOS 安装时向节点提供 IP 网络配置和 DNS 服务器地址。如果要从 ISO 镜像安装,这些参数可作为引导参数传递。如需有关静态 IP 置备和高级网络选项的更多信息,请参阅 安装 RHCOS 并启动 OpenShift Container Platform bootstrap 过程 部分。

Kubernetes API 服务器必须能够解析集群机器的节点名称。如果 API 服务器和 worker 节点位于不同的区域中,您可以配置默认 DNS 搜索区域,以允许 API 服务器解析节点名称。另一种支持的方法是始终通过节点对象和所有 DNS 请求中的完全限定域名引用主机。

firewall

配置防火墙,以便集群可以访问所需的站点。

另请参阅:

负载均衡器

配置一个或最好是两个 L4 负载均衡器:

  • 为 control plane 和 bootstrap 机器上的端口 644322623 提供负载均衡。端口 6443 提供对 Kubernetes API 服务器的访问,且必须在内部和外部访问。集群内的节点必须能够访问端口 22623
  • 为运行 Ingress 路由器的机器(通常是默认配置中的计算节点)提供端口 44380 的负载均衡。这两个端口都必须从集群内部和外部访问。

DNS

配置基础架构提供的 DNS,以便正确解析主要组件和服务。如果您只使用一个负载均衡器,这些 DNS 记录可以指向相同的 IP 地址。

  • api.<cluster_name>.<base_domain> (内部和外部解析)和 api-int.<cluster_name>.<base_domain> (内部解析)创建 DNS 记录,指向 control plane 机器的负载均衡器。
  • *.apps.<cluster_name>.<base_domain> 创建一个 DNS 记录,指向入口路由器的负载均衡器。例如,计算机器的端口 44380

19.4.5.1. 通过 DHCP 设置集群节点主机名

在 Red Hat Enterprise Linux CoreOS(RHCOS)机器上,主机名是通过 NetworkManager 设置的。默认情况下,机器通过 DHCP 获取其主机名。如果主机名不是由 DHCP 提供,请通过内核参数或者其它方法进行静态设置,请通过反向 DNS 查找获取。反向 DNS 查找在网络初始化后进行,可能需要一些时间来解决。其他系统服务可以在此之前启动,并将主机名检测为 localhost 或类似的内容。您可以使用 DHCP 为每个集群节点提供主机名来避免这种情况。

另外,通过 DHCP 设置主机名可以绕过实施 DNS split-horizon 的环境中的手动 DNS 记录名称配置错误。

19.4.5.2. 网络连接要求

您必须配置机器之间的网络连接,以允许 OpenShift Container Platform 集群组件进行通信。每台机器都必须能够解析集群中所有其他机器的主机名。

本节详细介绍了所需的端口。

重要

在连接的 OpenShift Container Platform 环境中,所有节点都需要访问互联网才能为平台容器拉取镜像,并向红帽提供遥测数据。

表 19.6. 用于全机器到所有机器通信的端口
协议port描述

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

主机级别的服务,包括端口 9 100-9101 上的节点导出器,以及端口 9099 上的 Cluster Version Operator。

10250-10259

Kubernetes 保留的默认端口

10256

openshift-sdn

UDP

4789

VXLAN

6081

Geneve

9000-9999

主机级别的服务,包括端口 91009101 上的节点导出器。

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

表 19.7. 用于所有机器控制平面通信的端口
协议port描述

TCP

6443

Kubernetes API

表 19.8. control plane 机器用于 control plane 机器通信的端口
协议port描述

TCP

2379-2380

etcd 服务器和对等端口

用户置备的基础架构的 NTP 配置

OpenShift Container Platform 集群被配置为默认使用公共网络时间协议(NTP)服务器。如果要使用本地企业 NTP 服务器,或者集群部署在断开连接的网络中,您可以将集群配置为使用特定的时间服务器。如需更多信息,请参阅配置 chrony 时间服务 的文档。

如果 DHCP 服务器提供 NTP 服务器信息,Red Hat Enterprise Linux CoreOS(RHCOS)机器上的 chrony 时间服务会读取信息,并可以把时钟与 NTP 服务器同步。

19.4.6. 设置安装机器

要运行二进制 openshift-install 安装程序和 Ansible 脚本,请设置 RHV Manager 或具有网络访问 RHV 环境的 Red Hat Enterprise Linux(RHEL)计算机以及 Manager 上的 REST API。

流程

  1. 更新或安装 Python3 和 Ansible。例如:

    # dnf update python3 ansible
  2. 安装 python3-ovirt-engine-sdk4 软件包,以获取 Python 软件开发套件。
  3. 安装 ovirt.image-template Ansible 角色。在 RHV Manager 和其他 Red Hat Enterprise Linux(RHEL)机器上,这个角色作为 ovirt-ansible-image-template 软件包发布。例如,输入:

    # dnf install ovirt-ansible-image-template
  4. 安装 ovirt.vm-infra Ansible 角色。在 RHV Manager 和其他 RHEL 机器上,此角色作为 ovirt-ansible-vm-infra 软件包发布。

    # dnf install ovirt-ansible-vm-infra
  5. 创建环境变量并为其分配绝对或相对路径。例如,输入:

    $ export ASSETS_DIR=./wrk
    注意

    安装程序使用此变量创建保存重要安装相关文件的目录。之后,安装过程会重复使用此变量来定位这些资产文件。避免删除此资产目录 ; 卸载集群时需要该目录。

19.4.7. 以不安全的模式在 RHV 上安装 OpenShift Container Platform

默认情况下,安装程序会创建一个 CA 证书,提示您确认并保存在安装过程中要使用的证书。您不需要手动创建或安装。

虽然不建议您这样做,但您可以覆盖此功能并在不验证证书的情况下安装 OpenShift Container Platform,方法是以 不安全的 模式在 RHV 上安装 OpenShift Container Platform。

警告

建议使用不安全 模式安装,因为它可让潜在的攻击者执行 Man-in-the-Middle 攻击并在网络中捕获敏感凭证。

流程

  1. 创建名为 ~/.ovirt/ovirt-config.yaml 的文件。
  2. ovirt-config.yaml 中添加以下内容:

    ovirt_url: https://ovirt.example.com/ovirt-engine/api 1
    ovirt_fqdn: ovirt.example.com 2
    ovirt_pem_url: ""
    ovirt_username: ocpadmin@internal
    ovirt_password: super-secret-password 3
    ovirt_insecure: true
    1
    指定 oVirt 引擎的主机名或地址。
    2
    指定 oVirt 引擎的完全限定域名。
    3
    指定 oVirt 引擎的 admin 密码。
  3. 运行安装程序。

19.4.8. 为集群节点 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_64 架构上安装使用 FIPS 验证的/Modules in Process 加密库的 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.9. 获取安装程序

在安装 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.10. 下载 Ansible playbook

下载 Ansible playbook 以在 RHV 上安装 OpenShift Container Platform 版本 4.10。

流程

  • 在您的安装机器中运行以下命令:

    $ mkdir playbooks
    $ cd playbooks
    $ curl -s -L -X GET https://api.github.com/repos/openshift/installer/contents/upi/ovirt?ref=release-4.10 |
    grep 'download_url.*\.yml' |
    awk '{ print $2 }' | sed -r 's/("|",)//g' |
    xargs -n 1 curl -O

后续步骤

  • 下载这些 Ansible playbook 后,还必须为资产目录创建环境变量,并在运行安装程序创建安装配置文件前自定义 inventory.yml 文件。

19.4.11. inventory.yml 文件

您可以使用 inventory.yml 文件来定义并创建您要安装的 OpenShift Container Platform 集群的元素。这包括 Red Hat Enterprise Linux CoreOS(RHCOS)镜像、虚拟机模板、bootstrap 机器、control plane 节点和 worker 节点等元素。您还可以使用 inventory.yml 来销毁集群。

以下 inventory.yml 示例显示参数及其默认值。这些默认值中的数量和数量满足在 RHV 环境中运行生产 OpenShift Container Platform 集群的要求。

inventory.yml 文件示例

---
all:
  vars:

    ovirt_cluster: "Default"
    ocp:
      assets_dir: "{{ lookup('env', 'ASSETS_DIR') }}"
      ovirt_config_path: "{{ lookup('env', 'HOME') }}/.ovirt/ovirt-config.yaml"

    # ---
    # {op-system} section
    # ---
    rhcos:
      image_url: "https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.10/latest/rhcos-openstack.x86_64.qcow2.gz"
      local_cmp_image_path: "/tmp/rhcos.qcow2.gz"
      local_image_path: "/tmp/rhcos.qcow2"

    # ---
    # Profiles section
    # ---
    control_plane:
      cluster: "{{ ovirt_cluster }}"
      memory: 16GiB
      sockets: 4
      cores: 1
      template: rhcos_tpl
      operating_system: "rhcos_x64"
      type: high_performance
      graphical_console:
        headless_mode: false
        protocol:
        - spice
        - vnc
      disks:
      - size: 120GiB
        name: os
        interface: virtio_scsi
        storage_domain: depot_nvme
      nics:
      - name: nic1
        network: lab
        profile: lab

    compute:
      cluster: "{{ ovirt_cluster }}"
      memory: 16GiB
      sockets: 4
      cores: 1
      template: worker_rhcos_tpl
      operating_system: "rhcos_x64"
      type: high_performance
      graphical_console:
        headless_mode: false
        protocol:
        - spice
        - vnc
      disks:
      - size: 120GiB
        name: os
        interface: virtio_scsi
        storage_domain: depot_nvme
      nics:
      - name: nic1
        network: lab
        profile: lab

    # ---
    # Virtual machines section
    # ---
    vms:
    - name: "{{ metadata.infraID }}-bootstrap"
      ocp_type: bootstrap
      profile: "{{ control_plane }}"
      type: server
    - name: "{{ metadata.infraID }}-master0"
      ocp_type: master
      profile: "{{ control_plane }}"
    - name: "{{ metadata.infraID }}-master1"
      ocp_type: master
      profile: "{{ control_plane }}"
    - name: "{{ metadata.infraID }}-master2"
      ocp_type: master
      profile: "{{ control_plane }}"
    - name: "{{ metadata.infraID }}-worker0"
      ocp_type: worker
      profile: "{{ compute }}"
    - name: "{{ metadata.infraID }}-worker1"
      ocp_type: worker
      profile: "{{ compute }}"
    - name: "{{ metadata.infraID }}-worker2"
      ocp_type: worker
      profile: "{{ compute }}"

重要

为描述以"Enter"开头的参数输入值。 否则,您可以使用默认值或将其替换为新值。

常规部分

  • ovirt_cluster :输入现有 RHV 集群的名称,在其中安装 OpenShift Container Platform 集群。
  • OCP.assets_dir :openshift -install 安装程序创建的目录的路径,以存储它生成的文件。
  • OCP.ovirt_config_path :安装程序生成的 ovirt-config.yaml 文件的路径,如 ./wrk/install-config.yaml。此文件包含与管理器的 REST API 交互所需的凭据。

Red Hat Enterprise Linux CoreOS(RHCOS)部分

  • image_url :输入您为下载指定的 RHCOS 镜像的 URL。
  • local_cmp_image_path :压缩 RHCOS 镜像的本地下载目录的路径。
  • local_image_path :提取的 RHCOS 镜像的本地目录路径。

配置集部分

本节由两个配置集组成:

  • control_plane :bootstrap 和 control plane 节点的配置集。
  • compute:compute plane 中 worker 节点的配置集。

这些配置集有以下参数:参数的默认值满足运行生产集群的最低要求。您可以增加或自定义这些值来满足工作负载要求。

  • Cluster :该值从 General Section 中的 ovirt_cluster 获取集群名称。
  • memory :虚拟机的内存量(以 GB 为单位)。
  • socket :虚拟机的插槽数量。
  • cores :虚拟机的内核数。
  • template :虚拟机模板的名称。如果计划安装多个集群,且这些集群使用包含不同规格的模板,请使用集群的 ID 预先填充模板名称。
  • operating_system :虚拟机中的客户机操作系统类型。对于 oVirt/RHV 版本 4.4,这个值必须是 rhcos_x64,以便 Ignition 脚本 的值可以传递给虚拟机。
  • type :输入 server 作为虚拟机的类型。

    重要

    您必须将 type 参数的值从 high_performance 更改为 server

  • Disk :磁盘规格。control_planecompute 节点可以有不同的存储域。
  • size :最小磁盘大小。
  • Name 输入连接到 RHV 中目标集群的磁盘名称。
  • Interface :输入您指定的磁盘的接口类型。
  • storage_domain :输入您指定的磁盘的存储域。
  • NIC :输入虚拟机使用 的名称和 网络。您还可以指定虚拟网络接口配置集。默认情况下,NIC 从 oVirt/RHV MAC 池获取其 MAC 地址。

虚拟机部分

最后部分 vms 定义您要在集群中创建和部署的虚拟机。默认情况下,它为生产环境提供最少的 control plane 和 worker 节点数量。

虚拟机包含 三个所需元素:

  • name :虚拟机的名称。在本例中,metadata .infraID 使用 metadata .yml 文件中的基础架构 ID 预先填充虚拟机名称。
  • ocp_type :OpenShift Container Platform 集群中虚拟机的角色。可能的值有 bootstrapmaster 和 worker
  • profile :每个虚拟机从中继承规格的配置集名称。本例中可能的值为 control_plane 或 compute

    您可以覆盖虚拟机从其配置集中继承的值。为此,您要将 profile 属性的名称添加到 inventory.yml 中的虚拟机,并为它分配一个覆盖值。要查看以下示例,请检查前面的 inventory.yml 示例中的 name: "{{ metadata.infraID }}-bootstrap" 虚拟机:它有一个 type 属性,其值为 server,将覆盖此虚拟机将从 control_plane 配置集继承的 type 属性的值。

元数据变量

对于虚拟机,metadata.infraID 会使用构建 Ignition 文件时创建的 metadata.json 文件中的基础架构 ID 来附加虚拟机的名称。

playbook 使用以下代码从 ocp.assets_dir 中的特定文件中读取 infraID

---
- name: include metadata.json vars
  include_vars:
    file: "{{ ocp.assets_dir }}/metadata.json"
    name: metadata

  ...

19.4.12. 指定 RHCOS 镜像设置

更新 inventory.yml 文件的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像设置。之后,当您运行此文件之一时,它会将压缩的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像从 image_url URL 下载到 local_cmp_image_path 目录。然后,playbook 将镜像解压缩到 local_image_path 目录,并使用它来创建 oVirt/RHV 模板。

流程

  1. 找到您要安装的 OpenShift Container Platform 版本的 RHCOS 镜像下载页面,如 /pub/openshift-v4/dependencies/rhcos/latest/latest/latest/latest/latest
  2. 在该下载页面中复制 OpenStack qcow2 镜像的 URL,如 https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.10/latest/rhcos-openstack.x86_64.qcow2.gz
  3. 编辑之前下载的 inventory.yml playbook。在其中包含,将 URL 粘贴为 image_url 的值。例如:

    rhcos:
      "https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.10/latest/rhcos-openstack.x86_64.qcow2.gz"

19.4.13. 创建安装配置文件

您可以通过运行安装程序 openshift-install 并使用之前指定或收集的信息响应其提示来创建安装配置文件。

当完成对提示的响应时,安装程序会在您之前指定的 asset 目录中创建 install-config.yaml 文件的初始版本,如 ./wrk/install-config.yaml

安装程序还会创建一个文件 $HOME/.ovirt/ovirt-config.yaml,其中包含访问 Manager 并使用其 REST API 所需的所有连接参数。

注: 安装过程不使用您为一些参数提供的值,如 内部 API 虚拟 IPIngress 虚拟 IP,因为您已在基础架构 DNS 中配置了它们。

它还使用您为 inventory.yml 中的参数提供的值,如 oVirt cluster、oVirt storageoVirt network。使用脚本删除或替换 install-config.yaml 中的这些相同的值,使用前面提到的 虚拟 IP

流程

  1. 运行安装程序:

    $ openshift-install create install-config --dir $ASSETS_DIR
  2. 根据安装程序的提示输入您的系统信息。

    输出示例

    ? SSH Public Key /home/user/.ssh/id_dsa.pub
    ? Platform <ovirt>
    ? Engine FQDN[:PORT] [? for help] <engine.fqdn>
    ? Enter ovirt-engine username <ocpadmin@internal>
    ? Enter password <******>
    ? oVirt cluster <cluster>
    ? oVirt storage <storage>
    ? oVirt network <net>
    ? Internal API virtual IP <172.16.0.252>
    ? Ingress virtual IP <172.16.0.251>
    ? Base Domain <example.org>
    ? Cluster Name <ocp4>
    ? Pull Secret [? for help] <********>

? SSH Public Key /home/user/.ssh/id_dsa.pub
? Platform <ovirt>
? Engine FQDN[:PORT] [? for help] <engine.fqdn>
? Enter ovirt-engine username <ocpadmin@internal>
? Enter password <******>
? oVirt cluster <cluster>
? oVirt storage <storage>
? oVirt network <net>
? Internal API virtual IP <172.16.0.252>
? Ingress virtual IP <172.16.0.251>
? Base Domain <example.org>
? Cluster Name <ocp4>
? Pull Secret [? for help] <********>

对于 Internal API 虚拟 IPIngress 虚拟 IP,请提供您在配置 DNS 服务时指定的 IP 地址。

您输入 oVirt 集群Base Domain 的值一起形成 REST API 的 URL 的 FQDN 部分以及您创建的所有应用程序,如 https://api.ocp4.example.org:6443/https://console-openshift-console.apps.ocp4.example.org。

您可以从 Red Hat OpenShift Cluster Manager 获取 pull secret

19.4.14. 自定义 install-config.yaml

在这里,您使用三个 Python 脚本覆盖一些安装程序的默认行为:

  • 默认情况下,安装程序使用机器 API 创建节点。要覆盖此默认行为,请将计算节点数量设置为零个副本。稍后,您将使用 Ansible playbook 创建计算节点。
  • 默认情况下,安装程序为节点设置机器网络的 IP 范围。要覆盖此默认行为,您可以将 IP 范围设置为与您的基础架构匹配。
  • 默认情况下,安装程序将平台设置为 ovirt。但是,在用户置备的基础架构上安装集群与在裸机上安装集群更为相似。因此,您可以从 install-config.yaml 中删除 ovirt platform 部分,并将平台改为 none。您可以使用 inventory.yml 指定所有所需的设置。
注意

这些片断可用于 Python 3 和 Python 2。

流程

  1. 将计算节点数量设置为零副本:

    $ python3 -c 'import os, yaml
    path = "%s/install-config.yaml" % os.environ["ASSETS_DIR"]
    conf = yaml.safe_load(open(path))
    conf["compute"][0]["replicas"] = 0
    open(path, "w").write(yaml.dump(conf, default_flow_style=False))'
  2. 设置机器网络的 IP 范围。例如,要将范围设置为 172.16.0.0/16,请输入:

    $ python3 -c 'import os, yaml
    path = "%s/install-config.yaml" % os.environ["ASSETS_DIR"]
    conf = yaml.safe_load(open(path))
    conf["networking"]["machineNetwork"][0]["cidr"] = "172.16.0.0/16"
    open(path, "w").write(yaml.dump(conf, default_flow_style=False))'
  3. 删除 ovirt 部分,并将平台改为 none

    $ python3 -c 'import os, yaml
    path = "%s/install-config.yaml" % os.environ["ASSETS_DIR"]
    conf = yaml.safe_load(open(path))
    platform = conf["platform"]
    del platform["ovirt"]
    platform["none"] = {}
    open(path, "w").write(yaml.dump(conf, default_flow_style=False))'
    警告

    Red Hat Virtualization 目前不支持使用 oVirt 平台的用户置备的基础架构进行安装。因此,您必须将平台设置为 none,允许 OpenShift Container Platform 将每个节点识别为裸机节点,并将集群识别为裸机集群。这与 在任何平台上安装集群 相同,并有以下限制:

    1. 没有集群供应商,因此您必须手动添加每台机器,且没有节点扩展功能。
    2. 不会安装 oVirt CSI 驱动程序,且没有 CSI 功能。

19.4.15. 生成清单文件

使用安装程序在 asset 目录中生成一组清单文件。

生成清单文件的命令在消耗 install-config.yaml 文件前会显示警告消息。

如果您计划重复使用 install-config.yaml 文件,请在生成清单文件前在备份前创建备份副本。

流程

  1. 可选:创建 install-config.yaml 文件的备份副本:

    $ cp install-config.yaml install-config.yaml.backup
  2. 在资产目录中生成一组清单:

    $ openshift-install create manifests --dir $ASSETS_DIR

    此命令显示以下消息:

    输出示例

    INFO Consuming Install Config from target directory
    WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings

    该命令生成以下清单文件:

    输出示例

    $ tree
    .
    └── wrk
        ├── manifests
        │   ├── 04-openshift-machine-config-operator.yaml
        │   ├── cluster-config.yaml
        │   ├── cluster-dns-02-config.yml
        │   ├── cluster-infrastructure-02-config.yml
        │   ├── cluster-ingress-02-config.yml
        │   ├── cluster-network-01-crd.yml
        │   ├── cluster-network-02-config.yml
        │   ├── cluster-proxy-01-config.yaml
        │   ├── cluster-scheduler-02-config.yml
        │   ├── cvo-overrides.yaml
        │   ├── etcd-ca-bundle-configmap.yaml
        │   ├── etcd-client-secret.yaml
        │   ├── etcd-host-service-endpoints.yaml
        │   ├── etcd-host-service.yaml
        │   ├── etcd-metric-client-secret.yaml
        │   ├── etcd-metric-serving-ca-configmap.yaml
        │   ├── etcd-metric-signer-secret.yaml
        │   ├── etcd-namespace.yaml
        │   ├── etcd-service.yaml
        │   ├── etcd-serving-ca-configmap.yaml
        │   ├── etcd-signer-secret.yaml
        │   ├── kube-cloud-config.yaml
        │   ├── kube-system-configmap-root-ca.yaml
        │   ├── machine-config-server-tls-secret.yaml
        │   └── openshift-config-secret-pull-secret.yaml
        └── openshift
            ├── 99_kubeadmin-password-secret.yaml
            ├── 99_openshift-cluster-api_master-user-data-secret.yaml
            ├── 99_openshift-cluster-api_worker-user-data-secret.yaml
            ├── 99_openshift-machineconfig_99-master-ssh.yaml
            ├── 99_openshift-machineconfig_99-worker-ssh.yaml
            └── openshift-install-manifests.yaml

后续步骤

  • 使 control plane 节点不可调度。

19.4.16. 使 control-plane 节点不可调度

由于要手动创建和部署 control plane 机器,因此您必须配置清单文件,使 control plane 节点不可调度。

流程

  1. 要使 control plane 节点不可调度,请输入:

    $ python3 -c 'import os, yaml
    path = "%s/manifests/cluster-scheduler-02-config.yml" % os.environ["ASSETS_DIR"]
    data = yaml.safe_load(open(path))
    data["spec"]["mastersSchedulable"] = False
    open(path, "w").write(yaml.dump(data, default_flow_style=False))'

19.4.17. 构建 Ignition 文件

要从您刚才生成和修改的清单文件构建 Ignition 文件,请运行安装程序。此操作会创建一个 Red Hat Enterprise Linux CoreOS(RHCOS)机器 initramfs,它将获取 Ignition 文件并执行创建节点所需的配置。

除了 Ignition 文件外,安装程序还会生成以下内容:

  • 包含使用 ockubectl 工具连接到集群的 admin 凭证的 auth 目录。
  • 包含当前安装的 OpenShift Container Platform 集群名称、集群 ID 和基础架构 ID 的 metadata.json 文件。

此安装过程的 Ansible playbook 使用 infraID 值作为它们所创建虚拟机的前缀。这可防止在同一 oVirt/RHV 集群中有多个安装时命名冲突。

注意

Ignition 配置文件中的证书会在 24 小时后过期。完成集群安装,并使集群以非降级状态运行 24 小时,以便完成第一次证书轮转。

流程

  1. 要构建 Ignition 文件,请输入:

    $ openshift-install create ignition-configs --dir $ASSETS_DIR

    输出示例

    $ tree
    .
    └── wrk
        ├── auth
        │   ├── kubeadmin-password
        │   └── kubeconfig
        ├── bootstrap.ign
        ├── master.ign
        ├── metadata.json
        └── worker.ign

19.4.18. 创建模板和虚拟机

确认 inventory.yml 中的变量后,您将运行第一个 Ansible 调配 playbook create-templates-and-vms.yml

此 playbook 使用 $HOME/.ovirt/ovirt-config.yaml 中的 RHV Manager 的连接参数,并在 asset 目录中读取 metadata.json

如果本地 Red Hat Enterprise Linux CoreOS(RHCOS)镜像不存在,则 playbook 会从您为 inventory.yml 中 image_url 指定的 URL 下载一个。它将提取映像并将其上传到 RHV 以创建模板。

playbook 根据 inventory.yml 文件中的 control_planecompute 配置集创建一个模板。如果这些配置集有不同的名称,它会创建两个模板。

playbook 完成后,它创建的虚拟机将停止。您可以从中获取信息,以帮助配置其他基础架构元素。例如,您可以获取虚拟机的 MAC 地址来配置 DHCP,为虚拟机分配永久 IP 地址。

流程

  1. inventory.yml 中,在 control_planecompute 变量下,将 type: high_performance 的两个实例更改为 type: server
  2. 可选: 如果您计划在同一集群中执行多个安装,请为每个 OpenShift Container Platform 安装创建不同的模板。在 inventory.yml 文件中,使用 infraID 预先 填充 模板 的值。例如:

      control_plane:
        cluster: "{{ ovirt_cluster }}"
        memory: 16GiB
        sockets: 4
        cores: 1
        template: "{{ metadata.infraID }}-rhcos_tpl"
        operating_system: "rhcos_x64"
        ...
  3. 创建模板和虚拟机:

    $ ansible-playbook -i inventory.yml create-templates-and-vms.yml

19.4.19. 创建 bootstrap 机器

您可以通过运行 bootstrap .yml playbook 创建 bootstrap 机器。此 playbook 启动 bootstrap 虚拟机,并从 asset 目录中传递 bootstrap.ign Ignition 文件。bootstrap 节点配置自己,以便它可以向 control plane 节点提供 Ignition 文件。

要监控 bootstrap 过程,您可以使用 RHV 管理门户中的控制台或使用 SSH 连接到虚拟机。

流程

  1. 创建 bootstrap 机器:

    $ ansible-playbook -i inventory.yml bootstrap.yml
  2. 使用管理门户或 SSH 中的控制台连接到 bootstrap 机器。将 <bootstrap_ip> 替换为 bootstrap 节点 IP 地址。要使用 SSH,请输入:

    $ ssh core@<boostrap.ip>
  3. 从 bootstrap 节点收集发行镜像服务的 bootkube.service journald 单元日志:

    [core@ocp4-lk6b4-bootstrap ~]$ journalctl -b -f -u release-image.service -u bootkube.service
    注意

    bootstrap 节点上的 bootkube.service 日志输出 etcd 连接被拒绝 的错误,这表示 bootstrap 服务器无法在 control plane 节点上连接到 etcd。在每个 control plane 节点上启动 etcd 且节点已加入集群后,错误应该会停止。

19.4.20. 创建 control plane 节点

您可以通过运行 masters.yml playbook 创建 control plane 节点。此 playbook 将 master.ign Ignition 文件传递给每个虚拟机。Ignition 文件包含 control plane 节点的指令,可从 URL(如 https://api-int.ocp4.example.org:22623/config/master )获取 Ignition。这个 URL 中的端口号由负载均衡器管理,且只能在集群中访问。

流程

  1. 创建 control plane 节点:

    $ ansible-playbook -i inventory.yml masters.yml
  2. 在 playbook 创建 control plane 时,监控 bootstrap 过程:

    $ openshift-install wait-for bootstrap-complete --dir $ASSETS_DIR

    输出示例

    INFO API v1.23.0 up
    INFO Waiting up to 40m0s for bootstrapping to complete...

  3. 当 control plane 节点上的所有 pod 都启动并运行 etcd 时,安装程序会显示以下输出。

    输出示例

    INFO It is now safe to remove the bootstrap resources

19.4.21. 验证集群状态

您可以在安装过程中或安装后验证 OpenShift Container Platform 集群的状态。

流程

  1. 在集群环境中,导出管理员的 kubeconfig 文件:

    $ export KUBECONFIG=$ASSETS_DIR/auth/kubeconfig

    kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。

  2. 查看部署后创建的 control plane 和计算机器:

    $ oc get nodes
  3. 查看集群的版本:

    $ oc get clusterversion
  4. 查看 Operator 的状态:

    $ oc get clusteroperator
  5. 查看集群中的所有正在运行的 pod:

    $ oc get pods -A

19.4.22. 删除 bootstrap 机器

wait-for 命令显示 bootstrap 过程完成后,您必须删除 bootstrap 虚拟机来释放计算、内存和存储资源。另外,从负载均衡器指令中删除 bootstrap 机器的设置。

流程

  1. 要从集群中删除 bootstrap 机器,请输入:

    $ ansible-playbook -i inventory.yml retire-bootstrap.yml
  2. 从负载均衡器指令中删除 bootstrap 机器的设置。

19.4.23. 创建 worker 节点并完成安装

创建 worker 节点与创建 control plane 节点类似。但是,worker 节点 worker 不会自动加入集群。要将它们添加到集群中,您需要检查并批准 worker 的待处理的 CSR(Certificate Signing Requests)。

批准第一个请求后,您可以继续批准 CSR,直到所有 worker 节点都被批准为止。完成此过程后,worker 节点将变为 Ready,并可调度在其上运行的 pod。

最后,监控命令行以查看安装过程何时完成。

流程

  1. 创建 worker 节点:

    $ ansible-playbook -i inventory.yml workers.yml
  2. 要列出所有 CSR,请输入:

    $ oc get csr -A

    最后,这个命令会显示每个节点的一个 CSR。例如:

    输出示例

    NAME        AGE    SIGNERNAME                                    REQUESTOR                                                                   CONDITION
    csr-2lnxd   63m    kubernetes.io/kubelet-serving                 system:node:ocp4-lk6b4-master0.ocp4.example.org                             Approved,Issued
    csr-hff4q   64m    kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Approved,Issued
    csr-hsn96   60m    kubernetes.io/kubelet-serving                 system:node:ocp4-lk6b4-master2.ocp4.example.org                             Approved,Issued
    csr-m724n   6m2s   kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending
    csr-p4dz2   60m    kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Approved,Issued
    csr-t9vfj   60m    kubernetes.io/kubelet-serving                 system:node:ocp4-lk6b4-master1.ocp4.example.org                             Approved,Issued
    csr-tggtr   61m    kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Approved,Issued
    csr-wcbrf   7m6s   kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending

  3. 要过滤列表并只查看待处理的 CSR,请输入:

    $ watch "oc get csr -A | grep pending -i"

    此命令每两秒钟刷新输出一次,仅显示待处理的 CSR。例如:

    输出示例

    Every 2.0s: oc get csr -A | grep pending -i
    
    csr-m724n   10m   kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending
    csr-wcbrf   11m   kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending

  4. 检查每个待处理的请求。例如:

    输出示例

    $ oc describe csr csr-m724n

    输出示例

    Name:               csr-m724n
    Labels:             <none>
    Annotations:        <none>
    CreationTimestamp:  Sun, 19 Jul 2020 15:59:37 +0200
    Requesting User:    system:serviceaccount:openshift-machine-config-operator:node-bootstrapper
    Signer:             kubernetes.io/kube-apiserver-client-kubelet
    Status:             Pending
    Subject:
             Common Name:    system:node:ocp4-lk6b4-worker1.ocp4.example.org
             Serial Number:
             Organization:   system:nodes
    Events:  <none>

  5. 如果 CSR 信息正确,则批准请求:

    $ oc adm certificate approve csr-m724n
  6. 等待安装过程完成:

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

    安装完成后,命令行会显示 OpenShift Container Platform Web 控制台的 URL,以及管理员用户名和密码。

19.4.24. OpenShift Container Platform 的 Telemetry 访问

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

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

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.