3.4. 使用自定义网络在 vSphere 上安装集群


在 OpenShift Container Platform 版本 4.16 中,您可以使用自定义的网络配置选项在 VMware vSphere 环境中安装集群。通过自定义网络配置,您的集群可以与环境中现有的 IP 地址分配共存,并与现有的 MTU 和 VXLAN 配置集成。

注意

OpenShift Container Platform 支持将集群部署到单个 VMware vCenter 中。不支持在多个 vCenter 上使用机器/机器集部署集群。

您必须在安装过程中设置大多数网络配置参数,且您只能在正在运行的集群中修改 kubeProxy 配置参数。

重要

执行用户置备的基础架构安装的步骤仅作为示例。使用您提供的基础架构安装集群需要了解 vSphere 平台和 OpenShift Container Platform 的安装过程。使用用户置备的基础架构安装说明作为指南 ; 您可以通过其他方法创建所需的资源。

3.4.1. 先决条件

3.4.2. OpenShift Container Platform 互联网访问

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

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

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

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

3.4.3. VMware vSphere 区域和区启用

您可以将 OpenShift Container Platform 集群部署到在单个 VMware vCenter 中运行的多个 vSphere 数据中心。每个数据中心都可以运行多个集群。此配置降低了导致集群失败的硬件故障或网络中断的风险。要启用区域和区域,您必须为 OpenShift Container Platform 集群定义多个故障域。

重要

VMware vSphere 区域和区启用功能需要 vSphere Container Storage Interface (CSI) 驱动程序作为集群中的默认存储驱动程序。因此,这个功能只在新安装的集群中可用。

对于从上一版本升级的集群,您必须为集群启用 CSI 自动迁移。然后,您可以为升级的集群配置多个区域和区域。

默认安装配置将集群部署到单个 vSphere 数据中心。如果要将集群部署到多个 vSphere 数据中心,您必须创建一个启用地区和区功能的安装配置文件。

默认 install-config.yaml 文件包含 vcentersfailureDomains 字段,您可以在其中为 OpenShift Container Platform 集群指定多个 vSphere 数据中心和集群。如果要在由单个数据中心组成的 vSphere 环境中安装 OpenShift Container Platform 集群,您可以将这些字段留空。

以下列表描述了为集群定义区和区域相关的术语:

  • 故障域:建立地区和区域之间的关系。您可以使用 vCenter 对象(如 datastore 对象)定义故障域。故障域定义 OpenShift Container Platform 集群节点的 vCenter 位置。
  • Region :指定 vCenter 数据中心。您可以使用 openshift-region 标签类别中的标签来定义区域。
  • Zone:指定一个 vCenter 集群。您可以使用 openshift-zone 标签类别中的标签来定义区。
注意

如果您计划在 install-config.yaml 文件中指定多个故障域,则必须在创建配置文件前创建标签类别、区域标签和区域标签。

您必须为每个代表一个区域的 vCenter 数据中心创建一个 vCenter 标签。另外,您必须为比数据中心(代表一个区)中运行的每个集群创建一个 vCenter 标签。创建标签后,您必须将每个标签附加到对应的数据中心和集群。

下表概述了在单个 VMware vCenter 中运行的多个 vSphere 数据中心的区域、区域和标签之间的关系示例。

数据中心(区域)集群(区)Tags

us-east

us-east-1

us-east-1a

us-east-1b

us-east-2

us-east-2a

us-east-2b

us-west

us-west-1

us-west-1a

us-west-1b

us-west-2

us-west-2a

us-west-2b

3.4.4. 手动创建安装配置文件

安装集群要求您手动创建安装配置文件。

重要

Cloud Controller Manager Operator 在提供的主机名或 IP 地址上执行连接检查。确保为可访问的 vCenter 服务器指定主机名或 IP 地址。如果您向不存在的 vCenter 服务器提供元数据,集群安装会在 bootstrap 阶段失败。

先决条件

  • 您在本地机器上有一个 SSH 公钥来提供给安装程序。该密钥将用于在集群节点上进行 SSH 身份验证,以进行调试和灾难恢复。
  • 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。

流程

  1. 创建一个安装目录来存储所需的安装资产:

    $ mkdir <installation_directory>
    重要

    您必须创建一个目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。

  2. 自定义提供的 install-config.yaml 文件模板示例,并将其保存在 <installation_directory> 中。

    注意

    此配置文件必须命名为 install-config.yaml

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

    重要

    install-config.yaml 文件会在安装过程的下一步中使用。现在必须备份它。

其他资源

3.4.4.1. VMware vSphere 的 install-config.yaml 文件示例

您可以自定义 install-config.yaml 文件,以指定有关 OpenShift Container Platform 集群平台的更多详情,或修改所需参数的值。

additionalTrustBundlePolicy: Proxyonly
apiVersion: v1
baseDomain: example.com 1
compute: 2
- architecture: amd64
  name: <worker_node>
  platform: {}
  replicas: 0 3
controlPlane: 4
  architecture: amd64
  name: <parent_node>
  platform: {}
  replicas: 3 5
metadata:
  creationTimestamp: null
  name: test 6
networking:
---
platform:
  vsphere:
    failureDomains: 7
    - name: <failure_domain_name>
      region: <default_region_name>
      server: <fully_qualified_domain_name>
      topology:
        computeCluster: "/<data_center>/host/<cluster>"
        datacenter: <data_center> 8
        datastore: "/<data_center>/datastore/<datastore>" 9
        networks:
        - <VM_Network_name>
        resourcePool: "/<data_center>/host/<cluster>/Resources/<resourcePool>" 10
        folder: "/<data_center_name>/vm/<folder_name>/<subfolder_name>" 11
      zone: <default_zone_name>
    vcenters:
    - datacenters:
      - <data_center>
      password: <password> 12
      port: 443
      server: <fully_qualified_domain_name> 13
      user: administrator@vsphere.local
    diskType: thin 14
fips: false 15
pullSecret: '{"auths": ...}' 16
sshKey: 'ssh-ed25519 AAAA...' 17
1
集群的基域。所有 DNS 记录都必须是这个基域的子域,并包含集群名称。
2 4
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。两个部分都定义单个机器池,因此只使用一个 control plane。OpenShift Container Platform 不支持定义多个计算池。
3
replicas 参数的值必须设置为 0。此参数控制集群为您创建和管理的 worker 数量,在使用用户置备的基础架构时集群不会执行这些功能。在完成 OpenShift Container Platform 安装前,您必须手动为集群部署 worker 机器。
5
您添加到集群的 control plane 机器数量。由于集群使用此值作为集群中的 etcd 端点数量,所以该值必须与您部署的 control plane 机器数量匹配。
6
您在 DNS 记录中指定的集群名称。
7
建立地区和区域之间的关系。您可以使用 vCenter 对象(如 datastore 对象)定义故障域。故障域定义 OpenShift Container Platform 集群节点的 vCenter 位置。
8
vSphere 数据中心。
9
保存虚拟机文件、模板和 ISO 镜像的 vSphere 数据存储路径。
重要

您可以指定数据存储集群中存在的任何数据存储路径。默认情况下,Storage vMotion 会自动为数据存储集群启用。红帽不支持 Storage vMotion,因此您必须禁用 Storage vMotion 以避免 OpenShift Container Platform 集群的数据丢失问题。

如果需要在多个数据存储间指定虚拟机,请使用 数据存储 对象在集群 install-config.yaml 配置文件中指定故障域。如需更多信息,请参阅"VMware vSphere 区域和区启用"。

