×

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

对多个 vCenter 的支持仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能支持范围的更多信息,请参阅 技术预览功能支持范围

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

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

先决条件

OpenShift Container Platform 的互联网访问

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

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

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

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

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

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

VMware vSphere区域和区域启用

您可以将OpenShift Container Platform集群部署到多个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位置。

  • 区域:指定vCenter数据中心。您可以使用openshift-region标签类别中的标签来定义区域。

  • 区域:指定vCenter集群。您可以使用openshift-zone标签类别中的标签来定义区域。

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

您必须为每个vCenter数据中心(代表一个区域)创建一个vCenter标签。此外,您必须为在数据中心中运行的每个集群(代表一个区域)创建一个vCenter标签。创建标签后,必须将每个标签附加到它们各自的数据中心和集群。

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

数据中心(区域) 集群(区域) 标签

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

手动创建安装配置文件

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

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

先决条件
  • 您在本地机器上有一个 SSH 公钥,需要提供给安装程序。该密钥将用于对集群节点进行 SSH 身份验证,用于调试和灾难恢复。

  • 您已获得 OpenShift Container Platform 安装程序和集群的拉取密钥。

步骤
  1. 创建一个安装目录来存储所需的安装资源

    $ mkdir <installation_directory>

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

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

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

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

    install-config.yaml文件在安装过程的下一步中使用。您现在必须对其进行备份。

附加资源

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

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

如果必须在多个数据存储中指定虚拟机,请使用datastore对象在集群的install-config.yaml配置文件中指定故障域。有关更多信息,请参阅“VMware vSphere 区域和区域启用”。

9 可选:对于安装程序配置的基础设施,安装程序创建虚拟机的现有资源池的绝对路径,例如,/<数据中心名称>/host/<集群名称>/Resources/<资源池名称>/<可选嵌套资源池名称>。如果未指定值,则资源将安装在集群的根目录/example_data_center/host/example_cluster/Resources中。
10 可选:对于安装程序配置的基础设施,现有文件夹的绝对路径,安装程序将在其中创建虚拟机,例如,/<数据中心名称>/vm/<文件夹名称>/<子文件夹名称>。如果不提供此值,安装程序将在数据中心虚拟机文件夹中创建一个顶级文件夹,其名称为基础设施 ID。如果您正在为集群提供基础设施,并且不想使用名为thin的默认StorageClass对象,则可以从install-config.yaml文件中省略folder参数。
11 与 vSphere 用户关联的密码。
12 vCenter 服务器的完全限定主机名或 IP 地址。

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

13 vSphere 磁盘配置方法。
14 是否启用或禁用 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 核心组件仅在 x86_64、ppc64le 和 s390x 架构上使用已提交给 NIST 用于 FIPS 140-2/140-3 验证的 RHEL 加密库。

15 您从OpenShift 集群管理器获取的拉取密钥。此拉取密钥允许您对包含的授权机构提供的服务进行身份验证,包括 Quay.io(它提供 OpenShift Container Platform 组件的容器镜像)。
16 Red Hat Enterprise Linux CoreOS (RHCOS) 中core用户的默认 SSH 密钥的公钥部分。

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

生产环境可以拒绝直接访问互联网,而是提供 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 如果提供,安装程序将生成一个名为user-ca-bundle的 config map,位于openshift-config命名空间中,其中包含代理 HTTPS 连接所需的一个或多个附加 CA 证书。然后,集群网络操作员创建一个trusted-ca-bundle config map,将这些内容与 Red Hat Enterprise Linux CoreOS (RHCOS) 信任捆绑包合并,并且此 config map 在Proxy对象的trustedCA字段中引用。除非代理的身份证书由 RHCOS 信任捆绑包中的授权机构签署,否则需要additionalTrustBundle字段。
    5 可选:确定Proxy对象的配置以在trustedCA字段中引用user-ca-bundle config map 的策略。允许的值为ProxyonlyAlways。使用Proxyonly仅在配置http/https代理时引用user-ca-bundle config map。使用Always始终引用user-ca-bundle config map。默认值为Proxyonly

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

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

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

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

仅支持名为clusterProxy对象,并且无法创建其他代理。

