×

在 OpenShift Container Platform 4.17 版本中,您可以使用安装程序预配的基础架构在 VMware vSphere 实例上安装集群。要自定义安装,请在安装集群之前修改install-config.yaml文件中的参数。

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

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

先决条件

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

创建安装配置文件

您可以自定义您在 VMware vSphere 上安装的 OpenShift Container Platform 集群。

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

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

    1. 更改为包含安装程序的目录并运行以下命令:

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

      指定目录时:

      • 验证目录是否具有execute权限。此权限是安装目录下运行 Terraform 二进制文件所必需的。

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

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

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

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

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

      3. 指定您的 vCenter 实例的名称。

      4. 指定具有创建集群所需权限的 vCenter 帐户的用户名和密码。

        安装程序将连接到您的 vCenter 实例。

      5. 选择要连接到的 vCenter 实例中的数据中心。

        创建安装配置文件后,您可以修改该文件以创建多 vSphere 数据中心环境。这意味着您可以将 OpenShift Container Platform 集群部署到多个 vSphere 数据中心。有关创建此环境的更多信息,请参见名为“VMware vSphere 区域和区域启用”的部分。

      6. 选择要使用的默认 vCenter 数据存储。

        您可以指定数据存储集群中任何现有数据存储的路径。默认情况下,使用 Storage vMotion 的存储分布式资源调度程序 (SDRS) 会自动为数据存储集群启用。Red Hat 不支持 Storage vMotion,因此您必须禁用 Storage DRS 以避免 OpenShift Container Platform 集群的数据丢失问题。

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

      7. 选择要在其中安装 OpenShift Container Platform 集群的 vCenter 集群。安装程序使用 vSphere 集群的根资源池作为默认资源池。

      8. 选择 vCenter 实例中包含您已配置的虚拟 IP 地址和 DNS 记录的网络。

      9. 输入您为控制平面 API 访问配置的虚拟 IP 地址。

      10. 输入您为集群入口配置的虚拟 IP 地址。

      11. 输入基础域。此基础域必须与您在配置的 DNS 记录中使用的域相同。

      12. 输入集群的描述性名称。

        您输入的集群名称必须与您在配置 DNS 记录时指定的集群名称匹配。

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

    如果您正在安装三节点集群,请确保将compute.replicas参数设置为0。这确保了集群的控制平面是可调度的。有关更多信息,请参见“在 vSphere 上安装三节点集群”。

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

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

其他资源

安装程序配置的 VMware vSphere 集群的示例 install-config.yaml 文件

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

apiVersion: v1
baseDomain: example.com (1)
compute: (2)
- architecture: amd64
  name:  <worker_node>
  platform: {}
  replicas: 3
controlPlane: (2)
  architecture: amd64
  name: <parent_node>
  platform: {}
  replicas: 3
metadata:
  creationTimestamp: null
  name: test (3)
platform:
  vsphere: (4)
    apiVIPs:
      - 10.0.0.1
    failureDomains: (5)
    - name: <failure_domain_name>
      region: <default_region_name>
      server: <fully_qualified_domain_name>
      topology:
        computeCluster: "/<data_center>/host/<cluster>"
        datacenter: <data_center>
        datastore: "/<data_center>/datastore/<datastore>" (6)
        networks:
        - <VM_Network_name>
        resourcePool: "/<data_center>/host/<cluster>/Resources/<resourcePool>" (7)
        folder: "/<data_center_name>/vm/<folder_name>/<subfolder_name>"
        tagIDs: (8)
        - <tag_id>  (9)
      zone: <default_zone_name>
    ingressVIPs:
    - 10.0.0.2
    vcenters:
    - datacenters:
      - <data_center>
      password: <password>
      port: 443
      server: <fully_qualified_domain_name>
      user: [email protected]
    diskType: thin (10)
fips: false
pullSecret: '{"auths": ...}'
sshKey: 'ssh-ed25519 AAAA...'
1 集群的基础域。所有 DNS 记录都必须为此基础域的子域,并且包含集群名称。
2 controlPlane部分是单个映射,但compute部分是一系列映射。为了满足不同数据结构的要求,compute部分的第一行必须以连字符-开头,而controlPlane部分的第一行则不能。只使用一个控制平面池。
3 您在 DNS 记录中指定的集群名称。
4 可选:为计算和控制平面机器的机器池参数提供其他配置。
5 建立区域和区域之间的关系。您可以使用 vCenter 对象(例如datastore对象)定义故障域。故障域定义 OpenShift Container Platform 集群节点的 vCenter 位置。
6 保存虚拟机文件、模板和 ISO 镜像的 vSphere 数据存储的路径。

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

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