10
可选: 对于安装程序置备的基础架构,安装程序创建虚拟机的现有资源池的绝对路径,例如 /<data_center_name>/host/<cluster_name>/Resources/<resource_pool_name>/<optional_nested_resource_pool_name>。如果没有指定值,资源会在集群 /example_data_center/host/example_cluster/Resources 的根目录中安装。
11
可选: 对于安装程序置备的基础架构,安装程序创建虚拟机的现有文件夹的绝对路径,如 /<datacenter_name>/vm/<folder_name>/<subfolder_name>。如果没有提供这个值,安装程序会在数据中心虚拟机文件夹中创建一个顶层文件夹,其名称为基础架构 ID。如果您为集群提供基础架构,且您不想使用默认的 StorageClass 对象(名为 thin),您可以从 install-config.yaml 文件中省略 folder 参数。
12
与 vSphere 用户关联的密码。
13
vCenter 服务器的完全限定主机名或 IP 地址。
重要

Cloud Controller Manager Operator 在提供的主机名或 IP 地址上执行连接检查。确保为可访问的 vCenter 服务器指定主机名或 IP 地址。如果您向不存在的 vCenter 服务器提供元数据,集群安装会在 bootstrap 阶段失败。

14
vSphere 磁盘置备方法。
15
是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。
重要

要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅将 RHEL 切换到 FIPS 模式

当以 FIPS 模式运行 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS)时,OpenShift Container Platform 核心组件使用 RHEL 加密库,在 x86_64、ppc64le 和 s390x 架构上提交到 NIST FIPS 140-2/140-3 Validation。

16
OpenShift Cluster Manager 获取的 pull secret。此 pull secret 允许您与所含授权机构提供的服务进行身份验证,这些服务包括为 OpenShift Container Platform 组件提供容器镜像的 Quay.io。
17
Red Hat Enterprise Linux CoreOS(RHCOS)中 core 用户的默认 SSH 密钥的公钥部分。

3.4.4.2. 在安装过程中配置集群范围的代理

生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml 文件中配置代理设置,将新的 OpenShift Container Platform 集群配置为使用代理。

先决条件

  • 您有一个现有的 install-config.yaml 文件。
  • 您检查了集群需要访问的站点,并确定它们中的任何站点是否需要绕过代理。默认情况下,所有集群出口流量都经过代理,包括对托管云供应商 API 的调用。如果需要,您将在 Proxy 对象的 spec.noProxy 字段中添加站点来绕过代理。

    注意

    Proxy 对象 status.noProxy 字段使用安装配置中的 networking.machineNetwork[].cidrnetworking.clusterNetwork[].cidrnetworking.serviceNetwork[] 字段的值填充。

    对于在 Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure 和 Red Hat OpenStack Platform(RHOSP)上安装,Proxy 对象 status.noProxy 字段也会使用实例元数据端点填充(169.254.169.254)。

流程

  1. 编辑 install-config.yaml 文件并添加代理设置。例如:

    apiVersion: v1
    baseDomain: my.domain.com
    proxy:
      httpProxy: http://<username>:<pswd>@<ip>:<port> 1
      httpsProxy: https://<username>:<pswd>@<ip>:<port> 2
      noProxy: example.com 3
    additionalTrustBundle: | 4
        -----BEGIN CERTIFICATE-----
        <MY_TRUSTED_CA_CERT>
        -----END CERTIFICATE-----
    additionalTrustBundlePolicy: <policy_to_add_additionalTrustBundle> 5
    1
    用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是 http
    2
    用于创建集群外 HTTPS 连接的代理 URL。
    3
    要从代理中排除的目标域名、IP 地址或其他网络 CIDR 的逗号分隔列表。在域前面加上 . 以仅匹配子域。例如,.y.com 匹配 x.y.com,但不匹配 y.com。使用 * 绕过所有目的地的代理。您必须包含 vCenter 的 IP 地址以及用于其机器的 IP 范围。
    4
    如果提供,安装程序会在 openshift-config 命名空间中生成名为 user-ca-bundle 的配置映射,其包含代理 HTTPS 连接所需的一个或多个额外 CA 证书。然后,Cluster Network Operator 会创建 trusted-ca-bundle 配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS(RHCOS)信任捆绑包合并, Proxy 对象的 trustedCA 字段中也会引用此配置映射。additionalTrustBundle 字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。
    5
    可选:决定 Proxy 对象的配置以引用 trustedCA 字段中 user-ca-bundle 配置映射的策略。允许的值是 ProxyonlyAlways。仅在配置了 http/https 代理时,使用 Proxyonly 引用 user-ca-bundle 配置映射。使用 Always 始终引用 user-ca-bundle 配置映射。默认值为 Proxyonly
    注意

    安装程序不支持代理的 readinessEndpoints 字段。

    注意

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

    $ ./openshift-install wait-for install-complete --log-level debug
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

安装程序会创建一个名为 cluster 的集群范围代理,该代理 使用 提供的 install-config.yaml 文件中的代理设置。如果没有提供代理设置,仍然会创建一个 cluster Proxy 对象,但它会有一个空 spec

注意

只支持名为 clusterProxy 对象,且无法创建额外的代理。

3.4.4.3. 为 VMware vCenter 配置区域和区域

您可以修改默认安装配置文件,以便您可以将 OpenShift Container Platform 集群部署到在单个 VMware vCenter 中运行的多个 vSphere 数据中心。

之前版本的 OpenShift Container Platform 的默认 install-config.yaml 文件配置已弃用。您可以继续使用已弃用的默认配置,但 openshift-installer 会提示您显示在配置文件中已弃用字段的警告信息。

重要

这个示例使用 govc 命令。govc 命令是 VMware 提供的开源命令;它不是红帽提供的。红帽支持团队不维护 govc 命令。有关下载和安装 govc 的说明,请参阅 VMware 文档网站

先决条件

  • 您有一个现有的 install-config.yaml 安装配置文件。

    重要

    您必须为 OpenShift Container Platform 集群指定一个故障域,以便您可以为 VMware vCenter 服务器置备数据中心对象。如果您需要在不同的数据中心、集群、数据存储和其他组件中置备虚拟机节点,请考虑指定多个故障域。要启用区域和区域,您必须为 OpenShift Container Platform 集群定义多个故障域。

流程

  1. 输入以下 govc 命令行工具命令,以创建 openshift-regionopenshift-zone vCenter 标签类别:

    重要

    如果为 openshift-regionopenshift-zone vCenter 标签类别指定不同的名称,OpenShift Container Platform 集群的安装会失败。

    $ govc tags.category.create -d "OpenShift region" openshift-region
    $ govc tags.category.create -d "OpenShift zone" openshift-zone
  2. 要为您要部署集群的每个区域 vSphere 数据中心创建一个 region 标签,请在终端中输入以下命令:

    $ govc tags.create -c <region_tag_category> <region_tag>
  3. 要为您要部署集群的每个 vSphere 集群创建一个区标签,请输入以下命令:

    $ govc tags.create -c <zone_tag_category> <zone_tag>
  4. 输入以下命令将区域标签附加到每个 vCenter 数据中心对象:

    $ govc tags.attach -c <region_tag_category> <region_tag_1> /<data_center_1>
  5. 输入以下命令将区域标签附加到每个 vCenter 数据中心对象:

    $ govc tags.attach -c <zone_tag_category> <zone_tag_1> /<data_center_1>/host/vcs-mdcnc-workload-1
  6. 进入包含安装程序的目录,并根据您选择的安装要求初始化集群部署。

在 vSphere 数据中心中定义的多个数据中心的 install-config.yaml 文件示例

---
compute:
---
  vsphere:
      zones:
        - "<machine_pool_zone_1>"
        - "<machine_pool_zone_2>"
---
controlPlane:
---
vsphere:
      zones:
        - "<machine_pool_zone_1>"
        - "<machine_pool_zone_2>"