为 VMware vCenter 配置区域和区域

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

先前 OpenShift Container Platform 版本中默认的 install-config.yaml 文件配置已弃用。您可以继续使用已弃用的默认配置,但是 openshift-installer 将提示您一条警告消息,指出配置文件中使用了已弃用的字段。

此示例使用 govc 命令。govc 命令是一个来自 VMware 的开源命令;Red Hat 不提供此命令。Red Hat 支持团队不维护 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 数据中心创建一个区域标签,请在终端中输入以下命令。

    $ 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>"
---

网络配置阶段

在 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 manifests 创建清单文件后,您可以仅使用要修改的字段来定义自定义集群网络操作员清单。您可以使用该清单来指定高级网络配置。

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

指定高级网络配置

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

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

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

先决条件
  • 您已创建 install-config.yaml 文件并完成了对其的任何修改。

步骤
  1. 切换到包含安装程序的目录并创建清单。

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

    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. 删除定义控制平面机器和计算 MachineSet 的 Kubernetes 清单文件。

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

    因为您自己创建和管理这些资源,所以您不必初始化它们。

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

为您的网络指定多个子网

在您在 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>
    # ...

集群网络操作员配置

集群网络的配置作为集群网络操作符 (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对象的字段来指定集群的集群网络插件配置。

集群网络操作符配置对象

集群网络操作符 (CNO) 的字段在以下表格中描述:

表 1. 集群网络操作符配置对象
字段 类型 描述

metadata.name

字符串

CNO 对象的名称。此名称始终为cluster

spec.clusterNetwork

数组

一个列表,指定分配 Pod IP 地址的 IP 地址块以及分配给集群中每个节点的子网前缀长度。例如:

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

spec.serviceNetwork

数组

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

spec:
  serviceNetwork:
  - 172.30.0.0/14

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

spec.defaultNetwork

对象

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

spec.kubeProxyConfig

对象

此对象的字段指定 kube-proxy 配置。如果您使用的是 OVN-Kubernetes 集群网络插件,则 kube-proxy 配置无效。

对于需要跨多个网络部署对象的集群,请确保为install-config.yaml文件中定义的每种网络类型指定相同的值clusterNetwork.hostPrefix参数。为每个clusterNetwork.hostPrefix参数设置不同的值会影响 OVN-Kubernetes 网络插件,插件无法有效地路由不同节点之间的对象流量。

defaultNetwork 对象配置

defaultNetwork 对象的值在以下表格中定义:

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

type

字符串

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

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

ovnKubernetesConfig

对象

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

OVN-Kubernetes 网络插件的配置

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

表 3. ovnKubernetesConfig 对象
字段 类型 描述

mtu

整数

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

如果自动检测到的值与您预期的不符,请确认节点上主网络接口上的 MTU 是否正确。您不能使用此选项更改节点上主网络接口的 MTU 值。

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

genevePort

整数

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

ipsecConfig

对象

指定一个配置对象以自定义 IPsec 配置。

ipv4

对象

指定 IPv4 设置的配置对象。

ipv6

对象

指定 IPv6 设置的配置对象。

policyAuditConfig

对象

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

gatewayConfig

对象

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

迁移出站流量期间,在集群网络操作符 (CNO) 成功推出更改之前,您可能会遇到工作负载和服务流量的一些中断。

表 4. ovnKubernetesConfig.ipv4 对象
字段 类型 描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础设施与100.88.0.0/16 IPv4 子网重叠,您可以为 OVN-Kubernetes 指定不同的内部使用 IP 地址范围。启用东西向流量的分布式转接交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。它必须足够大,可以容纳集群中每个节点的一个 IP 地址。

默认值为100.88.0.0/16

internalJoinSubnet

字符串

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

默认值为100.64.0.0/16

表 5. ovnKubernetesConfig.ipv6 对象
字段 类型 描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础设施与fd97::/64 IPv6 子网重叠,您可以为 OVN-Kubernetes 指定不同的内部使用 IP 地址范围。启用东西向流量的分布式转接交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。它必须足够大,可以容纳集群中每个节点的一个 IP 地址。

默认值为fd97::/64

internalJoinSubnet

字符串

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

默认值为fd98::/64

表 6. policyAuditConfig 对象
字段 类型 描述

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 设施,例如 `kern`,由 RFC5424 定义。默认值为 `local0`。

表 7. `gatewayConfig` 对象
字段 类型 描述

routingViaHost

布尔值

将此字段设置为 `true` 可将 Pod 的出站流量发送到主机网络堆栈。对于依赖于内核路由表中手动配置的路由的高度专业化的安装和应用程序,您可能希望将出站流量路由到主机网络堆栈。默认情况下,出站流量在 OVN 中处理以退出集群,并且不会受到内核路由表中专用路由的影响。默认值为 `false`。

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

ipForwarding

对象

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

ipv4

对象

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

ipv6

对象

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

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

internalMasqueradeSubnet

字符串

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

对于 OpenShift Container Platform 4.17 及更高版本,集群使用 `169.254.0.0/17` 作为默认伪装子网。对于升级的集群,默认伪装子网没有更改。

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

internalMasqueradeSubnet

字符串

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

对于 OpenShift Container Platform 4.17 及更高版本,集群使用 `fd69::/112` 作为默认伪装子网。对于升级的集群,默认伪装子网没有更改。

表 10. `ipsecConfig` 对象
字段 类型 描述

模式

字符串

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

  • `Disabled`:在集群节点上未启用 IPsec。

  • `External`:对于与外部主机的网络流量,启用 IPsec。

  • `Full`:对于 Pod 流量和与外部主机的网络流量,启用 IPsec。

启用 IPSec 的示例 OVN-Kubernetes 配置
defaultNetwork:
  type: OVNKubernetes
  ovnKubernetesConfig:
    mtu: 1400
    genevePort: 6081
      ipsecConfig:
        mode: Full

创建 Ignition 配置文件

因为您必须手动启动集群机器,所以您必须生成集群使其机器所需的 Ignition 配置文件。

  • 安装程序生成的 Ignition 配置文件包含在 24 小时后过期的证书,然后在此时续期。如果在续期证书之前关闭集群,并且 24 小时后再次启动集群,则集群会自动恢复过期的证书。例外情况是,您必须手动批准挂起的 `node-bootstrapper` 证书签名请求 (CSR) 以恢复 kubelet 证书。有关详细信息,请参阅有关“从过期的控制平面证书中恢复”的文档。

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

先决条件
  • 获取 OpenShift Container Platform 安装程序和集群的拉取密钥。

步骤
  • 获取 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

提取基础架构名称

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

先决条件
  • 您已获得 OpenShift Container Platform 安装程序和集群的拉取密钥。

  • 您已为您的集群生成 Ignition 配置文件。

  • 您已安装 `jq` 包。

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

    $ jq -r .infraID <installation_directory>/metadata.json (1)
    1 对于 `<installation_directory>`,请指定您存储安装文件的目录的路径。
    示例输出
    openshift-vw9j6 (1)
    
    1 此命令的输出是您的集群名称和一个随机字符串。

安装 RHCOS 并启动 OpenShift Container Platform 引导过程

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

先决条件
  • 您已获得集群的Ignition配置文件。

  • 您可以访问一个HTTP服务器,您可以从您的计算机访问该服务器,并且您创建的机器也可以访问该服务器。

  • 您已创建了一个vSphere集群

步骤
  1. 将安装程序创建的引导Ignition配置文件(名为<installation_directory>/bootstrap.ign)上传到您的HTTP服务器。记下此文件的URL。

  2. 将以下引导节点的辅助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 指定您托管的引导Ignition配置文件的URL。

    创建引导机器的虚拟机 (VM) 时,您将使用此Ignition配置文件。

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

    • <installation_directory>/master.ign

    • <installation_directory>/worker.ign

    • <installation_directory>/merge-bootstrap.ign

  4. 将Ignition配置文件转换为Base64编码。稍后在此过程中,必须将这些文件添加到VM的额外配置参数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 Client中,在您的数据中心创建一个文件夹来存储您的VM。

    1. 单击**虚拟机和模板**视图。

    2. 右键单击您的数据中心名称。

    3. 单击**新建文件夹** → **新建虚拟机和模板文件夹**。

    4. 在显示的窗口中,输入文件夹名称。如果您没有在install-config.yaml文件中指定现有文件夹,则创建一个与基础架构ID同名的文件夹。使用此文件夹名称,以便vCenter在其工作区配置中在适当的位置动态配置存储。

  7. 在vSphere Client中,为OVA镜像创建一个模板,然后根据需要克隆该模板。

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

    1. 在**主机和集群**选项卡中,右键单击您的集群名称,然后选择**部署OVF模板**。

    2. 在**选择OVF**选项卡上,指定您下载的RHCOS OVA文件的名称。

    3. 在**选择名称和文件夹**选项卡上,为您的模板设置一个**虚拟机名称**,例如Template-RHCOS。单击您的vSphere集群的名称,然后选择您在上一步中创建的文件夹。

    4. 在**选择计算资源**选项卡上,单击您的vSphere集群的名称。

    5. 在**选择存储**选项卡上,配置VM的存储选项。

      • 根据您的存储偏好,选择**精简置备**或**完整置备**。

      • 选择您在install-config.yaml文件中指定的存储库。

      • 如果您想加密您的虚拟机,请选择**加密此虚拟机**。有关更多信息,请参见标题为“加密虚拟机的要求”的部分。

    6. 在**选择网络**选项卡上,指定您为集群配置的网络(如果可用)。

    7. 创建OVF模板时,请不要在**自定义模板**选项卡上指定值,也不要进一步配置模板。

      不要启动原始VM模板。VM模板必须保持关闭状态,并且必须为新的RHCOS机器克隆。启动VM模板会将VM模板配置为平台上的VM,这会阻止计算机器集应用配置。

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

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

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

    1. 右键单击模板名称,然后单击**克隆** → **克隆到虚拟机**。

    2. 在**选择名称和文件夹**选项卡上,为VM指定一个名称。您可以在名称中包含机器类型,例如control-plane-0compute-1

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

    3. 在**选择名称和文件夹**选项卡上,选择您为集群创建的文件夹的名称。

    4. 在**选择计算资源**选项卡上,选择数据中心中主机的名称。

    5. 在**选择克隆选项**选项卡上,选择**自定义此虚拟机的硬件**。

    6. 在**自定义硬件**选项卡上,单击**高级参数**。

      以下配置建议仅供示例。作为集群管理员,您必须根据集群的资源需求配置资源。为了最佳地管理集群资源,请考虑从集群的根资源池创建资源池。

      • 可选:覆盖 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}"
      • 通过在**属性**和**值**字段中指定数据,添加以下配置参数名称和值。确保您为创建的每个参数选择**添加**按钮。

        • guestinfo.ignition.config.data:找到您在此过程中先前创建的 base-64 编码文件,并粘贴此机器类型的 base64 编码 Ignition 配置文件的内容。

        • guestinfo.ignition.config.data.encoding:指定base64

        • disk.EnableUUID:指定TRUE

        • stealclock.enable:如果未定义此参数,请添加它并指定TRUE

        • 从集群的根资源池创建一个子资源池。在此子资源池中执行资源分配。

    7. 在**自定义硬件**选项卡的**虚拟硬件**面板中,根据需要修改指定的值。确保 RAM、CPU 和磁盘存储量满足机器类型的最低要求。

    8. 完成其余配置步骤。单击**完成**按钮后,您就完成了克隆操作。

    9. 在**虚拟机**选项卡中,右键单击您的虚拟机,然后选择**电源**→**开启电源**。

    10. 检查控制台输出以验证 Ignition 是否已运行。

      示例命令
      Ignition: ran on 2022/03/14 14:48:33 UTC (this boot)
      Ignition: user-provided config was applied