7 可选:提供现有的资源池用于创建机器。如果您未指定值,则安装程序将使用 vSphere 集群的根资源池。
8 可选:OpenShift Container Platform 创建的每个虚拟机都会分配一个特定于集群的唯一标签。分配的标签使安装程序能够在取消集群的佣金时识别和删除关联的虚拟机。您可以列出最多十个要附加到安装程序配置的虚拟机的附加标签 ID。
9 要由安装程序关联的标签的 ID。例如,urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL。有关确定标签 ID 的更多信息,请参见vSphere 标签和属性文档
10 vSphere 磁盘配置方法。

在 OpenShift Container Platform 4.12 及更高版本中,apiVIPingressVIP配置设置已弃用。改为使用列表格式在apiVIPsingressVIPs配置设置中输入值。

在安装期间配置集群范围的代理

生产环境可以拒绝直接访问互联网,而是提供 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证书。集群网络操作员然后创建一个trusted-ca-bundle配置映射,将这些内容与Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包合并,此配置映射在Proxy对象的trustedCA字段中引用。除非代理的身份证书由RHCOS信任捆绑包中的权威机构签名,否则additionalTrustBundle字段是必需的。
    5 可选:确定Proxy对象的配置策略,以在trustedCA字段中引用user-ca-bundle配置映射。允许的值为ProxyonlyAlways。使用Proxyonly仅在配置http/https代理时引用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对象,但它将具有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集群配置为使用用户管理的负载均衡器来代替默认负载均衡器。

配置用户管理的负载均衡器取决于您的供应商的负载均衡器。

本节中的信息和示例仅供指导。请咨询供应商文档以获取有关供应商负载均衡器的更具体信息。

Red Hat支持以下用户管理负载均衡器的服务

  • 入口控制器

  • OpenShift API

  • OpenShift MachineConfig API

您可以选择是否要为用户管理的负载均衡器配置一项或所有这些服务。仅配置入口控制器服务是一种常见的配置选项。为了更好地理解每个服务,请查看以下图表

An image that shows an example network workflow of an Ingress Controller operating in an OpenShift Container Platform environment.
图1. 显示入口控制器在OpenShift Container Platform环境中运行的示例网络工作流程
An image that shows an example network workflow of an OpenShift API operating in an OpenShift Container Platform environment.
图2. 显示OpenShift API在OpenShift Container Platform环境中运行的示例网络工作流程
An image that shows an example network workflow of an OpenShift MachineConfig API operating in an OpenShift Container Platform environment.
图3. 显示OpenShift MachineConfig API在OpenShift Container Platform环境中运行的示例网络工作流程

支持以下用户管理负载均衡器的配置选项

  • 使用节点选择器将入口控制器映射到特定的一组节点。您必须为此集合中的每个节点分配一个静态IP地址,或者将每个节点配置为从动态主机配置协议 (DHCP) 接收相同的IP地址。基础架构节点通常接收此类配置。

  • 定位子网上的所有IP地址。此配置可以减少维护开销,因为您可以在这些网络内创建和销毁节点,而无需重新配置负载均衡器目标。如果您使用机器集在较小的网络(例如/27/28)上部署入口 Pod,则可以简化负载均衡器目标。

    您可以通过检查机器配置池的资源来列出网络中存在的所有IP地址。

在为OpenShift Container Platform集群配置用户管理的负载均衡器之前,请考虑以下信息

  • 对于前端IP地址,您可以对前端IP地址、入口控制器的负载均衡器和API负载均衡器使用相同的IP地址。请检查供应商的文档以了解此功能。

  • 对于后端IP地址,请确保OpenShift Container Platform控制平面节点的IP地址在用户管理的负载均衡器的生命周期内不会更改。您可以通过完成以下操作之一来实现此目的

    • 为每个控制平面节点分配一个静态IP地址。

    • 将每个节点配置为每次节点请求DHCP租约时从DHCP接收相同的IP地址。根据供应商的不同,DHCP租约可能是IP预留或静态DHCP分配的形式。

  • 手动定义在入口控制器后端服务的用户管理负载均衡器中运行入口控制器的每个节点。例如,如果入口控制器移动到未定义的节点,则可能会发生连接中断。

配置用户管理的负载均衡器

您可以将OpenShift Container Platform集群配置为使用用户管理的负载均衡器来代替默认负载均衡器。