---
platform:
  vsphere:
    vcenters:
---
    datacenters:
      - <data_center_1_name>
      - <data_center_2_name>
    failureDomains:
    - name: <machine_pool_zone_1>
      region: <region_tag_1>
      zone: <zone_tag_1>
      server: <fully_qualified_domain_name>
      topology:
        datacenter: <data_center_1>
        computeCluster: "/<data_center_1>/host/<cluster1>"
        networks:
        - <VM_Network1_name>
        datastore: "/<data_center_1>/datastore/<datastore1>"
        resourcePool: "/<data_center_1>/host/<cluster1>/Resources/<resourcePool1>"
        folder: "/<data_center_1>/vm/<folder1>"
    - name: <machine_pool_zone_2>
      region: <region_tag_2>
      zone: <zone_tag_2>
      server: <fully_qualified_domain_name>
      topology:
        datacenter: <data_center_2>
        computeCluster: "/<data_center_2>/host/<cluster2>"
        networks:
        - <VM_Network2_name>
        datastore: "/<data_center_2>/datastore/<datastore2>"
        resourcePool: "/<data_center_2>/host/<cluster2>/Resources/<resourcePool2>"
        folder: "/<data_center_2>/vm/<folder2>"
---

3.4.5. 网络配置阶段

OpenShift Container Platform 安装前有两个阶段,您可以在其中自定义网络配置。

第 1 阶段

在创建清单文件前,您可以自定义 install-config.yaml 文件中的以下与网络相关的字段:

  • networking.networkType
  • networking.clusterNetwork
  • networking.serviceNetwork
  • networking.machineNetwork

    如需更多信息,请参阅"安装配置参数"。

    注意

    networking.machineNetwork 设置为与首选子网所在的无类别域间路由 (CIDR) 匹配。

    重要

    CIDR 范围 172.17.0.0/16libVirt 保留。对于集群中的网络,您无法使用与 172.17.0.0/16 CIDR 范围重叠的任何其他 CIDR 范围。

第 2 阶段
运行 openshift-install create 清单创建 清单文件后,您可以只使用您要修改的字段定义自定义 Cluster Network Operator 清单。您可以使用 清单指定高级网络配置。

在阶段 2 中,您无法覆盖 install-config.yaml 文件中在第 1 阶段指定的值。但是,您可以在第 2 阶段自定义网络插件。

3.4.6. 指定高级网络配置

您可以使用网络插件的高级网络配置将集群集成到现有网络环境中。

您只能在安装集群前指定高级网络配置。

重要

不支持通过修改安装程序创建的 OpenShift Container Platform 清单文件来自定义网络配置。支持应用您创建的清单文件,如以下流程中所示。

先决条件

  • 您已创建 install-config.yaml 文件并完成对其所做的任何修改。

流程

  1. 进入包含安装程序的目录并创建清单:

    $ ./openshift-install create manifests --dir <installation_directory> 1
    1
    <installation_directory> 指定包含集群的 install-config.yaml 文件的目录名称。
  2. <installation_directory>/manifests/ 目录中 为高级网络配置创建一个名为 cluster-network-03-config.yml 的 stub 清单文件:

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
  3. cluster-network-03-config.yml 文件中指定集群的高级网络配置,如下例所示:

    为 OVN-Kubernetes 网络供应商启用 IPsec

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      defaultNetwork:
        ovnKubernetesConfig:
          ipsecConfig:
            mode: Full

  4. 可选:备份 manifests/cluster-network-03-config.yml 文件。创建 Ignition 配置文件时,安装程序会使用 manifests/ 目录。
  5. 删除定义 control plane 机器的 Kubernetes 清单文件和计算 machineSets:

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

    由于您要自行创建和管理这些资源,因此不必初始化这些资源。

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

3.4.6.1. 为您的网络指定多个子网

在 vSphere 主机上安装 OpenShift Container Platform 集群前,您可以为网络实现指定多个子网,以便 vSphere 云控制器管理器 (CCM) 可以为给定网络情况选择适当的子网。vSphere 可以使用子网来管理集群中的 pod 和服务。

对于此配置,您必须在 vSphere CCM 配置中指定内部和外部无类别域间路由 (CIDR) 实现。每个 CIDR 实现都会列出 CCM 用来决定与来自内部和外部网络的流量交互的 IP 地址范围。

重要

在 vSphere CCM 配置中配置内部和外部 CIDR 实现可能会导致 vSphere CCM 选择错误的子网。这种情况会导致以下错误:

ERROR Bootstrap failed to complete: timed out waiting for the condition
ERROR Failed to wait for bootstrapping to complete. This error usually happens when there is a problem with control plane hosts that prevents the control plane operators from creating the control plane.

此配置可能会导致与 MachineSet 对象与单个子网关联的新节点变得不可用,因为每个新节点接收 node.cloudprovider.kubernetes.io/uninitialized 污点。这些情况可能会导致与 Kubernetes API 服务器的通信问题,这可能会导致集群安装失败。

先决条件

  • 为 OpenShift Container Platform 集群创建 Kubernetes 清单文件。

流程

  1. 从存储 OpenShift Container Platform 集群清单文件的目录中,打开 manifests/cluster-infrastructure-02-config.yml 清单文件。
  2. nodeNetworking 对象添加到文件,并为对象指定内部和外部网络子网 CIDR 实现。

    提示

    对于大多数网络情况,请考虑设置标准多子网配置。此配置要求您在 nodeNetworking.internal.networkSubnetCidrnodeNetworking.external.networkSubnetCidr 参数中设置相同的 IP 地址范围。

    配置了 cluster-infrastructure-02-config.yml 清单文件的示例

    apiVersion: config.openshift.io/v1
    kind: Infrastructure
    metadata:
      name: cluster
    spec:
      cloudConfig:
        key: config
        name: cloud-provider-config
      platformSpec:
        type: VSphere
        vsphere:
          failureDomains:
          - name: generated-failure-domain
          ...
           nodeNetworking:
             external:
               networkSubnetCidr:
               - <machine_network_cidr_ipv4>
               - <machine_network_cidr_ipv6>
             internal:
               networkSubnetCidr:
               - <machine_network_cidr_ipv4>
               - <machine_network_cidr_ipv6>
    # ...

3.4.7. Cluster Network Operator 配置

集群网络的配置作为 Cluster Network Operator(CNO)配置的一部分指定,并存储在名为 cluster 的自定义资源(CR)对象中。CR 指定 operator.openshift.io API 组中的 Network API 的字段。

CNO 配置在集群安装过程中从 Network.config.openshift.io API 组中的 Network API 继承以下字段:

clusterNetwork
从中分配 Pod IP 地址的 IP 地址池。
serviceNetwork
服务的 IP 地址池.
defaultNetwork.type
集群网络插件。OVNKubernetes 是安装期间唯一支持的插件。

您可以通过在名为 cluster 的 CNO 对象中设置 defaultNetwork 对象的字段来为集群指定集群网络插件配置。

3.4.7.1. Cluster Network Operator 配置对象

下表中描述了 Cluster Network Operator(CNO)的字段:

表 3.12. Cluster Network Operator 配置对象
字段类型描述

metadata.name

字符串

CNO 对象的名称。这个名称始终是 集群

spec.clusterNetwork

array

用于指定从哪些 IP 地址块分配 Pod IP 地址以及集群中每个节点的子网前缀长度的列表。例如:

spec:
  clusterNetwork:
  - cidr: 10.128.0.0/19
    hostPrefix: 23
  - cidr: 10.128.32.0/19
    hostPrefix: 23

spec.serviceNetwork

array