后续步骤
  • 按照前面步骤为每个机器创建集群的其余机器。

    您必须立即创建引导程序和控制平面机器。因为默认情况下某些 Pod 部署在计算机器上,所以在安装集群之前,至少还要创建两台计算机器。

在 vSphere 中向集群添加更多计算机器

您可以向 VMware vSphere 上的用户预配的 OpenShift Container Platform 集群添加更多计算机器。

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

先决条件
  • 获取计算机器的 base64 编码 Ignition 文件。

  • 您可以访问为集群创建的 vSphere 模板。

步骤
  1. 右键单击模板的名称,然后单击**克隆**→**克隆到虚拟机**。

  2. 在**选择名称和文件夹**选项卡上,为虚拟机指定一个名称。您可以将机器类型包含在名称中,例如compute-1

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

  3. 在**选择名称和文件夹**选项卡上,选择您为集群创建的文件夹的名称。

  4. 在**选择计算资源**选项卡上,选择数据中心中主机的名称。

  5. 在**选择存储**选项卡上,选择配置和磁盘文件的存储。

  6. 在**选择克隆选项**选项卡上,选择**自定义此虚拟机的硬件**。

  7. 在**自定义硬件**选项卡上,单击**高级参数**。

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

      • guestinfo.ignition.config.data:粘贴此机器类型的 base-64 编码计算 Ignition 配置文件的内容。

      • guestinfo.ignition.config.data.encoding:指定base64

      • disk.EnableUUID:指定TRUE

  8. 在**自定义硬件**选项卡的**虚拟硬件**面板中,根据需要修改指定的值。确保 RAM、CPU 和磁盘存储量满足机器类型的最低要求。如果存在多个网络,请选择**添加新设备**>**网络适配器**,然后在**新建网络**菜单项提供的字段中输入您的网络信息。

  9. 完成其余配置步骤。单击**完成**按钮后,您就完成了克隆操作。

  10. 在**虚拟机**选项卡中,右键单击您的虚拟机,然后选择**电源**→**开启电源**。