在配置用户管理的负载均衡器之前,请确保您已阅读“用户管理的负载均衡器的服务”部分。

请阅读以下适用于您要为用户管理的负载均衡器配置的服务的先决条件。

MetalLB 运行在集群上,充当用户管理的负载均衡器。

OpenShift API 先决条件
  • 您已定义一个前端 IP 地址。

  • 负载均衡器的前端 IP 地址上公开了 TCP 端口 6443 和 22623。请检查以下项目:

    • 端口 6443 提供对 OpenShift API 服务的访问。

    • 端口 22623 可为节点提供启动配置。

  • 所有位于 OpenShift Container Platform 集群外部位置的系统用户都可以访问前端 IP 地址和端口 6443。

  • 只有 OpenShift Container Platform 节点才能访问前端 IP 地址和端口 22623。

  • 负载均衡器后端可以在端口 6443 和 22623 上与 OpenShift Container Platform 控制平面节点通信。

Ingress Controller 先决条件
  • 您已定义一个前端 IP 地址。

  • 负载均衡器的前端 IP 地址上公开了 TCP 端口 443 和 80。

  • 所有位于 OpenShift Container Platform 集群外部位置的系统用户都可以访问前端 IP 地址、端口 80 和端口 443。

  • OpenShift Container Platform 集群中运行的所有节点都可以访问前端 IP 地址、端口 80 和端口 443。

  • 负载均衡器后端可以在端口 80、443 和 1936 上与运行 Ingress Controller 的 OpenShift Container Platform 节点通信。

健康检查 URL 规范的先决条件

您可以通过设置健康检查 URL 来配置大多数负载均衡器,这些 URL 用于确定服务是可用还是不可用。OpenShift Container Platform 为 OpenShift API、机器配置 API 和 Ingress Controller 后端服务提供这些健康检查。

以下示例显示了前面列出的后端服务的健康检查规范