服务的 IP 地址块。OpenShift SDN 和 OVN-Kubernetes 网络插件只支持服务网络的一个 IP 地址块。例如:

spec:
  serviceNetwork:
  - 172.30.0.0/14

您只能在创建清单前在 install-config.yaml 文件中自定义此字段。该值在清单文件中是只读的。

spec.defaultNetwork

object

为集群网络配置网络插件。

spec.kubeProxyConfig

object

此对象的字段指定 kube-proxy 配置。如果使用 OVN-Kubernetes 集群网络供应商,则 kube-proxy 配置不会起作用。

defaultNetwork 对象配置

下表列出了 defaultNetwork 对象的值:

表 3.13. defaultNetwork 对象
字段类型描述

type

字符串

OVNKubernetes。Red Hat OpenShift Networking 网络插件在安装过程中被选择。此值在集群安装后无法更改。

注意

OpenShift Container Platform 默认使用 OVN-Kubernetes 网络插件。OpenShift SDN 不再作为新集群的安装选择提供。

ovnKubernetesConfig

object

此对象仅对 OVN-Kubernetes 网络插件有效。

配置 OVN-Kubernetes 网络插件

下表描述了 OVN-Kubernetes 网络插件的配置字段:

表 3.14. ovnKubernetesConfig object
字段类型描述

mtu

integer

Geneve(通用网络虚拟化封装)覆盖网络的最大传输单元(MTU)。这根据主网络接口的 MTU 自动探测。您通常不需要覆盖检测到的 MTU。

如果自动探测的值不是您期望的值,请确认节点上主网络接口上的 MTU 是否正确。您不能使用这个选项更改节点上主网络接口的 MTU 值。

如果集群中不同节点需要不同的 MTU 值,则必须将此值设置为 集群中的最低 MTU 值小 100。例如,如果集群中的某些节点的 MTU 为 9001,而某些节点的 MTU 为 1500,则必须将此值设置为 1400

genevePort

integer

用于所有 Geneve 数据包的端口。默认值为 6081。此值在集群安装后无法更改。

ipsecConfig

object

指定用于自定义 IPsec 配置的配置对象。

ipv4

object

为 IPv4 设置指定配置对象。

ipv6

object

为 IPv6 设置指定配置对象。

policyAuditConfig

object

指定用于自定义网络策略审计日志的配置对象。如果未设置,则使用默认的审计日志设置。

gatewayConfig

object

可选:指定一个配置对象来自定义如何将出口流量发送到节点网关。

注意

在迁移出口流量时,工作负载和服务流量会受到一定影响,直到 Cluster Network Operator (CNO) 成功推出更改。

表 3.15. ovnKubernetesConfig.ipv4 object
字段类型描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础架构与 100.88.0.0/16 IPv4 子网重叠,您可以指定不同的 IP 地址范围供 OVN-Kubernetes 使用。启用东西流量的分布式传输交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。必须足够大,以适应集群中的每个节点一个 IP 地址。

默认值为 100.88.0.0/16

internalJoinSubnet

字符串

如果您的现有网络基础架构与 100.64.0.0/16 IPv4 子网重叠,您可以指定不同的 IP 地址范围供 OVN-Kubernetes 使用。您必须确保 IP 地址范围没有与 OpenShift Container Platform 安装使用的任何其他子网重叠。IP 地址范围必须大于可添加到集群的最大节点数。例如,如果 clusterNetwork.cidr 值为 10.128.0.0/14,并且 clusterNetwork.hostPrefix 值为 /23,则最大节点数量为 2^(23-14)=512

默认值为 100.64.0.0/16

表 3.16. ovnKubernetesConfig.ipv6 object
字段类型描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础架构与 fd97::/64 IPv6 子网重叠,您可以指定不同的 IP 地址范围供 OVN-Kubernetes 使用。启用东西流量的分布式传输交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。必须足够大,以适应集群中的每个节点一个 IP 地址。

默认值为 fd97::/64

internalJoinSubnet

字符串

如果您的现有网络基础架构与 fd98::/64 IPv6 子网重叠,您可以指定不同的 IP 地址范围供 OVN-Kubernetes 使用。您必须确保 IP 地址范围没有与 OpenShift Container Platform 安装使用的任何其他子网重叠。IP 地址范围必须大于可添加到集群的最大节点数。

默认值为 fd98::/64

表 3.17. policyAuditConfig object
字段类型描述

rateLimit

整数

每个节点每秒生成一次的消息数量上限。默认值为每秒 20 条消息。

maxFileSize

整数

审计日志的最大大小,以字节为单位。默认值为 50000000 或 50 MB。

maxLogFiles

整数

保留的日志文件的最大数量。

目的地

字符串

以下附加审计日志目标之一:

libc
主机上的 journald 进程的 libc syslog() 函数。
UDP:<host>:<port>
一个 syslog 服务器。将 <host>:<port> 替换为 syslog 服务器的主机 和端口。
Unix:<file>
<file> 指定的 Unix 域套接字文件。
null
不要将审计日志发送到任何其他目标。

syslogFacility

字符串

syslog 工具,如 as kern,如 RFC5424 定义。默认值为 local0。

表 3.18. gatewayConfig object
字段类型描述

routingViaHost

布尔值

将此字段设置为 true,将来自 pod 的出口流量发送到主机网络堆栈。对于依赖于在内核路由表中手动配置路由的高级别安装和应用程序,您可能需要将出口流量路由到主机网络堆栈。默认情况下,出口流量在 OVN 中进行处理以退出集群,不受内核路由表中的特殊路由的影响。默认值为 false

此字段与 Open vSwitch 硬件卸载功能有交互。如果将此字段设置为 true,则不会获得卸载的性能优势,因为主机网络堆栈会处理出口流量。

ipForwarding

object

您可以使用 Network 资源中的 ipForwarding 规格来控制 OVN-Kubernetes 管理接口上所有流量的 IP 转发。指定 Restricted 只允许 Kubernetes 相关流量的 IP 转发。指定 Global 以允许转发所有 IP 流量。对于新安装,默认值为 Restricted。对于到 OpenShift Container Platform 4.14 或更高版本的更新,默认值为 Global

ipv4

object

可选:指定一个对象来为主机配置内部 OVN-Kubernetes 伪装地址,以服务 IPv4 地址的流量。

ipv6

object

可选:指定一个对象来为主机配置内部 OVN-Kubernetes 伪装地址,以服务 IPv6 地址的流量。

表 3.19. gatewayConfig.ipv4 对象
字段类型描述

internalMasqueradeSubnet

字符串

内部使用的伪装 IPv4 地址,以启用主机服务流量。主机配置了这些 IP 地址和共享网关网桥接口。默认值为 169.254.169.0/29

表 3.20. gatewayConfig.ipv6 对象
字段类型描述

internalMasqueradeSubnet

字符串

内部使用的伪装 IPv6 地址,以启用主机服务流量。主机配置了这些 IP 地址和共享网关网桥接口。默认值为 fd69::/125

表 3.21. ipsecConfig 对象
字段类型描述

模式

字符串

指定 IPsec 实现的行为。必须是以下值之一:

  • Disabled: 在集群节点上不启用 IPsec。
  • External :对于带有外部主机的网络流量,启用 IPsec。
  • Full: IPsec 为带有外部主机的 pod 流量和网络流量启用 IPsec。

启用 IPSec 的 OVN-Kubernetes 配置示例

defaultNetwork:
  type: OVNKubernetes
  ovnKubernetesConfig:
    mtu: 1400
    genevePort: 6081
      ipsecConfig:
        mode: Full

重要

使用 OVNKubernetes 可能会导致 IBM Power® 上的堆栈耗尽问题。