后续步骤
  • 继续为您的集群创建更多计算机器。

磁盘分区

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

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

  • 创建单独的分区:对于空磁盘上的全新安装,您可能希望向分区添加单独的存储。这正式支持将/var/var的子目录(例如/var/lib/etcd)设为单独的分区,但不能同时两者都设置。

    对于大于 100GB 的磁盘大小,尤其是大于 1TB 的磁盘大小,请创建一个单独的/var分区。有关更多信息,请参阅“创建单独的/var分区”以及这篇Red Hat 知识库文章

    Kubernetes 只支持两个文件系统分区。如果您向原始配置添加多个分区,Kubernetes 将无法监控所有分区。

  • 保留现有分区:对于您要在现有节点上重新安装 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 时保留这些数据。使用此方法,您无需再次提取所有容器,也不需要在更新系统时复制海量日志文件。

因为在全新安装 Red Hat Enterprise Linux CoreOS (RHCOS) 之前必须存在/var,所以以下过程通过创建一个在 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.17.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 MiB。根文件系统会自动调整大小以填充所有可用空间,直至指定的偏移量。如果未指定值,或指定的值小于建议的最小值,则生成的根文件系统将太小,将来重新安装 RHCOS 可能会覆盖数据分区的开头。
    3 数据分区的大小(以 MiB 为单位)。
    4 对于用于容器存储的文件系统,必须启用 prjquota 挂载选项。

    创建单独的 /var 分区时,如果不同的实例类型没有相同的设备名称,则不能对工作节点使用不同的实例类型。

  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) 系统。