Kubernetes API 健康检查规范示例
Path: HTTPS:6443/readyz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
机器配置 API 健康检查规范示例
Path: HTTPS:22623/healthz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
Ingress Controller 健康检查规范示例
Path: HTTP:1936/healthz/ready
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 5
Interval: 10
步骤
  1. 配置 HAProxy Ingress Controller,以便您可以通过负载均衡器在端口 6443、22623、443 和 80 上访问集群。根据您的需求,您可以在 HAProxy 配置中指定单个子网的 IP 地址或多个子网的 IP 地址。

    列出了一个子网的 HAProxy 配置示例
    # ...
    listen my-cluster-api-6443
        bind 192.168.1.100:6443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /readyz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:6443 check inter 10s rise 2 fall 2
    
    listen my-cluster-machine-config-api-22623
        bind 192.168.1.100:22623
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:22623 check inter 10s rise 2 fall 2
    
    listen my-cluster-apps-443
        bind 192.168.1.100:443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:443 check port 1936 inter 10s rise 2 fall 2
    
    listen my-cluster-apps-80
       bind 192.168.1.100:80
       mode tcp
       balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:80 check port 1936 inter 10s rise 2 fall 2
    # ...
    列出了多个子网的 HAProxy 配置示例
    # ...
    listen api-server-6443
        bind *:6443
        mode tcp
          server master-00 192.168.83.89:6443 check inter 1s
          server master-01 192.168.84.90:6443 check inter 1s
          server master-02 192.168.85.99:6443 check inter 1s
          server bootstrap 192.168.80.89:6443 check inter 1s
    
    listen machine-config-server-22623
        bind *:22623
        mode tcp
          server master-00 192.168.83.89:22623 check inter 1s
          server master-01 192.168.84.90:22623 check inter 1s
          server master-02 192.168.85.99:22623 check inter 1s
          server bootstrap 192.168.80.89:22623 check inter 1s
    
    listen ingress-router-80
        bind *:80
        mode tcp
        balance source
          server worker-00 192.168.83.100:80 check inter 1s
          server worker-01 192.168.83.101:80 check inter 1s
    
    listen ingress-router-443
        bind *:443
        mode tcp
        balance source
          server worker-00 192.168.83.100:443 check inter 1s
          server worker-01 192.168.83.101:443 check inter 1s
    
    listen ironic-api-6385
        bind *:6385
        mode tcp
        balance source
          server master-00 192.168.83.89:6385 check inter 1s
          server master-01 192.168.84.90:6385 check inter 1s
          server master-02 192.168.85.99:6385 check inter 1s
          server bootstrap 192.168.80.89:6385 check inter 1s
    
    listen inspector-api-5050
        bind *:5050
        mode tcp
        balance source
          server master-00 192.168.83.89:5050 check inter 1s
          server master-01 192.168.84.90:5050 check inter 1s
          server master-02 192.168.85.99:5050 check inter 1s
          server bootstrap 192.168.80.89:5050 check inter 1s
    # ...
  2. 使用 `curl` CLI 命令验证用户管理的负载均衡器及其资源是否正在运行

    1. 通过运行以下命令并观察响应,验证集群机器配置 API 是否可访问 Kubernetes API 服务器资源

      $ curl https://<loadbalancer_ip_address>:6443/version --insecure

      如果配置正确,您将收到一个 JSON 对象作为响应

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
      }
    2. 通过运行以下命令并观察输出,验证集群机器配置 API 是否可访问机器配置服务器资源

      $ curl -v https://<loadbalancer_ip_address>:22623/healthz --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      Content-Length: 0
    3. 通过运行以下命令并观察输出,验证控制器是否可在端口 80 上访问 Ingress Controller 资源

      $ curl -I -L -H "Host: console-openshift-console.apps.<cluster_name>.<base_domain>" http://<load_balancer_front_end_IP_address>

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.ocp4.private.opequon.net/
      cache-control: no-cache
    4. 通过运行以下命令并观察输出,验证控制器是否可在端口 443 上访问 Ingress Controller 资源

      $ curl -I -L --insecure --resolve console-openshift-console.apps.<cluster_name>.<base_domain>:443:<Load Balancer Front End IP Address> https://console-openshift-console.apps.<cluster_name>.<base_domain>

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
  3. 将集群的 DNS 记录配置为指向用户管理的负载均衡器的前端 IP 地址。您必须更新集群 API 和通过负载均衡器的应用程序的 DNS 服务器记录。

    修改后的 DNS 记录示例
    <load_balancer_ip_address>  A  api.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End
    <load_balancer_ip_address>   A apps.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End

    每个 DNS 记录的传播可能需要一些时间才能可用。请确保每个 DNS 记录都已传播后再验证每个记录。

  4. 要使您的 OpenShift Container Platform 集群使用用户管理的负载均衡器,您必须在集群的 `install-config.yaml` 文件中指定以下配置

    # ...
    platform:
      vsphere:
        loadBalancer:
          type: UserManaged (1)
          apiVIPs:
          - <api_ip> (2)
          ingressVIPs:
          - <ingress_ip> (3)
    # ...
    1 为 `type` 参数设置 `UserManaged` 以指定集群的用户管理的负载均衡器。该参数默认为 `OpenShiftManagedDefault`,表示默认的内部负载均衡器。对于在 `openshift-kni-infra` 命名空间中定义的服务,用户管理的负载均衡器可以将 `coredns` 服务部署到集群中的 Pod,但会忽略 `keepalived` 和 `haproxy` 服务。
    2 指定用户管理的负载均衡器时所需的参数。指定用户管理的负载均衡器的公共 IP 地址,以便 Kubernetes API 可以与用户管理的负载均衡器通信。
    3 指定用户管理的负载均衡器时所需的参数。指定用户管理的负载均衡器的公共 IP 地址,以便用户管理的负载均衡器可以管理集群的入口流量。
验证
  1. 使用 `curl` CLI 命令验证用户管理的负载均衡器和 DNS 记录配置是否正在运行

    1. 通过运行以下命令并观察输出,验证您是否可以访问集群 API

      $ curl https://api.<cluster_name>.<base_domain>:6443/version --insecure

      如果配置正确,您将收到一个 JSON 对象作为响应

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
        }
    2. 通过运行以下命令并观察输出,验证您是否可以访问集群机器配置

      $ curl -v https://api.<cluster_name>.<base_domain>:22623/healthz --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      Content-Length: 0
    3. 通过运行以下命令并观察输出,验证您是否可以访问端口上的每个集群应用程序

      $ curl http://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.<cluster-name>.<base domain>/
      cache-control: no-cacheHTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=39HoZgztDnzjJkq/JuLJMeoKNXlfiVv2YgZc09c3TBOBU4NI6kDXaJH1LdicNhN1UsQWzon4Dor9GWGfopaTEQ==; Path=/; Secure
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Tue, 17 Nov 2020 08:42:10 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=9b714eb87e93cf34853e87a92d6894be; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
    4. 通过运行以下命令并观察输出,验证您是否可以访问端口 443 上的每个集群应用程序

      $ curl https://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private

部署集群

您可以在兼容的云平台上安装 OpenShift Container Platform。