kubeProxyConfig 对象配置(仅限 OpenShiftSDN 容器网络接口)

kubeProxyConfig 对象的值在下表中定义:

表 3.22. kubeProxyConfig object
字段类型描述

iptablesSyncPeriod

字符串

iptables 规则的刷新周期。默认值为 30s。有效的后缀包括 smh,具体参见 Go 时间 文档。

注意

由于 OpenShift Container Platform 4.3 及更高版本中引进了性能改进,不再需要调整 iptablesSyncPeriod 参数。

proxyArguments.iptables-min-sync-period

array

刷新 iptables 规则前的最短持续时间。此字段确保刷新的频率不会过于频繁。有效的后缀包括 smh,具体参见 Go time 软件包。默认值为:

kubeProxyConfig:
  proxyArguments:
    iptables-min-sync-period:
    - 0s

3.4.8. 创建 Ignition 配置文件

由于您必须手动启动集群机器,因此您必须生成 Ignition 配置文件,集群需要这些配置文件来创建其机器。

重要
  • 安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的 node-bootstrapper 证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

先决条件

  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。

流程

  • 获取 Ignition 配置文件:

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

    如果创建了 install-config.yaml 文件,请指定包含该文件的目录。否则,指定一个空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。

    该目录中会生成以下文件:

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

3.4.9. 提取基础架构名称

Ignition 配置文件包含一个唯一集群标识符,您可以使用它在 VMware vSphere 中唯一地标识您的集群。如果计划使用集群标识符作为虚拟机文件夹的名称,则必须提取它。

先决条件

  • 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 已为集群生成 Ignition 配置文件。
  • 已安装 jq 软件包。

流程

  • 要从 Ignition 配置文件元数据中提取和查看基础架构名称,请运行以下命令:

    $ jq -r .infraID <installation_directory>/metadata.json 1
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。

    输出示例

    openshift-vw9j6 1

    1
    此命令的输出是您的集群名称和随机字符串。

3.4.10. 安装 RHCOS 并启动 OpenShift Container Platform bootstrap 过程

要在 VMware vSphere 上的用户置备的基础架构上安装 OpenShift Container Platform,您必须在 vSphere 主机上安装 Red Hat Enterprise Linux CoreOS(RHCOS)。安装 RHCOS 时,您必须为您要安装的机器类型提供 OpenShift Container Platform 安装程序生成的 Ignition 配置文件。如果您配置了适当的网络、DNS 和负载均衡基础架构,OpenShift Container Platform bootstrap 过程会在 RHCOS 机器重启后自动启动。

先决条件

  • 已获取集群的 Ignition 配置文件。
  • 具有 HTTP 服务器的访问权限,以便您可从计算机进行访问,并且您创建的机器也可访问此服务器。
  • 您已创建了 vSphere 集群

流程

  1. 将名为 <installation_directory>/bootstrap.ign 的 bootstrap Ignition 配置文件上传到 HTTP 服务器。注意此文件的 URL。
  2. 将 bootstrap 节点的以下辅助 Ignition 配置文件保存到计算机中,存为 <installation_directory>/merge-bootstrap.ign

    {
      "ignition": {
        "config": {
          "merge": [
            {
              "source": "<bootstrap_ignition_config_url>", 1
              "verification": {}
            }
          ]
        },
        "timeouts": {},
        "version": "3.2.0"
      },
      "networkd": {},
      "passwd": {},
      "storage": {},
      "systemd": {}
    }
    1
    指定您托管的 bootstrap Ignition 配置文件的 URL。

    为 bootstrap 机器创建虚拟机(VM)时,您要使用此 Ignition 配置文件。

  3. 找到安装程序创建的以下 Ignition 配置文件:

    • <installation_directory>/master.ign
    • <installation_directory>/worker.ign
    • <installation_directory>/merge-bootstrap.ign
  4. 将 Ignition 配置文件转换为 Base64 编码。在此流程中,您必须将这些文件添加到虚拟机中的额外配置参数 guestinfo.ignition.config.data 中。

    例如,如果使用 Linux 操作系统,您可以使用 base64 命令对文件进行编码。

    $ base64 -w0 <installation_directory>/master.ign > <installation_directory>/master.64
    $ base64 -w0 <installation_directory>/worker.ign > <installation_directory>/worker.64
    $ base64 -w0 <installation_directory>/merge-bootstrap.ign > <installation_directory>/merge-bootstrap.64
    重要

    如果您计划在安装完成后在集群中添加更多计算机器,请不要删除这些文件。

  5. 获取 RHCOS OVA 镜像。镜像位于 RHCOS 镜像镜像页面

    重要

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

    文件名包含 OpenShift Container Platform 版本号,格式为 rhcos-vmware.<architecture>.ova

  6. 在 vSphere 客户端中,在数据中心中创建一个文件夹来存储虚拟机。

    1. 单击 VMs and Templates 视图。
    2. 右键点您的数据中心的名称。
    3. 点击 New Folder New VM and Template Folder
    4. 在显示的窗口中,输入文件夹名称。如果您没有在 install-config.yaml 文件中指定现有文件夹,请创建一个名称与基础架构 ID 相同的文件夹。您可以使用这个文件夹名称,因此 vCenter 会在适当的位置为 Workspace 配置动态置备存储。
  7. 在 vSphere 客户端中,为 OVA 镜像创建一个模板,然后根据需要克隆模板。

    注意

    在以下步骤中,您将创建模板,然后克隆所有集群机器的模板。然后,您在置备虚拟机时为该克隆的机器类型提供 Ignition 配置文件的位置。

    1. Hosts and Clusters 选项卡中,右键点击您的集群名称并选择 Deploy OVF Template
    2. Select an OVF 选项卡中,指定您下载的 RHCOS OVA 文件的名称。
    3. Select a name and folder 选项卡中,为您的模板设置 虚拟机名称,如 Template-RHCOS。点击 vSphere 集群的名称并选择您在上一步中创建的文件夹。
    4. Select a compute resource 选项卡中,点击 vSphere 集群的名称。
    5. Select storage 选项卡中,配置虚拟机的存储选项。

      • 根据您的存储首选项,选择 Thin Provision 或 Thick Provision
      • 选择您在 install-config.yaml 文件中指定的数据存储。
      • 如果要加密虚拟机,请选择 Encrypt this virtual machine。如需更多信息,请参阅标题为"加密虚拟机的要求"的部分。
    6. Select network 选项卡中,指定您为集群配置的网络(如果可用)。
    7. 在创建 OVF 模板时,不要在 Customize template 选项卡上指定值,也不会进一步配置模板。

      重要

      不要启动原始虚拟机模板。VM 模板必须保持关闭,必须为新的 RHCOS 机器克隆。启动虚拟机模板会将虚拟机模板配置为平台上的虚拟机,这样可防止它被用作计算机器集可应用配置的模板。

  8. 可选: 如果需要,更新 VM 模板中配置的虚拟硬件版本。如需更多信息 ,请参阅 VMware 文档中的将虚拟机升级到最新硬件版本

    重要

    如有必要,建议您在从虚拟机创建虚拟机前将虚拟机模板的硬件版本更新为版本 15。在 vSphere 上运行的集群节点使用硬件版本 13 现已弃用。如果您导入的模板默认为硬件版本 13,您必须在将 VM 模板升级到硬件版本 15 前确保 ESXi 主机为 6.7U3 或更高版本。如果您的 vSphere 版本小于 6.7U3,您可以跳过此升级步骤;但是,计划将来的 OpenShift Container Platform 版本删除对小于 6.7U3 的硬件版本 13 和 vSphere 版本的支持。

  9. 部署模板后,为集群中的机器部署虚拟机。

    1. 右键点击模板名称,再点击 Clone Clone to Virtual Machine
    2. Select a name and folder 选项卡中,指定虚拟机的名称。您可以在名称中包含机器类型,如 control-plane-0 或 compute-1

      注意

      确保 vSphere 安装中的所有虚拟机名称都是唯一的。

    3. Select a name and folder 选项卡中,选择您为集群创建的文件夹名称。
    4. Select a compute resource 选项卡中,选择数据中心中的主机的名称。
    5. Select clone options 选项卡中,选择 Customize this virtual machine's hardware
    6. Customize hardware 选项卡上,点 Advanced Parameters

      重要

      以下配置建议仅用于演示目的。作为集群管理员,您必须根据集群上的资源需求来配置资源。为了更好地管理集群资源,请考虑从集群的 root 资源池创建资源池。

      • 可选:覆盖 vSphere 中的默认 DHCP 网络。启用静态 IP 网络:

        • 设置静态 IP 配置:

          示例命令

          $ export IPCFG="ip=<ip>::<gateway>:<netmask>:<hostname>:<iface>:none nameserver=srv1 [nameserver=srv2 [nameserver=srv3 [...]]]"

          示例命令

          $ export IPCFG="ip=192.168.100.101::192.168.100.254:255.255.255.0:::none nameserver=8.8.8.8"

        • 在从 vSphere 中的 OVA 引导虚拟机前,设置 guestinfo.afterburn.initrd.network-kargs 属性:

          示例命令

          $ govc vm.change -vm "<vm_name>" -e "guestinfo.afterburn.initrd.network-kargs=${IPCFG}"

      • 通过在 AttributeValues 字段中指定数据来添加以下配置参数名称和值。确保为您创建的每个参数选择 Add 按钮。

        • guestinfo.ignition.config.data :找到您在此流程中创建的 base-64 编码文件,并粘贴此机器类型的 base64 编码 Ignition 配置文件的内容。
        • guestinfo.ignition.config.data.encoding :指定 base64
        • disk.EnableUUID :指定 TRUE
        • stealclock.enable :如果没有定义此参数,请添加它并指定 TRUE
        • 从集群的 root 资源池创建子资源池。执行此子资源池中的资源分配。
    7. Customize hardware 选项卡的 Virtual Hardware 面板中,根据需要修改指定的值。确保 RAM、CPU 和磁盘存储的数量满足机器类型的最低要求。
    8. 完成剩余的配置步骤。点 Finish 按钮,您已完成克隆操作。
    9. Virtual Machines 选项卡中,右键点您的虚拟机,然后选择 Power Power On
    10. 检查控制台输出,以验证 Ignition 是否运行。

      示例命令

      Ignition: ran on 2022/03/14 14:48:33 UTC (this boot)
      Ignition: user-provided config was applied