等待引导过程完成

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

先决条件
  • 您已为集群创建了 Ignition 配置文件。

  • 您已配置了合适的网络、DNS 和负载均衡基础设施。

  • 您已获得安装程序并为集群生成了 Ignition 配置文件。

  • 您已在集群机器上安装了 RHCOS,并提供了 OpenShift Container Platform 安装程序生成的 Ignition 配置文件。

  • 您的机器可以直接访问互联网或可以使用 HTTP 或 HTTPS 代理。

步骤
  1. 监控引导过程

    $ ./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.30.3 up
    INFO Waiting up to 30m0s for bootstrapping to complete...
    INFO It is now safe to remove the bootstrap resources

    当 Kubernetes API 服务器发出信号表明它已在控制平面机器上引导时,命令成功。

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

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

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

批准机器的证书签名请求

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

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

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

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

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

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

  2. 查看挂起的 CSR,并确保您看到为添加到集群的每台机器显示 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 execoc rshoc logs 命令将无法成功,因为当 API 服务器连接到 kubelet 时需要服务证书。任何联系 Kubelet 端点的操作都需要此证书批准到位。该方法必须监视新的 CSR,确认 CSR 是由 system:nodesystem:admin 组中的 node-bootstrapper 服务帐户提交的,并确认节点的身份。

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

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

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

      在批准某些 CSR 之前,某些 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.30.3
    master-1  Ready     master  73m  v1.30.3
    master-2  Ready     master  74m  v1.30.3
    worker-0  Ready     worker  11m  v1.30.3
    worker-1  Ready     worker  11m  v1.30.3

    批准服务器 CSR 后,机器可能需要几分钟才能转换为 Ready 状态。