您只能在初始安装期间运行安装程序的 `create cluster` 命令一次。

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

  • 您已验证主机上的云提供商帐户是否具有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示一条错误消息,其中显示缺少的权限。

  • 可选:在创建集群之前,配置外部负载均衡器以代替默认负载均衡器。

    您不需要为安装程序指定 API 和 Ingress 静态地址。如果您选择此配置,则必须采取其他措施来定义接受来自每个引用的 vSphere 子网的 IP 地址的网络目标。请参阅“配置用户管理的负载均衡器”部分。

步骤
  • 更改到包含安装程序的目录并初始化集群部署

    $ ./openshift-install create cluster --dir <installation_directory> \ (1)
        --log-level=info (2)
    
    1 对于 `<installation_directory>`,请指定您自定义的 `./install-config.yaml` 文件的位置。
    2 要查看不同的安装详细信息,请指定 `warn`、`debug` 或 `error` 来代替 `info`。
验证

集群部署成功完成后

  • 终端将显示访问集群的说明,包括指向 Web 控制台的链接以及 `kubeadmin` 用户的凭据。

  • 凭据信息也会输出到 `<installation_directory>/.openshift_install.log`。

不要删除安装程序或安装程序创建的文件。两者都是删除集群所必需的。

示例输出
...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/myuser/install_dir/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.mycluster.example.com
INFO Login to the console with user: "kubeadmin", and password: "password"
INFO Time elapsed: 36m22s
  • 安装程序生成的 Ignition 配置文件包含在 24 小时后过期的证书,届时会自动续订。如果集群在证书续订前关闭,并在 24 小时后重新启动,集群会自动恢复过期的证书。例外情况是,您必须手动批准待处理的 node-bootstrapper 证书签名请求 (CSR) 以恢复 kubelet 证书。有关更多信息,请参阅从过期的控制平面证书中恢复文档。

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

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

创建注册表存储

安装集群后,必须为注册表 Operator 创建存储。

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

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

安装后,必须编辑镜像注册表 Operator 配置以将 managementStateRemoved 切换到 Managed。完成后,必须配置存储。

镜像注册表存储配置

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

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

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

为 VMware vSphere 配置注册表存储

作为集群管理员,安装后必须配置注册表以使用存储。

先决条件
  • 集群管理员权限。

  • VMware vSphere 上的集群。

  • 为您的集群配置的持久性存储,例如 Red Hat OpenShift Data Foundation。

    当您只有一个副本时,OpenShift Container Platform 支持镜像注册表存储的 ReadWriteOnce 访问。ReadWriteOnce 访问还需要注册表使用 Recreate 展开策略。要部署支持具有两个或多个副本的高可用性的镜像注册表,需要 ReadWriteMany 访问。

  • 必须具有“100Gi”容量。

测试表明,使用 RHEL 上的 NFS 服务器作为核心服务的存储后端存在问题。这包括 OpenShift Container Registry 和 Quay、用于监控存储的 Prometheus 以及用于日志存储的 Elasticsearch。因此,不建议使用 RHEL NFS 来支持核心服务使用的 PV。

市场上的其他 NFS 实现可能没有这些问题。请联系各个 NFS 实现供应商,以获取有关可能针对这些 OpenShift Container Platform 核心组件完成的任何测试的更多信息。

步骤
  1. 要配置注册表以使用存储,请更改 configs.imageregistry/cluster 资源中的 spec.storage.pvc

    使用共享存储时,请查看您的安全设置以防止外部访问。

  2. 验证您没有注册表 pod

    $ oc get pod -n openshift-image-registry -l docker-registry=default
    示例输出
    No resourses found in openshift-image-registry namespace

    如果您的输出中确实有注册表 pod,则无需继续执行此过程。

  3. 检查注册表配置

    $ oc edit configs.imageregistry.operator.openshift.io
    示例输出
    storage:
      pvc:
        claim: (1)
    1 保留 claim 字段为空白,以允许自动创建 image-registry-storage 持久卷声明 (PVC)。PVC 是根据默认存储类生成的。但是,请注意,默认存储类可能提供 ReadWriteOnce (RWO) 卷,例如 RADOS 块设备 (RBD),这在您复制到多个副本时可能会导致问题。
  4. 检查 clusteroperator 状态

    $ oc get clusteroperator image-registry
    示例输出
    NAME             VERSION                              AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    image-registry   4.7                                  True        False         False      6h50m

为 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 配置注册表

OpenShift Container Platform 的遥测访问

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

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

其他资源

后续步骤