后续步骤

  • 对每台机器执行前面的步骤,为集群创建其余机器。

    重要

    此时您必须创建 bootstrap 和 control plane 机器。由于计算机器上已默认部署了一些 Pod,因此还要在安装集群前至少创建两台计算机器。

3.4.11. 将更多计算机器添加到 vSphere 中的集群

您可以将更多计算机器添加到 VMware vSphere 上的用户置备的 OpenShift Container Platform 集群中。

在 OpenShift Container Platform 集群中部署 vSphere 模板后,您可以为该集群中的机器部署虚拟机(VM)。

先决条件

  • 获取计算机器的 base64 编码 Ignition 文件。
  • 您可以访问您为集群创建的 vSphere 模板。

流程

  1. 右键点击模板的名称,再点击 Clone Clone to Virtual Machine
  2. Select a name and folder 选项卡中,指定虚拟机的名称。您可以在名称中包含机器类型,如 compute-1

    注意

    确保 vSphere 安装中的所有虚拟机名称都是唯一的。

  3. Select a name and folder 选项卡中,选择您为集群创建的文件夹名称。
  4. Select a compute resource 选项卡中,选择数据中心中的主机的名称。
  5. Select storage 选项卡中,为您的配置和磁盘文件选择存储。
  6. Select clone options 选项卡中,选择 Customize this virtual machine's hardware
  7. Customize hardware 选项卡上,点 Advanced Parameters

    • 通过在 AttributeValues 字段中指定数据来添加以下配置参数名称和值。确保为您创建的每个参数选择 Add 按钮。

      • guestinfo.ignition.config.data :粘贴此机器类型的 base64 编码计算 Ignition 配置文件的内容。
      • guestinfo.ignition.config.data.encoding :指定 base64
      • disk.EnableUUID :指定 TRUE
  8. Customize hardware 选项卡的 Virtual Hardware 面板中,根据需要修改指定的值。确保 RAM、CPU 和磁盘存储的数量满足机器类型的最低要求。如果存在多个网络,请选择 Add New Device > Network Adapter,然后在 New Network 菜单项提供的字段中输入您的网络信息。
  9. 完成剩余的配置步骤。点 Finish 按钮,您已完成克隆操作。
  10. Virtual Machines 选项卡中,右键点您的虚拟机,然后选择 Power Power On

后续步骤

  • 继续为集群创建更多计算机器。

3.4.12. 磁盘分区

在大多数情况下,数据分区最初是由安装 RHCOS 而不是安装另一个操作系统来创建的。在这种情况下,OpenShift Container Platform 安装程序被允许配置磁盘分区。

但是,在安装 OpenShift Container Platform 节点时,在两种情况下您可能需要覆盖默认分区:

  • 创建单独的分区: 要在空磁盘上进行 greenfield 安装,您可能需要在分区中添加单独的存储。这正式支持生成 /var 或 /var 的子目录 /var/lib/etcd (独立分区),但不支持两者。

    重要

    对于大于 100GB 的磁盘大小,特别是磁盘大小大于 1TB,请创建一个独立的 /var 分区。如需更多信息,请参阅"创建独立 /var 分区"和 红帽知识库文章

    重要

    Kubernetes 仅支持两个文件系统分区。如果您在原始配置中添加多个分区,Kubernetes 无法监控所有这些分区。

  • 保留现有分区:对于 brownfield 安装,您要在现有节点上重新安装 OpenShift Container Platform,并希望保留从之前的操作系统中安装的数据分区,对于 coreos-installer 来说,引导选项和选项都允许您保留现有数据分区。

创建独立 /var 分区

通常,OpenShift Container Platform 的磁盘分区应该保留给安装程序。然而,在有些情况下您可能需要在文件系统的一部分中创建独立分区。

OpenShift Container Platform 支持添加单个分区来将存储附加到 /var 分区或 /var 的子目录中。例如:

  • /var/lib/containers :保存随着系统中添加更多镜像和容器而增长的容器相关内容。
  • /var/lib/etcd :保存您可能希望独立保留的数据,比如 etcd 存储的性能优化。
  • /var :保存您可能希望独立保留的数据,以满足审计等目的。

    重要

    对于大于 100GB 的磁盘大小,特别是磁盘大小大于 1TB,请创建一个独立的 /var 分区。

通过单独存储 /var 目录的内容,可以更轻松地根据需要为区域扩展存储,并在以后重新安装 OpenShift Container Platform,并保持该数据的完整性。使用这个方法,您不必再次拉取所有容器,在更新系统时也不必复制大量日志文件。

因为 /var 在进行一个全新的 Red Hat Enterprise Linux CoreOS(RHCOS)安装前必需存在,所以这个流程会在 OpenShift Container Platform 安装过程的 openshift-install 准备阶段插入一个创建的机器配置清单的机器配置来设置独立的 /var 分区。