其他信息

初始 Operator 配置

控制平面初始化后,您必须立即配置某些 Operator,以便它们全部可用。

先决条件
  • 您的控制平面已初始化。

步骤
  1. 观察集群组件上线

    $ watch -n5 oc get clusteroperators
    示例输出
    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                             4.17.0    True        False         False      19m
    baremetal                                  4.17.0    True        False         False      37m
    cloud-credential                           4.17.0    True        False         False      40m
    cluster-autoscaler                         4.17.0    True        False         False      37m
    config-operator                            4.17.0    True        False         False      38m
    console                                    4.17.0    True        False         False      26m
    csi-snapshot-controller                    4.17.0    True        False         False      37m
    dns                                        4.17.0    True        False         False      37m
    etcd                                       4.17.0    True        False         False      36m
    image-registry                             4.17.0    True        False         False      31m
    ingress                                    4.17.0    True        False         False      30m
    insights                                   4.17.0    True        False         False      31m
    kube-apiserver                             4.17.0    True        False         False      26m
    kube-controller-manager                    4.17.0    True        False         False      36m
    kube-scheduler                             4.17.0    True        False         False      36m
    kube-storage-version-migrator              4.17.0    True        False         False      37m
    machine-api                                4.17.0    True        False         False      29m
    machine-approver                           4.17.0    True        False         False      37m
    machine-config                             4.17.0    True        False         False      36m
    marketplace                                4.17.0    True        False         False      37m
    monitoring                                 4.17.0    True        False         False      29m
    network                                    4.17.0    True        False         False      38m
    node-tuning                                4.17.0    True        False         False      37m
    openshift-apiserver                        4.17.0    True        False         False      32m
    openshift-controller-manager               4.17.0    True        False         False      30m
    openshift-samples                          4.17.0    True        False         False      32m
    operator-lifecycle-manager                 4.17.0    True        False         False      37m
    operator-lifecycle-manager-catalog         4.17.0    True        False         False      37m
    operator-lifecycle-manager-packageserver   4.17.0    True        False         False      32m
    service-ca                                 4.17.0    True        False         False      38m
    storage                                    4.17.0    True        False         False      37m
  2. 配置不可用的 Operator。

安装过程中删除镜像注册表

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

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

镜像注册表存储配置

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

显示了配置持久卷的说明,这是生产集群所必需的。在适用情况下,将显示说明,用于将空目录配置为存储位置,这仅适用于非生产集群。

提供了其他说明,用于通过在升级期间使用 Recreate 展开策略来允许镜像注册表使用块存储类型。

为 VMware vSphere 配置块注册表存储

为了允许镜像注册表在升级期间作为集群管理员使用 vSphere 虚拟机磁盘 (VMDK) 等块存储类型,您可以使用 `Recreate` 部署策略。

块存储卷受支持,但不建议在生产集群中与镜像注册表一起使用。注册表配置在块存储上的安装不是高可用的,因为注册表不能拥有多个副本。

步骤
  1. 输入以下命令将镜像注册表存储设置为块存储类型,修补注册表使其使用 `Recreate` 部署策略,并仅使用 `1` 个副本运行。

    $ 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. 输入以下命令编辑注册表配置,使其引用正确的 PVC。

    $ oc edit config.imageregistry.operator.openshift.io -o yaml
    示例输出
    storage:
      pvc:
        claim: (1)
    1 通过创建自定义 PVC,您可以将 `claim` 字段留空,以便默认情况下自动创建 `image-registry-storage` PVC。