流程

  1. 创建存放 OpenShift Container Platform 安装文件的目录:

    $ mkdir $HOME/clusterconfig
  2. 运行 openshift-install,以在 manifestopenshift 子目录中创建一组文件。在系统提示时回答系统问题:

    $ openshift-install create manifests --dir $HOME/clusterconfig
    ? SSH Public Key ...
    $ ls $HOME/clusterconfig/openshift/
    99_kubeadmin-password-secret.yaml
    99_openshift-cluster-api_master-machines-0.yaml
    99_openshift-cluster-api_master-machines-1.yaml
    99_openshift-cluster-api_master-machines-2.yaml
    ...
  3. 创建用于配置额外分区的 Butane 配置。例如,将文件命名为 $HOME/clusterconfig/98-var-partition.bu,将磁盘设备名称改为 worker 系统上存储设备的名称,并根据情况设置存储大小。这个示例将 /var 目录放在一个单独的分区中:

    variant: openshift
    version: 4.16.0
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 98-var-partition
    storage:
      disks:
      - device: /dev/disk/by-id/<device_name> 1
        partitions:
        - label: var
          start_mib: <partition_start_offset> 2
          size_mib: <partition_size> 3
          number: 5
      filesystems:
        - device: /dev/disk/by-partlabel/var
          path: /var
          format: xfs
          mount_options: [defaults, prjquota] 4
          with_mount_unit: true
    1
    要分区的磁盘的存储设备名称。
    2
    当在引导磁盘中添加数据分区时,推荐最少使用 25000 MB。root 文件系统会自动调整大小以填充所有可用空间(最多到指定的偏移值)。如果没有指定值,或者指定的值小于推荐的最小值,则生成的 root 文件系统会太小,而在以后进行的 RHCOS 重新安装可能会覆盖数据分区的开始部分。
    3
    以兆字节为单位的数据分区大小。
    4
    对于用于容器存储的文件系统,必须启用 prjquota 挂载选项。
    注意

    当创建单独的 /var 分区时,如果不同的实例类型没有相同的设备名称,则无法为 worker 节点使用不同的实例类型。

  4. 从 Butane 配置创建一个清单,并将它保存到 clusterconfig/openshift 目录中。例如,运行以下命令:

    $ butane $HOME/clusterconfig/98-var-partition.bu -o $HOME/clusterconfig/openshift/98-var-partition.yaml
  5. 再次运行 openshift-install,从 manifestopenshift 子目录中的一组文件创建 Ignition 配置:

    $ openshift-install create ignition-configs --dir $HOME/clusterconfig
    $ ls $HOME/clusterconfig/
    auth  bootstrap.ign  master.ign  metadata.json  worker.ign

现在,您可以使用 Ignition 配置文件作为 vSphere 安装程序的输入来安装 Red Hat Enterprise Linux CoreOS(RHCOS)系统。

3.4.13. 等待 bootstrap 过程完成

OpenShift Container Platform bootstrap 过程在集群节点首次引导到安装到磁盘的持久 RHCOS 环境后开始。通过 Ignition 配置文件提供的配置信息用于初始化 bootstrap 过程并在机器上安装 OpenShift Container Platform。您必须等待 bootstrap 过程完成。

先决条件

  • 已为集群创建 Ignition 配置文件。
  • 您已配置了适当的网络、DNS 和负载平衡基础架构。
  • 已获得安装程序,并为集群生成 Ignition 配置文件。
  • 已在集群机器上安装 RHCOS,并提供 OpenShift Container Platform 安装程序生成的 Ignition 配置文件。
  • 您的机器可以直接访问互联网,或者有 HTTP 或 HTTPS 代理可用。

流程

  1. 监控 bootstrap 过程:

    $ ./openshift-install --dir <installation_directory> wait-for bootstrap-complete \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 info

    输出示例

    INFO Waiting up to 30m0s for the Kubernetes API at https://api.test.example.com:6443...
    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

    当 Kubernetes API 服务器提示已在 control plane 机器上引导它时,该命令会成功。

  2. bootstrap 过程完成后,从负载均衡器中删除 bootstrap 机器。

    重要

    此时您必须从负载均衡器中删除 bootstrap 机器。您还可以删除或重新格式化 bootstrap 机器本身。

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

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

当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(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 状态

其他信息

3.4.15.1. 初始 Operator 配置

在 control plane 初始化后,您必须立即配置一些 Operator,以便它们都可用。

先决条件

  • 您的 control plane 已初始化。

流程

  1. 观察集群组件上线:

    $ watch -n5 oc get clusteroperators

    输出示例

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                             4.16.0    True        False         False      19m
    baremetal                                  4.16.0    True        False         False      37m
    cloud-credential                           4.16.0    True        False         False      40m
    cluster-autoscaler                         4.16.0    True        False         False      37m
    config-operator                            4.16.0    True        False         False      38m
    console                                    4.16.0    True        False         False      26m
    csi-snapshot-controller                    4.16.0    True        False         False      37m
    dns                                        4.16.0    True        False         False      37m
    etcd                                       4.16.0    True        False         False      36m
    image-registry                             4.16.0    True        False         False      31m
    ingress                                    4.16.0    True        False         False      30m
    insights                                   4.16.0    True        False         False      31m
    kube-apiserver                             4.16.0    True        False         False      26m
    kube-controller-manager                    4.16.0    True        False         False      36m
    kube-scheduler                             4.16.0    True        False         False      36m
    kube-storage-version-migrator              4.16.0    True        False         False      37m
    machine-api                                4.16.0    True        False         False      29m
    machine-approver                           4.16.0    True        False         False      37m
    machine-config                             4.16.0    True        False         False      36m
    marketplace                                4.16.0    True        False         False      37m
    monitoring                                 4.16.0    True        False         False      29m
    network                                    4.16.0    True        False         False      38m
    node-tuning                                4.16.0    True        False         False      37m
    openshift-apiserver                        4.16.0    True        False         False      32m
    openshift-controller-manager               4.16.0    True        False         False      30m
    openshift-samples                          4.16.0    True        False         False      32m
    operator-lifecycle-manager                 4.16.0    True        False         False      37m
    operator-lifecycle-manager-catalog         4.16.0    True        False         False      37m
    operator-lifecycle-manager-packageserver   4.16.0    True        False         False      32m
    service-ca                                 4.16.0    True        False         False      38m
    storage                                    4.16.0    True        False         False      37m

  2. 配置不可用的 Operator。

3.4.15.2. 安装过程中删除的镜像 registry

在不提供可共享对象存储的平台上,OpenShift Image Registry Operator bootstraps 本身为 Removed。这允许 openshift-installer 在这些平台类型上完成安装。

安装后,您必须编辑 Image Registry Operator 配置,将 managementStateRemoved 切换到 Managed。完成此操作后,您必须配置存储。

3.4.15.3. 镜像 registry 存储配置

对于不提供默认存储的平台,Image Registry Operator 最初不可用。安装后,您必须将 registry 配置为使用存储,以便 Registry Operator 可用。

显示配置生产集群所需的持久性卷的说明。如果适用,显示有关将空目录配置为存储位置的说明,这仅适用于非生产集群。

提供了在升级过程中使用 Recreate rollout 策略来允许镜像 registry 使用块存储类型的说明。

3.4.15.3.1. 为 VMware vSphere 配置块 registry 存储

要允许镜像 registry 在作为集群管理员升级过程中使用块存储类型,如 vSphere Virtual Machine Disk(VMDK),您可以使用 Recreate rollout 策略

重要

支持块存储卷,但不建议在生产环境中用于镜像 registry。在块存储上配置 registry 的安装不具有高可用性,因为 registry 无法具有多个副本。

流程

  1. 输入以下命令将镜像 registry 存储设置为块存储类型,对 registry 进行补丁,使其使用 Recreate rollout 策略,并只使用一个副本运行:

    $ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
  2. 为块存储设备置备 PV,并为该卷创建 PVC。请求的块卷使用 ReadWriteOnce(RWO)访问模式。

    1. 创建包含以下内容的 pvc.yaml 文件以定义 VMware vSphere PersistentVolumeClaim 对象:

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: image-registry-storage 1
        namespace: openshift-image-registry 2
      spec:
        accessModes:
        - ReadWriteOnce 3
        resources:
          requests:
            storage: 100Gi 4
      1
      代表 PersistentVolumeClaim 对象的唯一名称。
      2
      PersistentVolumeClaim 对象的命名空间,即 openshift-image-registry
      3
      持久性卷声明的访问模式。使用 ReadWriteOnce 时,单个节点可以通过读写权限挂载该卷。
      4
      持久性卷声明的大小。
    2. 输入以下命令从文件创建 PersistentVolumeClaim 对象:

      $ oc create -f pvc.yaml -n openshift-image-registry
  3. 输入以下命令编辑 registry 配置,使其引用正确的 PVC:

    $ oc edit config.imageregistry.operator.openshift.io -o yaml

    输出示例

    storage:
      pvc:
        claim: 1

    1
    通过创建自定义 PVC,您可以将 claim 字段留空,以便默认自动创建 image-registry-storage PVC。

有关配置 registry 存储以便引用正确的 PVC 的说明,请参阅 为 vSphere 配置 registry

3.4.16. 在用户置备的基础架构上完成安装

完成 Operator 配置后,可以在您提供的基础架构上完成集群安装。

先决条件

  • 您的 control plane 已初始化。
  • 已完成初始 Operator 配置。

流程

  1. 使用以下命令确认所有集群组件都在线:

    $ watch -n5 oc get clusteroperators

    输出示例

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                             4.16.0    True        False         False      19m
    baremetal                                  4.16.0    True        False         False      37m
    cloud-credential                           4.16.0    True        False         False      40m
    cluster-autoscaler                         4.16.0    True        False         False      37m
    config-operator                            4.16.0    True        False         False      38m
    console                                    4.16.0    True        False         False      26m
    csi-snapshot-controller                    4.16.0    True        False         False      37m
    dns                                        4.16.0    True        False         False      37m
    etcd                                       4.16.0    True        False         False      36m
    image-registry                             4.16.0    True        False         False      31m
    ingress                                    4.16.0    True        False         False      30m
    insights                                   4.16.0    True        False         False      31m
    kube-apiserver                             4.16.0    True        False         False      26m
    kube-controller-manager                    4.16.0    True        False         False      36m
    kube-scheduler                             4.16.0    True        False         False      36m
    kube-storage-version-migrator              4.16.0    True        False         False      37m
    machine-api                                4.16.0    True        False         False      29m
    machine-approver                           4.16.0    True        False         False      37m
    machine-config                             4.16.0    True        False         False      36m
    marketplace                                4.16.0    True        False         False      37m
    monitoring                                 4.16.0    True        False         False      29m
    network                                    4.16.0    True        False         False      38m
    node-tuning                                4.16.0    True        False         False      37m
    openshift-apiserver                        4.16.0    True        False         False      32m
    openshift-controller-manager               4.16.0    True        False         False      30m
    openshift-samples                          4.16.0    True        False         False      32m
    operator-lifecycle-manager                 4.16.0    True        False         False      37m
    operator-lifecycle-manager-catalog         4.16.0    True        False         False      37m
    operator-lifecycle-manager-packageserver   4.16.0    True        False         False      32m
    service-ca                                 4.16.0    True        False         False      38m
    storage                                    4.16.0    True        False         False      37m

    另外,当所有集群都可用时,以下命令会通知您。它还检索并显示凭证:

    $ ./openshift-install --dir <installation_directory> wait-for install-complete 1
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。

    输出示例

    INFO Waiting up to 30m0s for the cluster to initialize...

    Cluster Version Operator 完成从 Kubernetes API 服务器部署 OpenShift Container Platform 集群时,该命令会成功。

    重要
    • 安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的 node-bootstrapper 证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
    • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。
  2. 确认 Kubernetes API 服务器正在与 pod 通信。

    1. 要查看所有 pod 的列表,请使用以下命令:

      $ oc get pods --all-namespaces

      输出示例

      NAMESPACE                         NAME                                            READY   STATUS      RESTARTS   AGE
      openshift-apiserver-operator      openshift-apiserver-operator-85cb746d55-zqhs8   1/1     Running     1          9m
      openshift-apiserver               apiserver-67b9g                                 1/1     Running     0          3m
      openshift-apiserver               apiserver-ljcmx                                 1/1     Running     0          1m
      openshift-apiserver               apiserver-z25h4                                 1/1     Running     0          2m
      openshift-authentication-operator authentication-operator-69d5d8bf84-vh2n8        1/1     Running     0          5m
      ...

    2. 使用以下命令,查看上一命令的输出中所列 pod 的日志:

      $ oc logs <pod_name> -n <namespace> 1
      1
      指定 pod 名称和命名空间,如上一命令的输出中所示。

      如果 pod 日志显示,Kubernetes API 服务器可以与集群机器通信。

  3. 对于使用光纤通道协议(FCP)的安装,还需要额外的步骤才能启用多路径。不要在安装过程中启用多路径。

    如需更多信息,请参阅 安装后机器配置任务 文档中的"使用 RHCOS 上使用内核参数启用多路径"。

您可以按照将计算机器 添加到 vSphere 的内容在集群安装后添加额外的计算机器

3.4.17. 为 control plane 节点配置 vSphere DRS 反关联性规则

可将 vSphere 分布式资源调度程序 DRS) 关联性规则配置为支持 OpenShift Container Platform Control Plane 节点的高可用性。反关联性规则确保 OpenShift Container Platform Control Plane 节点的 vSphere 虚拟机没有调度到同一 vSphere 主机。

重要
  • 以下信息只适用于计算 DRS,不适用于存储 DRS。
  • govc 命令是 VMware 提供的开源命令;它不是红帽提供的。红帽不支持 govc 命令。
  • 有关下载和安装 govc 的说明,请参阅 VMware 文档网站。

运行以下命令来创建反关联性规则:

示例命令

$ govc cluster.rule.create \
  -name openshift4-control-plane-group \
  -dc MyDatacenter -cluster MyCluster \
  -enable \
  -anti-affinity master-0 master-1 master-2

创建规则后,您的 control plane 节点由 vSphere 自动迁移,以便它们不会在同一主机上运行。当 vSphere 协调新规则时,这可能需要一些时间。以下流程中会显示成功的命令完成。

注意

迁移会自动进行,并可能导致 OpenShift API 中断或延迟,直到迁移完成为止。

当 control plane 虚拟机名称发生变化或迁移到新的 vSphere 集群时,需要手动更新 vSphere DRS 反关联性规则。

流程

  1. 运行以下命令来删除任何现有的 DRS 反关联性规则:

    $ govc cluster.rule.remove \
      -name openshift4-control-plane-group \
      -dc MyDatacenter -cluster MyCluster

    输出示例

    [13-10-22 09:33:24] Reconfigure /MyDatacenter/host/MyCluster...OK

  2. 运行以下命令,使用更新的名称再次创建规则:

    $ govc cluster.rule.create \
      -name openshift4-control-plane-group \
      -dc MyDatacenter -cluster MyOtherCluster \
      -enable \
      -anti-affinity master-0 master-1 master-2

3.4.18. OpenShift Container Platform 的 Telemetry 访问

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

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

其他资源

3.4.19. 后续步骤

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.