有关配置注册表存储以使其引用正确的 PVC 的说明,请参阅 为 vSphere 配置注册表

完成用户预配基础架构上的安装

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

先决条件
  • 您的控制平面已初始化。

  • 您已完成初始操作员配置。

步骤
  1. 使用以下命令确认所有集群组件都联机。

    $ watch -n5 oc get clusteroperators
    示例输出
    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
    authentication                             4.17.0    True        False         False      19m
    baremetal                                  4.17.0    True        False         False      37m
    cloud-credential                           4.17.0    True        False         False      40m
    cluster-autoscaler                         4.17.0    True        False         False      37m
    config-operator                            4.17.0    True        False         False      38m
    console                                    4.17.0    True        False         False      26m
    csi-snapshot-controller                    4.17.0    True        False         False      37m
    dns                                        4.17.0    True        False         False      37m
    etcd                                       4.17.0    True        False         False      36m
    image-registry                             4.17.0    True        False         False      31m
    ingress                                    4.17.0    True        False         False      30m
    insights                                   4.17.0    True        False         False      31m
    kube-apiserver                             4.17.0    True        False         False      26m
    kube-controller-manager                    4.17.0    True        False         False      36m
    kube-scheduler                             4.17.0    True        False         False      36m
    kube-storage-version-migrator              4.17.0    True        False         False      37m
    machine-api                                4.17.0    True        False         False      29m
    machine-approver                           4.17.0    True        False         False      37m
    machine-config                             4.17.0    True        False         False      36m
    marketplace                                4.17.0    True        False         False      37m
    monitoring                                 4.17.0    True        False         False      29m
    network                                    4.17.0    True        False         False      38m
    node-tuning                                4.17.0    True        False         False      37m
    openshift-apiserver                        4.17.0    True        False         False      32m
    openshift-controller-manager               4.17.0    True        False         False      30m
    openshift-samples                          4.17.0    True        False         False      32m
    operator-lifecycle-manager                 4.17.0    True        False         False      37m
    operator-lifecycle-manager-catalog         4.17.0    True        False         False      37m
    operator-lifecycle-manager-packageserver   4.17.0    True        False         False      32m
    service-ca                                 4.17.0    True        False         False      38m
    storage                                    4.17.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...

    当集群版本操作员完成从 Kubernetes API 服务器部署 OpenShift Container Platform 集群时,命令成功。

    • 安装程序生成的 Ignition 配置文件包含在 24 小时后过期的证书,然后在此时续期。如果在续期证书之前关闭集群,并且 24 小时后再次启动集群,则集群会自动恢复过期的证书。例外情况是,您必须手动批准挂起的 `node-bootstrapper` 证书签名请求 (CSR) 以恢复 kubelet 证书。有关详细信息,请参阅有关“从过期的控制平面证书中恢复”的文档。

    • 建议您在生成后 12 小时内使用 Ignition 配置文件,因为 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 添加计算机器 的说明,在集群安装完成后添加额外的计算机器。

为控制平面节点配置 vSphere DRS 反亲和性规则

可以配置 vSphere 分布式资源调度程序 (DRS) 反亲和性规则,以支持 OpenShift Container Platform 控制平面节点的更高可用性。反亲和性规则可确保 OpenShift Container Platform 控制平面节点的 vSphere 虚拟机不会调度到同一 vSphere 主机。

  • 以下信息仅适用于计算 DRS,不适用于存储 DRS。

  • `govc` 命令是 VMware 提供的开源命令;Red Hat 不提供该命令。Red Hat 支持不支持 `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

创建规则后,vSphere 会自动迁移您的控制平面节点,以确保它们不会在同一主机上运行。这可能需要一些时间,而 vSphere 会协调新规则。成功完成命令将在以下过程中显示。

迁移会自动发生,并且在迁移完成之前可能会导致短暂的 OpenShift API 中断或延迟。

如果控制平面 VM 名称更改或迁移到新的 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

OpenShift Container Platform 的遥测访问

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

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

附加资源

后续步骤