在 Azure 上安装


OpenShift Container Platform 4.17

在 Azure 上安装 OpenShift Container Platform

Red Hat OpenShift Documentation Team

摘要

本文档论述了如何在 Azure 上安装 OpenShift Container Platform。

第 1 章 安装方法

您可以在安装程序置备或用户置备的基础架构上安装 OpenShift Container Platform。默认安装类型使用安装程序置备的基础架构,安装程序会在其中为集群置备底层基础架构。您还可以在您置备的基础架构上安装 OpenShift Container Platform。如果不使用安装程序置备的基础架构,您必须自己管理和维护集群资源。

如需有关安装程序置备和用户置备的安装过程的更多信息,请参阅 安装过程。

1.1. 在安装程序置备的基础架构上安装集群

您可以使用以下方法之一在 OpenShift Container Platform 安装程序置备的 Microsoft Azure 基础架构上安装集群:

  • 在 Azure 上快速安装集群:您可以在由 OpenShift Container Platform 安装程序置备的 Azure 基础架构上安装 OpenShift Container Platform。您可以使用默认配置选项快速安装集群。
  • 在 Azure 上安装自定义集群:您可以在安装程序置备的 Azure 基础架构上安装自定义集群。安装程序允许在安装阶段应用一些自定义。其它自定义选项可在安装后使用。
  • 使用自定义网络在 Azure 上安装集群:您可以在安装过程中自定义 OpenShift Container Platform 网络配置,以便集群可以与现有的 IP 地址分配共存,并遵循您的网络要求。
  • 在受限网络中的 Azure 上安装集群 :您可以通过在现有 Azure Virtual Network (VNet)上创建安装发行内容的内部镜像在受限网络中的 Azure 上安装集群。
  • 在 Azure 上将集群安装到现有的 VNet 中: 您可以在 Azure 上的现有 Azure Virtual Network(VNet)上安装 OpenShift Container Platform。如果您按照公司的说明设置了限制,可以使用这个安装方法,例如在创建新帐户或基础架构时的限制。
  • 在 Azure 上安装私有集群:您可以在 Azure 上将私有集群安装到现有 Azure Virtual Network(VNet)中。您可以使用此方法将 OpenShift Container Platform 部署到互联网中不可见的内部网络中。
  • 在 Azure 上将集群安装到一个政府区域:OpenShift Container Platform 可以部署到 Microsoft Azure Government(MAG)区域,这些区域是为需要运行敏感工作负载的美国政府机构、州和本地级别的政府机构、企业和其他需要运行敏感工作负载的美国客户而设计的。

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

您可以使用以下方法之一在您置备的 Azure 基础架构上安装集群:

1.3. 后续步骤

第 2 章 配置 Azure 帐户

在安装 OpenShift Container Platform 之前,您必须配置 Microsoft Azure 帐户来满足安装要求。

重要

所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语列表,请参阅 Azure 文档中的解决保留资源名称错误

2.1. Azure 帐户限值

OpenShift Container Platform 集群使用诸多 Microsoft Azure 组件,默认的 Azure 订阅和服务限值、配额和约束会影响您安装 OpenShift Container Platform 集群的能力。

重要

默认的限制因服务类别的不同(如 Free Trial 或 Pay-As-You-Go)以及系列的不同(如 Dv2 、F 或 G)而有所不同。例如,对于 Enterprise Agreement 订阅的默认限制是 350 个内核。

在 Azure 上安装默认集群前,请检查您的订阅类型的限制,如有必要,请提高帐户的配额限制。

下表总结了 Azure 组件,它们的限值会影响您安装和运行 OpenShift Container Platform 集群的能力。

组件默认所需的组件数默认 Azure 限值描述

vCPU

44

每个区域 20 个

默认集群需要 44 个 vCPU,因此您必须提高帐户限值。

默认情况下,每个集群创建以下实例:

  • 一台 Bootstrap 机器,在安装后删除
  • 三个 control plane 机器
  • 三个计算(compute)机器

因为 bootstrap 和 control plane 机器使用 Standard_D8s_v3 虚拟机 (使用 8 个 vCPU),因此计算机器使用 Standard_D4s_v3 虚拟机(使用 4 个 vCPU),所以默认集群需要 44 个 vCPU。bootstrap 节点 VM(使用 8 个 vCPU)只在安装过程中使用。

若要部署更多 worker 节点、启用自动扩展、部署大型工作负载或使用不同的实例类型,您必须进一步提高帐户的 vCPU 限值,以确保集群可以部署您需要的机器。

OS Disk

7

 

每个集群机器必须至少有 100 GB 存储和 300 IOPS。虽然这些值是最低支持的值,但对于具有密集型工作负载的生产环境集群和集群,建议使用更快的存储。有关优化性能存储的更多信息,请参阅"扩展和性能"部分中的页面标题为"优化存储"。

VNet

1

每个区域 1000 个

每个默认集群都需要一个虚拟网络 (VNet),此网络包括两个子网。

网络接口

7

每个区域 65,536 个

每个默认集群都需要 7 个网络接口。如果您要创建更多机器或者您部署的工作负载要创建负载均衡器,则集群会使用更多的网络接口。

网络安全组

2

5000

每个集群为 VNet 中的每个子网创建网络安全组。默认集群为 control plane 和计算节点子网创建网络安全组:

controlplane

允许从任何位置通过端口 6443 访问 control plane 机器

node

允许从互联网通过端口 80 和 443 访问 worker 节点

网络负载均衡器

3

每个区域 1000 个

每个集群都会创建以下负载均衡器

default

用于在 worker 机器之间对端口 80 和 443 的请求进行负载均衡的公共 IP 地址

internal

用于在 control plane 机器之间对端口 6443 和 22623 的请求进行负载均衡的专用 IP 地址

external

用于在 control plane 机器之间对端口 6443 的请求进行负载均衡的公共 IP 地址

如果您的应用程序创建了更多的 Kubernetes LoadBalancer 服务对象,您的集群会使用更多的负载均衡器。

公共 IP 地址

3

 

两个公共负载均衡器各自使用一个公共 IP 地址。bootstrap 机器也使用一个公共 IP 地址,以便您可以在安装期间通过 SSH 连接到该机器来进行故障排除。bootstrap 节点的 IP 地址仅在安装过程中使用。

专用 IP 地址

7

 

内部负载均衡器、三台 control plane 机器中的每一台以及三台 worker 机器中的每一台各自使用一个专用 IP 地址。

Spot VM vCPU(可选)

0

如果配置 spot 虚拟机,您的集群必须为每个计算节点有两个 spot VM vCPU。

每个区域 20 个

这是可选组件。要使用 spot 虚拟机,您必须将 Azure 默认限值增加到集群中至少有两倍的计算节点数量。

注意

不建议将 spot 虚拟机用于 control plane 节点。

其他资源

2.2. 在 Azure 中配置公共 DNS 区

要安装 OpenShift Container Platform,您使用的 Microsoft Azure 帐户必须在帐户中具有一个专用的公共托管 DNS 区。此区域必须对域具有权威。此服务为集群外部连接提供集群 DNS 解析和名称查询。

流程

  1. 标识您的域或子域,以及注册商(registrar)。您可以转移现有的域和注册商,或通过 Azure 或其他来源获取新的域和注册商。

    注意

    如需通过 Azure 购买域的更多信息,请参阅 Azure 文档中的购买 Azure 应用服务的自定义域名

  2. 如果您使用现有的域和注册商,请将其 DNS 迁移到 Azure。请参阅 Azure 文档中的将活动 DNS 名称迁移到 Azure 应用服务
  3. 为您的域配置 DNS。按照 Azure 文档中教程:在 Azure DNS 中托管域部分里的步骤,为您的域或子域创建一个公共托管区,提取新的权威名称服务器,并更新您的域使用的名称服务器的注册商记录。

    使用合适的根域(如 openshiftcorp.com)或子域(如 clusters.openshiftcorp.com)。

  4. 如果您使用子域,请按照您公司的流程将其委派记录添加到父域。

2.3. 提高 Azure 帐户限值

要提高帐户限值,请在 Azure 门户上提交支持请求。

注意

每一支持请求只能提高一种类型的配额。

流程

  1. 从 Azure 门户,点击左下角的 Help + suport
  2. 点击 New support request,然后选择所需的值:

    1. Issue type 列表中,选择 Service and subscription limits (quotas)
    2. Subscription 列表中,选择要修改的订阅。
    3. Quota type 列表中,选择要提高的配额。例如,选择 Compute-VM (cores-vCPUs) subscription limit increases 以增加 vCPU 的数量,这是安装集群所必须的。
    4. 点击 Next: Solutions
  3. Problem Details 页面中,提供您要提高配额所需的信息:

    1. 点击 Provide details,然后在 Quota details 窗口中提供所需的详情。
    2. 在 SUPPORT METHOD 和 CONTACT INFO 部分中,提供问题严重性和您的联系详情。
  4. 点击 Next: Review + create,然后点击 Create

2.4. 记录下订阅和租户 ID

安装程序需要与 Azure 帐户关联的订阅和租户 ID。您可以使用 Azure CLI 收集此信息。

先决条件

流程

  1. 运行以下命令登录到 Azure CLI:

    $ az login
  2. 确保您使用正确的订阅:

    1. 运行以下命令,查看可用订阅列表:

      $ az account list --refresh

      输出示例

      [
        {
          "cloudName": "AzureCloud",
          "id": "8xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "isDefault": true,
          "name": "Subscription Name 1",
          "state": "Enabled",
          "tenantId": "6xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "user": {
            "name": "you@example.com",
            "type": "user"
          }
        },
        {
          "cloudName": "AzureCloud",
          "id": "9xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "isDefault": false,
          "name": "Subscription Name 2",
          "state": "Enabled",
          "tenantId": "7xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "user": {
            "name": "you2@example.com",
            "type": "user"
          }
        }
      ]

    2. 运行以下命令,查看活跃帐户的详情,并确认这是您要使用的订阅:

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "8xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "isDefault": true,
        "name": "Subscription Name 1",
        "state": "Enabled",
        "tenantId": "6xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "user": {
          "name": "you@example.com",
          "type": "user"
        }
      }

  3. 如果您没有使用正确的订阅:

    1. 运行以下命令来更改活跃订阅:

      $ az account set -s <subscription_id>
    2. 运行以下命令验证您是否正在使用所需的订阅:

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "9xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "isDefault": true,
        "name": "Subscription Name 2",
        "state": "Enabled",
        "tenantId": "7xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "user": {
          "name": "you2@example.com",
          "type": "user"
        }
      }

  4. 记录输出中的 idtenantId 参数值。您需要这些值来安装 OpenShift Container Platform 集群。

2.5. 支持访问 Azure 资源的身份

OpenShift Container Platform 集群需要一个 Azure 身份来创建和管理 Azure 资源。因此,您需要以下身份之一来完成安装:

  • 服务主体
  • 系统分配的管理身份
  • 用户分配的受管身份

2.5.1. 所需的 Azure 角色

OpenShift Container Platform 集群需要一个 Azure 身份来创建和管理 Azure 资源。在创建身份前,请验证您的环境是否满足以下要求:

  • 用于创建身份的 Azure 帐户被分配 User Access AdministratorContributor 角色。在以下情况下需要这些角色:

    • 创建服务主体或用户分配的受管身份。
    • 在虚拟机上启用系统分配的受管身份。
  • 如果您要使用服务主体完成安装,请验证您用来创建身份的 Azure 帐户是否已被分配了 Microsoft Entra ID 中的 microsoft.directory/servicePrincipals/createAsOwner 权限。

要在 Azure 门户上设置角色,请参阅 Azure 文档中的使用 RBAC 和 Azure 门户管理对 Azure 资源的访问

2.5.2. 安装程序置备的基础架构所需的 Azure 权限

安装程序需要访问具有所需权限的 Azure 服务主体或受管身份,以部署集群并维护其每日操作。这些权限必须授予与身份关联的 Azure 订阅。

以下选项可供您使用:

  • 您可以为身份分配 ContributorUser Access Administrator 角色。分配这些角色是授予所有所需权限的最快速方法。

    有关分配角色的更多信息,请参阅 Azure 文档,使用 Azure 门户管理 Azure 资源的访问

  • 如果机构的安全策略需要更严格的权限集,您可以创建具有所需权限的自定义角色

在 Microsoft Azure 上创建 OpenShift Container Platform 集群需要以下权限。

例 2.1. 创建授权资源所需的权限

  • Microsoft.Authorization/policies/audit/action
  • Microsoft.Authorization/policies/auditIfNotExists/action
  • Microsoft.Authorization/roleAssignments/read
  • Microsoft.Authorization/roleAssignments/write

例 2.2. 创建计算资源所需的权限

  • Microsoft.Compute/availabilitySets/read
  • Microsoft.Compute/availabilitySets/write
  • Microsoft.Compute/disks/beginGetAccess/action
  • Microsoft.Compute/disks/delete
  • Microsoft.Compute/disks/read
  • Microsoft.Compute/disks/write
  • Microsoft.Compute/galleries/images/read
  • Microsoft.Compute/galleries/images/versions/read
  • Microsoft.Compute/galleries/images/versions/write
  • Microsoft.Compute/galleries/images/write
  • Microsoft.Compute/galleries/read
  • Microsoft.Compute/galleries/write
  • Microsoft.Compute/snapshots/read
  • Microsoft.Compute/snapshots/write
  • Microsoft.Compute/snapshots/delete
  • Microsoft.Compute/virtualMachines/delete
  • Microsoft.Compute/virtualMachines/powerOff/action
  • Microsoft.Compute/virtualMachines/read
  • Microsoft.Compute/virtualMachines/write

例 2.3. 创建身份管理资源所需的权限

  • Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
  • Microsoft.ManagedIdentity/userAssignedIdentities/read
  • Microsoft.ManagedIdentity/userAssignedIdentities/write

例 2.4. 创建网络资源所需的权限

  • Microsoft.Network/dnsZones/A/write
  • Microsoft.Network/dnsZones/CNAME/write
  • Microsoft.Network/dnszones/CNAME/read
  • Microsoft.Network/dnszones/read
  • Microsoft.Network/loadBalancers/backendAddressPools/join/action
  • Microsoft.Network/loadBalancers/backendAddressPools/read
  • Microsoft.Network/loadBalancers/backendAddressPools/write
  • Microsoft.Network/loadBalancers/read
  • Microsoft.Network/loadBalancers/write
  • Microsoft.Network/loadBalancers/inboundNatRules/read
  • Microsoft.Network/loadBalancers/inboundNatRules/write
  • Microsoft.Network/loadBalancers/inboundNatRules/join/action
  • Microsoft.Network/loadBalancers/inboundNatRules/delete
  • Microsoft.Network/routeTables/read
  • Microsoft.Network/routeTables/write
  • Microsoft.Network/routeTables/join/action
  • Microsoft.Network/networkInterfaces/delete
  • Microsoft.Network/networkInterfaces/join/action
  • Microsoft.Network/networkInterfaces/read
  • Microsoft.Network/networkInterfaces/write
  • Microsoft.Network/networkSecurityGroups/join/action
  • Microsoft.Network/networkSecurityGroups/read
  • Microsoft.Network/networkSecurityGroups/securityRules/delete
  • Microsoft.Network/networkSecurityGroups/securityRules/read
  • Microsoft.Network/networkSecurityGroups/securityRules/write
  • Microsoft.Network/networkSecurityGroups/write
  • Microsoft.Network/privateDnsZones/A/read
  • Microsoft.Network/privateDnsZones/A/write
  • Microsoft.Network/privateDnsZones/A/delete
  • Microsoft.Network/privateDnsZones/SOA/read
  • Microsoft.Network/privateDnsZones/read
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/read
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/write
  • Microsoft.Network/privateDnsZones/write
  • Microsoft.Network/publicIPAddresses/delete
  • Microsoft.Network/publicIPAddresses/join/action
  • Microsoft.Network/publicIPAddresses/read
  • Microsoft.Network/publicIPAddresses/write
  • Microsoft.Network/virtualNetworks/join/action
  • Microsoft.Network/virtualNetworks/read
  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read
  • Microsoft.Network/virtualNetworks/subnets/write
  • Microsoft.Network/virtualNetworks/write
注意

在 Azure 上创建私有 OpenShift Container Platform 集群不需要以下权限。

  • Microsoft.Network/dnsZones/A/write
  • Microsoft.Network/dnsZones/CNAME/write
  • Microsoft.Network/dnszones/CNAME/read
  • Microsoft.Network/dnszones/read

例 2.5. 检查资源健康状况所需的权限

  • Microsoft.Resourcehealth/healthevent/Activated/action
  • Microsoft.Resourcehealth/healthevent/InProgress/action
  • Microsoft.Resourcehealth/healthevent/Pending/action
  • Microsoft.Resourcehealth/healthevent/Resolved/action
  • Microsoft.Resourcehealth/healthevent/Updated/action

例 2.6. 创建资源组所需的权限

  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Resources/subscriptions/resourcegroups/write

例 2.7. 创建资源标签所需的权限

  • Microsoft.Resources/tags/write

例 2.8. 创建存储资源所需的权限

  • Microsoft.Storage/storageAccounts/blobServices/read
  • Microsoft.Storage/storageAccounts/blobServices/containers/write
  • Microsoft.Storage/storageAccounts/fileServices/read
  • Microsoft.Storage/storageAccounts/fileServices/shares/read
  • Microsoft.Storage/storageAccounts/fileServices/shares/write
  • Microsoft.Storage/storageAccounts/fileServices/shares/delete
  • Microsoft.Storage/storageAccounts/listKeys/action
  • Microsoft.Storage/storageAccounts/read
  • Microsoft.Storage/storageAccounts/write

例 2.9. 为镜像 registry 创建私有存储端点的可选权限

  • Microsoft.Network/privateEndpoints/write
  • Microsoft.Network/privateEndpoints/read
  • Microsoft.Network/privateEndpoints/privateDnsZoneGroups/write
  • Microsoft.Network/privateEndpoints/privateDnsZoneGroups/read
  • Microsoft.Network/privateDnsZones/join/action
  • Microsoft.Storage/storageAccounts/PrivateEndpointConnectionsApproval/action

例 2.10. 创建 marketplace 虚拟机资源的可选权限

  • Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read
  • Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write

例 2.11. 创建计算资源的可选权限

  • Microsoft.Compute/availabilitySets/delete
  • Microsoft.Compute/images/read
  • Microsoft.Compute/images/write
  • Microsoft.Compute/images/delete

例 2.12. 启用用户管理加密的可选权限

  • Microsoft.Compute/diskEncryptionSets/read
  • Microsoft.Compute/diskEncryptionSets/write
  • Microsoft.Compute/diskEncryptionSets/delete
  • Microsoft.KeyVault/vaults/read
  • Microsoft.KeyVault/vaults/write
  • Microsoft.KeyVault/vaults/delete
  • Microsoft.KeyVault/vaults/deploy/action
  • Microsoft.KeyVault/vaults/keys/read
  • Microsoft.KeyVault/vaults/keys/write
  • Microsoft.Features/providers/features/register/action

例 2.13. 使用 NatGateway 出站类型安装集群的可选权限

  • Microsoft.Network/natGateways/read
  • Microsoft.Network/natGateways/write

例 2.14. 使用 Azure 网络地址转换 (NAT) 安装私有集群的可选权限

  • Microsoft.Network/natGateways/join/action
  • Microsoft.Network/natGateways/read
  • Microsoft.Network/natGateways/write

例 2.15. 使用 Azure 防火墙安装私有集群的可选权限

  • Microsoft.Network/azureFirewalls/applicationRuleCollections/write
  • Microsoft.Network/azureFirewalls/read
  • Microsoft.Network/azureFirewalls/write
  • Microsoft.Network/routeTables/join/action
  • Microsoft.Network/routeTables/read
  • Microsoft.Network/routeTables/routes/read
  • Microsoft.Network/routeTables/routes/write
  • Microsoft.Network/routeTables/write
  • Microsoft.Network/virtualNetworks/peer/action
  • Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read
  • Microsoft.Network/virtualNetworks/virtualNetworkPeerings/write

例 2.16. 运行收集 bootstrap 的可选权限

  • Microsoft.Compute/virtualMachines/retrieveBootDiagnosticsData/action

删除 Microsoft Azure 上的 OpenShift Container Platform 集群需要以下权限。您可以使用相同的权限删除 Azure 上的私有 OpenShift Container Platform 集群。

例 2.17. 删除授权资源所需的权限

  • Microsoft.Authorization/roleAssignments/delete

例 2.18. 删除计算资源所需的权限

  • Microsoft.Compute/disks/delete
  • Microsoft.Compute/galleries/delete
  • Microsoft.Compute/galleries/images/delete
  • Microsoft.Compute/galleries/images/versions/delete
  • Microsoft.Compute/virtualMachines/delete

例 2.19. 删除身份管理资源所需的权限

  • Microsoft.ManagedIdentity/userAssignedIdentities/delete

例 2.20. 删除网络资源所需的权限

  • Microsoft.Network/dnszones/read
  • Microsoft.Network/dnsZones/A/read
  • Microsoft.Network/dnsZones/A/delete
  • Microsoft.Network/dnsZones/CNAME/read
  • Microsoft.Network/dnsZones/CNAME/delete
  • Microsoft.Network/loadBalancers/delete
  • Microsoft.Network/networkInterfaces/delete
  • Microsoft.Network/networkSecurityGroups/delete
  • Microsoft.Network/privateDnsZones/read
  • Microsoft.Network/privateDnsZones/A/read
  • Microsoft.Network/privateDnsZones/delete
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/delete
  • Microsoft.Network/publicIPAddresses/delete
  • Microsoft.Network/virtualNetworks/delete
注意

在 Azure 上删除私有 OpenShift Container Platform 集群不需要以下权限。

  • Microsoft.Network/dnszones/read
  • Microsoft.Network/dnsZones/A/read
  • Microsoft.Network/dnsZones/A/delete
  • Microsoft.Network/dnsZones/CNAME/read
  • Microsoft.Network/dnsZones/CNAME/delete

例 2.21. 检查资源健康状况所需的权限

  • Microsoft.Resourcehealth/healthevent/Activated/action
  • Microsoft.Resourcehealth/healthevent/Resolved/action
  • Microsoft.Resourcehealth/healthevent/Updated/action

例 2.22. 删除资源组所需的权限

  • Microsoft.Resources/subscriptions/resourcegroups/delete

例 2.23. 删除存储资源所需的权限

  • Microsoft.Storage/storageAccounts/delete
  • Microsoft.Storage/storageAccounts/listKeys/action
注意

要在 Azure 上安装 OpenShift Container Platform,您必须将权限范围到您的订阅。之后,您可以将这些权限重新限定到安装程序创建的资源组。如果其他资源组中存在公共 DNS 区域,则必须始终将网络 DNS 区域相关权限应用到您的订阅。默认情况下,OpenShift Container Platform 安装程序分配 Contributor 角色的 Azure 身份。

在删除 OpenShift Container Platform 集群时,您可以将订阅的所有权限限定到您的订阅。

2.5.3. 使用 Azure 管理的身份

安装程序需要一个 Azure 身份来完成安装。您可以使用系统分配或用户分配的受管身份。

如果无法使用受管身份,您可以使用服务主体。

流程

  1. 如果您使用系统分配的受管身份,请在您要从其运行安装程序的虚拟机上启用它。
  2. 如果您使用用户分配的受管身份:

    1. 将它分配给您要从中运行安装程序的虚拟机。
    2. 记录其客户端 ID。安装集群时需要这个值。

      有关查看用户分配受管身份的详情的更多信息,请参阅 Microsoft Azure 文档来列出用户分配的管理身份

  3. 验证是否为受管身份分配了所需的权限。

2.5.4. 创建服务主体

安装程序需要一个 Azure 身份来完成安装。您可以使用服务主体。

如果无法使用服务主体,您可以使用受管身份。

先决条件

  • 已安装或更新 Azure CLI
  • 您有一个 Azure 订阅 ID。
  • 如果您没有将 ContributorUser Administrator Access 角色分配给服务主体,您已创建了具有所需 Azure 权限的自定义角色。

流程

  1. 运行以下命令,为您的帐户创建服务主体:

    $ az ad sp create-for-rbac --role <role_name> \1
         --name <service_principal> \2
         --scopes /subscriptions/<subscription_id> 3
    1
    定义角色名称。您可以使用 Contributor 角色,或者指定包含所需权限的自定义角色。
    2
    定义服务主体名称。
    3
    指定订阅 ID。

    输出示例

    Creating 'Contributor' role assignment under scope '/subscriptions/<subscription_id>'
    The output includes credentials that you must protect. Be sure that you do not
    include these credentials in your code or check the credentials into your source
    control. For more information, see https://aka.ms/azadsp-cli
    {
      "appId": "axxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": <service_principal>",
      "password": "00000000-0000-0000-0000-000000000000",
      "tenantId": "8xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }

  2. 记录输出中的 appIdpassword 参数的值。安装集群时需要这些值。
  3. 如果您将 Contributor 角色应用到服务主体,请运行以下命令来分配 User Administrator Access 角色:

    $ az role assignment create --role "User Access Administrator" \
      --assignee-object-id $(az ad sp show --id <appId> --query id -o tsv) 1
      --scope /subscriptions/<subscription_id> 2
    1
    为您的服务主体指定 appId 参数值。
    2
    指定订阅 ID。

2.6. 支持的 Azure Marketplace 区域

使用 Azure Marketplace 镜像安装集群可供购买在北美和 EMEA 中提供的客户提供服务。

虽然优惠必须在北美或 EMEA 处购买,但您可以将集群部署到 OpenShift Container Platform 支持的 Azure 公共分区中。

注意

Azure Government 区域不支持使用 Azure Marketplace 镜像部署集群。

2.7. 支持的 Azure 区域

安装程序会根据您的订阅动态地生成可用的 Microsoft Azure 区域列表。

支持的 Azure 公共区域
  • australiacentral (Australia Central)
  • australiaeast (Australia East)
  • australiasoutheast (Australia South East)
  • brazilsouth (Brazil South)
  • canadacentral (Canada Central)
  • canadaeast (Canada East)
  • centralindia (Central India)
  • centralus (Central US)
  • eastasia (East Asia)
  • eastus (East US)
  • eastus2 (East US 2)
  • francecentral (France Central)
  • germanywestcentral (Germany West Central)
  • israelcentral (Israel Central)
  • italynorth (Italy North)
  • japaneast (Japan East)
  • japanwest (Japan West)
  • koreacentral (Korea Central)
  • koreasouth (Korea South)
  • mexicocentral (Mexico Central)
  • northcentralus (North Central US)
  • northeurope (North Europe)
  • norwayeast (Norway East)
  • polandcentral (Poland Central)
  • qatarcentral (Qatar Central)
  • southafricanorth (South Africa North)
  • southcentralus (South Central US)
  • southeastasia (Southeast Asia)
  • southindia (South India)
  • spaincentral (Spain Central)
  • swedencentral (Sweden Central)
  • switzerlandnorth (Switzerland North)
  • uaenorth (UAE North)
  • uksouth (UK South)
  • ukwest (UK West)
  • westcentralus (West Central US)
  • westeurope (West Europe)
  • westindia (West India)
  • westus (West US)
  • westus2 (West US 2)
  • westus3 (West US 3)
支持的 Azure 政府区域

OpenShift Container Platform 4.6 添加了对以下 Microsoft Azure Government(MAG)区域的支持:

  • usgovtexas (US Gov Texas)
  • usgovvirginia (US Gov Virginia)

您可以参阅 Azure 文档来了解与所有可用 MAG 区域的信息。其他 MAG 区域应该可以与 OpenShift Container Platform 一起工作,但并没有经过测试。

2.8. 后续步骤

第 3 章 安装程序置备的基础架构

3.1. 准备在 Azure 上安装集群

要准备在 Azure 上安装 OpenShift Container Platform 集群,请完成以下步骤:

3.1.1. OpenShift Container Platform 互联网访问

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

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

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

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

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

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

将密钥传递给节点后,您可以使用密钥对作为用户 核心 通过 SSH 连接到 RHCOS 节点。若要通过 SSH 访问节点,必须由 SSH 为您的本地用户管理私钥身份。

如果要通过 SSH 连接到集群节点来执行安装调试或灾难恢复,则必须在安装过程中提供 SSH 公钥。./openshift-install gather 命令还需要在集群节点上设置 SSH 公钥。

重要

不要在生产环境中跳过这个过程,在生产环境中需要灾难恢复和调试。

注意

您必须使用本地密钥,而不是使用特定平台方法配置 的密钥,如 AWS 密钥对

流程

  1. 如果您在本地计算机上没有可用于在集群节点上进行身份验证的现有 SSH 密钥对,请创建一个。例如,在使用 Linux 操作系统的计算机上运行以下命令:

    $ ssh-keygen -t ed25519 -N '' -f <path>/<file_name> 1
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

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

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub

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

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

    注意

    在某些发行版中,自动管理默认 SSH 私钥身份,如 ~/.ssh/id_rsa~/.ssh/id_dsa

    1. 如果 ssh-agent 进程尚未为您的本地用户运行,请将其作为后台任务启动:

      $ eval "$(ssh-agent -s)"

      输出示例

      Agent pid 31874

      注意

      如果集群处于 FIPS 模式,则只使用 FIPS 兼容算法来生成 SSH 密钥。密钥必须是 RSA 或 ECDSA。

  4. 将 SSH 私钥添加到 ssh-agent

    $ ssh-add <path>/<file_name> 1
    1
    指定 SSH 私钥的路径和文件名,如 ~/.ssh/id_ed25519.pub

    输出示例

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

后续步骤

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

3.1.3. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,至少有 1.2 GB 本地磁盘空间。

流程

  1. 进入 Red Hat Hybrid Cloud Console 上的 Cluster Type 页。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 在页的 Run it yourself 部分中选择您的基础架构供应商。
  3. OpenShift 安装程序下的下拉菜单中选择您的主机操作系统和架构,然后点下载安装程序
  4. 将下载的文件保存在要存储安装配置文件的目录中。

    重要
    • 安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。删除集群需要这两个文件。
    • 删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。
  5. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

另外,您还可以从红帽客户门户网站检索安装程序,您可以在其中指定要下载的安装程序版本。但是,您需要有一个有效的订阅才能访问此页。

3.1.4. 安装 OpenShift CLI

您可以安装 OpenShift CLI(oc)来使用命令行界面与 OpenShift Container Platform 进行交互。您可以在 Linux、Windows 或 macOS 上安装 oc

重要

如果安装了旧版本的 oc,则可能无法使用 OpenShift Container Platform 4.17 中的所有命令。下载并安装新版本的 oc

在 Linux 上安装 OpenShift CLI

您可以按照以下流程在 Linux 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 产品变体 下拉列表中选择架构。
  3. 版本 下拉列表中选择适当的版本。
  4. OpenShift v4.17 Linux Clients 条目旁的 Download Now 来保存文件。
  5. 解包存档:

    $ tar xvf <file>
  6. oc 二进制文件放到 PATH 中的目录中

    要查看您的 PATH,请执行以下命令:

    $ echo $PATH

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    $ oc <command>
在 Windows 上安装 OpenShift CLI

您可以按照以下流程在 Windows 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 Windows Client 条目旁的 Download Now 来保存文件。
  4. 使用 ZIP 程序解压存档。
  5. oc 二进制文件移到 PATH 中的目录中

    要查看您的 PATH,请打开命令提示并执行以下命令:

    C:\> path

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    C:\> oc <command>
在 macOS 上安装 OpenShift CLI

您可以按照以下流程在 macOS 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 macOS Clients 条目旁的 Download Now 来保存文件。

    注意

    对于 macOS arm64,请选择 OpenShift v4.17 macOS arm64 Client 条目。

  4. 解包和解压存档。
  5. oc 二进制文件移到 PATH 的目录中。

    要查看您的 PATH,请打开终端并执行以下命令:

    $ echo $PATH

验证

  • 使用 oc 命令验证安装:

    $ oc <command>

3.1.5. OpenShift Container Platform 的 Telemetry 访问

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

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

其他资源

3.1.6. 准备 Azure 磁盘加密集

OpenShift Container Platform 安装程序可以使用带有用户管理的密钥的现有磁盘加密集。要启用此功能,您可以在 Azure 中创建磁盘加密集,并为安装程序提供密钥。

流程

  1. 运行以下命令,为 Azure 资源组设置以下环境变量:

    $ export RESOURCEGROUP="<resource_group>" \1
        LOCATION="<location>" 2
    1
    指定您要创建磁盘加密集和加密密钥的 Azure 资源组名称。为了避免在销毁集群后丢失对密钥的访问,您应该在与安装集群的资源组不同的资源组中创建 Disk Encryption Set。
    2
    指定您要创建资源组的 Azure 位置。
  2. 运行以下命令,为 Azure Key Vault 和 Disk Encryption Set 设置以下环境变量:

    $ export KEYVAULT_NAME="<keyvault_name>" \1
        KEYVAULT_KEY_NAME="<keyvault_key_name>" \2
        DISK_ENCRYPTION_SET_NAME="<disk_encryption_set_name>" 3
    1
    指定您要创建的 Azure Key Vault 的名称。
    2
    指定您要创建的加密密钥名称。
    3
    指定您要创建的磁盘加密集的名称。
  3. 运行以下命令,为您的 Azure Service Principal 设置环境变量:

    $ export CLUSTER_SP_ID="<service_principal_id>" 1
    1
    指定用于此安装的服务主体的 ID。
  4. 运行以下命令,在 Azure 中启用主机级别加密:

    $ az feature register --namespace "Microsoft.Compute" --name "EncryptionAtHost"
    $ az feature show --namespace Microsoft.Compute --name EncryptionAtHost
    $ az provider register -n Microsoft.Compute
  5. 运行以下命令,创建一个 Azure 资源组来保存磁盘加密集和相关资源:

    $ az group create --name $RESOURCEGROUP --location $LOCATION
  6. 运行以下命令来创建 Azure 密钥库:

    $ az keyvault create -n $KEYVAULT_NAME -g $RESOURCEGROUP -l $LOCATION \
        --enable-purge-protection true
  7. 运行以下命令,在密钥 vault 中创建加密密钥:

    $ az keyvault key create --vault-name $KEYVAULT_NAME -n $KEYVAULT_KEY_NAME \
        --protection software
  8. 运行以下命令捕获密钥 vault 的 ID:

    $ KEYVAULT_ID=$(az keyvault show --name $KEYVAULT_NAME --query "[id]" -o tsv)
  9. 运行以下命令,捕获密钥 vault 中的密钥 URL:

    $ KEYVAULT_KEY_URL=$(az keyvault key show --vault-name $KEYVAULT_NAME --name \
        $KEYVAULT_KEY_NAME --query "[key.kid]" -o tsv)
  10. 运行以下命令来创建磁盘加密集:

    $ az disk-encryption-set create -n $DISK_ENCRYPTION_SET_NAME -l $LOCATION -g \
        $RESOURCEGROUP --source-vault $KEYVAULT_ID --key-url $KEYVAULT_KEY_URL
  11. 运行以下命令,为 DiskEncryptionSet 资源授予对密钥 vault 的访问权限:

    $ DES_IDENTITY=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g \
        $RESOURCEGROUP --query "[identity.principalId]" -o tsv)
    $ az keyvault set-policy -n $KEYVAULT_NAME -g $RESOURCEGROUP --object-id \
        $DES_IDENTITY --key-permissions wrapkey unwrapkey get
  12. 运行以下命令,授予 Azure Service Principal 权限来读取 DiskEncryptionSet:

    $ DES_RESOURCE_ID=$(az disk-encryption-set show -n $DISK_ENCRYPTION_SET_NAME -g \
        $RESOURCEGROUP --query "[id]" -o tsv)
    $ az role assignment create --assignee $CLUSTER_SP_ID --role "<reader_role>" \1
        --scope $DES_RESOURCE_ID -o jsonc
    1
    指定对磁盘加密集的读取权限的 Azure 角色。您可以使用 Owner 角色或具有所需权限的自定义角色。

3.2. 在 Azure 上安装集群

您可以使用默认配置选项在 Microsoft Azure 上安装集群。

3.2.1. 部署集群

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

重要

在初始安装过程中,您只能运行安装程序的 create cluster 命令一次。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 您有服务主体的应用程序 ID 和密码。

流程

  1. 可选: 如果您在此计算机上运行安装程序,并希望使用替代服务主体,请转至 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 进入包含安装程序的目录并初始化集群部署:

    $ ./openshift-install create cluster --dir <installation_directory> \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定要存储安装程序创建的文件的目录名称。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 info

    在指定目录时:

    • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
    • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
  3. 在提示符处提供值:

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

      注意

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

    2. 选择 azure 作为目标平台。

      如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

    3. 为您的订阅和服务主体指定以下 Azure 参数值:

      • Azure subscription id :输入用于集群的订阅 ID。
      • Azure 租户 id :输入租户 ID。
      • Azure 服务主体客户端 id :输入其应用程序 ID。
      • Azure 服务主体客户端 secret :输入其密码。
    4. 选择要将集群部署到的区域。
    5. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
    6. 为集群输入一个描述性名称。

      重要

      所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语列表,请参阅 Azure 文档中的解决保留资源名称错误

    7. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

验证

当集群部署成功完成时:

  • 终端会显示用于访问集群的说明,包括指向 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

3.2.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

其他资源

  • 有关访问和了解 OpenShift Container Platform Web 控制台的更多信息,请参阅访问 Web 控制台

3.2.3. 后续步骤

3.3. 使用自定义在 Azure 上安装集群

您可以在安装程序在 Microsoft Azure 上置备的基础架构上安装自定义的集群。要自定义安装,请在安装集群前修改 install-config.yaml 文件中的参数。

3.3.1. 使用 Azure Marketplace 产品

使用 Azure Marketplace 产品可让您部署 OpenShift Container Platform 集群,该集群按照使用付费(按小时、每个内核)进行计费,同时仍由红帽直接支持。

要使用 Azure Marketplace 产品部署 OpenShift Container Platform 集群,您必须首先获取 Azure Marketplace 镜像。安装程序使用这个镜像来部署 worker 或 control plane 节点。在获取您的镜像时,请考虑以下事项:

  • 虽然镜像相同,但 Azure Marketplace publisher 根据您的区域。如果您位于北美,请将 redhat 指定为发布者。如果您位于 EMEA,请将 redhat-limited 指定为发布者。
  • 此项优惠包括 rh-ocp-worker SKU 和 rh-ocp-worker-gen1 SKU。rh-ocp-worker SKU 代表 Hyper-V 生成版本 2 虚拟机镜像。OpenShift Container Platform 中使用的默认实例类型与版本 2 兼容。如果您计划使用与版本 1 兼容的实例类型,请使用与 rh-ocp-worker-gen1 SKU 关联的镜像。rh-ocp-worker-gen1 SKU 代表 Hyper-V 版本 1 虚拟机镜像。
重要

在使用 64 位 ARM 实例的集群上不支持使用 Azure marketplace 安装镜像。

先决条件

  • 已安装 Azure CLI 客户端 (az)
  • 您的 Azure 帐户为产品授权,您使用 Azure CLI 客户端登录到此帐户。

流程

  1. 运行以下命令之一,显示所有可用的 OpenShift Container Platform 镜像:

    • 北美:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  -----------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-ocp-worker:4.15.2024072409              4.15.2024072409
      rh-ocp-worker  RedHat          rh-ocp-worker-gen1  RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409         4.15.2024072409

    • 欧洲、中东和非洲地区:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                                     Version
      -------------  --------------  ------------------  --------------------------------------------------------------          -----------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.15.2024072409              4.15.2024072409
      rh-ocp-worker  redhat-limited  rh-ocp-worker-gen1  redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409         4.15.2024072409

    注意

    使用可用于 compute 和 control plane 节点的最新镜像。如果需要,您的虚拟机会在安装过程中自动升级。

  2. 运行以下命令之一检查您的所提供的镜像:

    • 北美:

      $ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  3. 运行以下命令之一查看提供的术语:

    • 北美:

      $ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  4. 运行以下命令之一接受产品条款:

    • 北美:

      $ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  5. 记录您的所提供的镜像详情。在部署集群前,您必须使用 publisher, offer, sku, 和 version 的值来更新 install-config.yaml 文件中的 compute 部分。您还可以更新 controlPlane 部分,以使用指定镜像详情或 defaultMachinePlatform 部分部署 control plane 机器,以使用指定镜像详情部署 control plane 和计算机器。将最新的可用镜像用于 control plane 和计算节点。

使用 Azure Marketplace 计算节点的 install-config.yaml 文件示例

apiVersion: v1
baseDomain: example.com
compute:
- hyperthreading: Enabled
  name: worker
  platform:
    azure:
      type: Standard_D4s_v5
      osImage:
        publisher: redhat
        offer: rh-ocp-worker
        sku: rh-ocp-worker
        version: 413.92.2023101700
  replicas: 3

3.3.2. 创建安装配置文件

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

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 创建 install-config.yaml 文件。

    1. 进入包含安装程序的目录并运行以下命令:

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

      在指定目录时:

      • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
      • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
    2. 在提示符处,提供云的配置详情:

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

        注意

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

      2. 选择 azure 作为目标平台。

        如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

      3. 为您的订阅输入以下 Azure 参数值:

        • Azure subscription id :输入用于集群的订阅 ID。
        • Azure 租户 id :输入租户 ID。
      4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

        • 如果您使用服务主体,请输入其应用程序 ID。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请指定其客户端 ID。
      5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

        • 如果您使用服务主体,请输入其密码。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请将此值设为空白。
      6. 选择要将集群部署到的区域。
      7. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      8. 为集群输入一个描述性名称。

        重要

        所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语的列表,请参阅 Azure 文档中的解决预留资源名称错误

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

    注意

    如果要安装三节点集群,请确保将 compute.replicas 参数设置为 0。这样可确保集群的 control plane 可以调度。如需更多信息,请参阅"在 Azure 上安装三节点集群"。

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

    重要

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

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

3.3.2.1. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 3.1. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

其他资源

3.3.2.2. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 3.1. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
3.3.2.3. 在 64 位 ARM 基础架构上为 Azure 测试的实例类型

以下 Microsoft Azure ARM64 实例类型已使用 OpenShift Container Platform 测试。

例 3.2. 基于 64 位 ARM 架构的机器类型

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
3.3.2.4. 为 Azure 虚拟机启用可信启动

在 Azure 上安装集群时,您可以启用两个可信启动功能: 安全引导虚拟化可信平台模块

有关支持可信启动功能的虚拟机大小的更多信息,请参阅 虚拟机大小

重要

可信启动只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用可信启动:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节,仅在计算节点上启用可信启动:

      compute:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节在所有节点上启用可信启动:

      platform:
        azure:
          settings:
            securityType: TrustedLaunch
            trustedLaunch:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
3.3.2.5. 启用机密虚拟机

您可在安装集群前启用机密虚拟机。您可以为计算节点、control plane 节点或所有节点启用机密虚拟机。

重要

使用机密虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

您可以使用带有以下虚拟机大小的机密虚拟机:

  • DCasv5-series
  • DCadsv5-series
  • ECasv5-series
  • ECadsv5-series
重要

64 位 ARM 架构目前不支持机密虚拟机。

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用机密虚拟机:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,仅在计算节点上启用机密虚拟机:

      compute:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,在所有节点上启用机密虚拟机:

      platform:
        azure:
          settings:
            securityType: ConfidentialVM
            confidentialVM:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
          osDisk:
            securityProfile:
              securityEncryptionType: VMGuestStateOnly
3.3.2.6. Azure 的自定义 install-config.yaml 文件示例

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

重要

此示例 YAML 文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件,并进行修改。

apiVersion: v1
baseDomain: example.com 1
controlPlane: 2
  hyperthreading: Enabled 3 4
  name: master
  platform:
    azure:
      encryptionAtHost: true
      ultraSSDCapability: Enabled
      osDisk:
        diskSizeGB: 1024 5
        diskType: Premium_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      type: Standard_D8s_v3
  replicas: 3
compute: 6
- hyperthreading: Enabled 7 8
  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 9
        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      zones: 10
      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 11
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 12
  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      osImage: 13
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 14
    region: centralus 15
    resourceGroupName: existing_resource_group 16
    outboundType: Loadbalancer
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 17
fips: false 18
sshKey: ssh-ed25519 AAAA... 19
1 11 15 17
必需。安装程序会提示您输入这个值。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4 8
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您禁用并发多线程,请为您的机器使用较大的虚拟机类型,如 Standard_D8s_v3

5 9
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
10
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
12
要安装的集群网络插件。默认值 OVNKubernetes 是唯一支持的值。
13
可选:应该用来引导 control plane 和计算机器的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。platform.azure.defaultMachinePlatform.osImage 下的 publisher, offer, sku, 和 version 参数应用到 control plane 和计算机器。如果设置了 controlPlane.platform.azure.osImagecompute.platform.azure.osImage 下的参数,它们会覆盖 platform.azure.defaultMachinePlatform.osImage 参数。
14
指定包含基域的 DNS 区的资源组的名称。
16
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
18
是否启用或禁用 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。

19
您可以选择提供您用来访问集群中机器的 sshKey 值。
注意

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

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

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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.3.3. 为 Azure 配置用户定义的标签

在 OpenShift Container Platform 中,您可以使用标签对资源进行分组,并管理资源访问和成本。标签仅应用于 OpenShift Container Platform 安装程序及其核心 Operator 等资源,如 Machine API Operator、Cluster Ingress Operator、Cluster Image Registry Operator。OpenShift Container Platform 由以下类型的标签组成:

OpenShift Container Platform 标签
默认情况下,OpenShift Container Platform 安装程序会将 OpenShift Container Platform 标签附加到 Azure 资源。这些 OpenShift Container Platform 标签无法被用户访问。OpenShift Container Platform 标签的格式为 kubernetes.io_cluster.<cluster_id>:owned,其中 <cluster_id> 是集群的基础架构资源中的 .status.infrastructureName 的值。
用户定义的标签(tag)

在安装过程中在 install-config.yaml 文件中手动创建用户定义的标签。在创建用户定义的标签时,您必须考虑以下点:

  • Azure 资源上的用户定义的标签只能在 OpenShift Container Platform 集群创建过程中定义,且无法在集群创建后修改。
  • 对用户定义的标签的支持仅适用于 Azure Public Cloud 中创建的资源。
  • 升级到 OpenShift Container Platform 4.17 的 OpenShift Container Platform 集群不支持用户定义的标签。
3.3.3.1. 为 Azure 创建用户定义的标签

要定义用户定义的标签列表,请编辑 install-config.yaml 文件中的 .platform.azure.userTags 字段。

流程

  • 指定 .platform.azure.userTags 字段,如以下 install-config.yaml 文件所示:

    apiVersion: v1
    baseDomain: example.com
    #...
    platform:
      azure:
        userTags: 1
          <key>: <value> 2
    #...
    1
    定义安装程序作为标签添加到它创建的所有 Azure 资源的额外键和值。
    2
    指定键和值。您可以为资源组和资源配置最多 10 个标签。标签键不区分大小写。有关指定用户定义的标签的要求的更多信息,请参阅"用户定义标签要求"部分。

    install-config.yaml 文件示例

    apiVersion: v1
    baseDomain: example.com
    #...
    platform:
      azure:
        userTags:
          createdBy: user
          environment: dev
    #...

验证

  • 运行以下命令,访问为 Azure 资源创建用户定义的标签列表:

    $ oc get infrastructures.config.openshift.io cluster -o=jsonpath-as-json='{.status.platformStatus.azure.resourceTags}'

    输出示例

    [
        [
            {
                "key": "createdBy",
                "value": "user"
            },
            {
                "key": "environment",
                "value": "dev"
            }
        ]
    ]

3.3.3.2. 用户定义的标签要求

用户定义的标签有以下要求:

  • tag 键必须最多有 128 个字符。
  • tag 键必须以字母开头。
  • tag 键必须以字母、数字或下划线结尾。
  • tag 键只能包含字母、数字、下划线(_)、句点(.)和连字符(-)。
  • tag 键不能指定为 name
  • tag 键不能有以下前缀:

    • kubernetes.io
    • openshift.io
    • microsoft
    • azure
    • windows
  • tag 值最大为 256 个字符。

有关 Azure 标签的更多信息,请参阅 Azure 用户定义的标签

3.3.4. 在 kube-system 项目中存储管理员级别的 secret 的替代方案

默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:

3.3.4.1. 手动创建长期凭证

在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  3. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  4. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 自定义资源 (CR) 列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。

    此命令为每个 CredentialsRequest 对象创建一个 YAML 文件。

    CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
      ...

  5. 在之前生成的 openshift-install 清单目录中为 secret 创建 YAML 文件。secret 必须使用在 spec.secretRef 中为每个 CredentialsRequest 定义的命名空间和 secret 名称存储。

    带有 secret 的 CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
          ...
      secretRef:
        name: <component_secret>
        namespace: <component_namespace>
      ...

    Secret 对象示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <component_secret>
      namespace: <component_namespace>
    data:
      azure_subscription_id: <base64_encoded_azure_subscription_id>
      azure_client_id: <base64_encoded_azure_client_id>
      azure_client_secret: <base64_encoded_azure_client_secret>
      azure_tenant_id: <base64_encoded_azure_tenant_id>
      azure_resource_prefix: <base64_encoded_azure_resource_prefix>
      azure_resourcegroup: <base64_encoded_azure_resourcegroup>
      azure_region: <base64_encoded_azure_region>

重要

在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。

3.3.4.2. 配置 Azure 集群以使用短期凭证

要安装使用 Microsoft Entra Workload ID 的集群,您必须配置 Cloud Credential Operator 工具,并为集群创建所需的 Azure 资源。

3.3.4.2.1. 配置 Cloud Credential Operator 工具

当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。

注意

ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。

先决条件

  • 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
  • 已安装 OpenShift CLI(oc)。
  • 您已为 ccoctl 工具创建了全局 Microsoft Azure 帐户,用于以下权限:

    例 3.3. 所需的 Azure 权限

    • Microsoft.Resources/subscriptions/resourceGroups/read
    • Microsoft.Resources/subscriptions/resourceGroups/write
    • Microsoft.Resources/subscriptions/resourceGroups/delete
    • Microsoft.Authorization/roleAssignments/read
    • Microsoft.Authorization/roleAssignments/delete
    • Microsoft.Authorization/roleAssignments/write
    • Microsoft.Authorization/roleDefinitions/read
    • Microsoft.Authorization/roleDefinitions/write
    • Microsoft.Authorization/roleDefinitions/delete
    • Microsoft.Storage/storageAccounts/listkeys/action
    • Microsoft.Storage/storageAccounts/delete
    • Microsoft.Storage/storageAccounts/read
    • Microsoft.Storage/storageAccounts/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/delete
    • Microsoft.Storage/storageAccounts/blobServices/containers/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/delete
    • Microsoft.ManagedIdentity/userAssignedIdentities/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/delete
    • Microsoft.Storage/register/action
    • Microsoft.ManagedIdentity/register/action

流程

  1. 运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    注意

    确保 $RELEASE_IMAGE 的架构与将使用 ccoctl 工具的环境架构相匹配。

  3. 运行以下命令,将 CCO 容器镜像中的 ccoctl 二进制文件提取到 OpenShift Container Platform 发行镜像中:

    $ oc image extract $CCO_IMAGE \
      --file="/usr/bin/ccoctl.<rhel_version>" \1
      -a ~/.pull-secret
    1
    对于 <rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本对应的值。如果没有指定值,则默认使用 ccoctl.rhel8。以下值有效:
    • rhel8: 为使用 RHEL 8 的主机指定这个值。
    • rhel9 :为使用 RHEL 9 的主机指定这个值。
  4. 运行以下命令更改权限以使 ccoctl 可执行:

    $ chmod 775 ccoctl.<rhel_version>

验证

  • 要验证 ccoctl 是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:

    $ ./ccoctl.rhel9

    输出示例

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for {ibm-cloud-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

3.3.4.2.2. 使用 Cloud Credential Operator 实用程序创建 Azure 资源

您可以使用 ccoctl azure create-all 命令自动创建 Azure 资源。

注意

默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。

先决条件

您必须:

  • 提取并准备好 ccoctl 二进制文件。
  • 使用 Azure CLI 访问 Microsoft Azure 帐户。

流程

  1. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 对象列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。
    注意

    此命令可能需要一些时间才能运行。

  3. 要启用 ccoctl 工具自动检测 Azure 凭证,请运行以下命令登录到 Azure CLI:

    $ az login
  4. 运行以下命令,使用 ccoctl 工具处理所有 CredentialsRequest 对象:

    $ ccoctl azure create-all \
      --name=<azure_infra_name> \1
      --output-dir=<ccoctl_output_dir> \2
      --region=<azure_region> \3
      --subscription-id=<azure_subscription_id> \4
      --credentials-requests-dir=<path_to_credentials_requests_directory> \5
      --dnszone-resource-group-name=<azure_dns_zone_resource_group_name> \6
      --tenant-id=<azure_tenant_id> 7
    1
    为用于跟踪的所有创建 Azure 资源指定用户定义的名称。
    2
    可选:指定您希望 ccoctl 实用程序在其中创建对象的目录。默认情况下,实用程序在运行命令的目录中创建对象。
    3
    指定在其中创建云资源的 Azure 区域。
    4
    指定要使用的 Azure 订阅 ID。
    5
    指定包含组件 CredentialsRequest 对象文件的目录。
    6
    指定包含集群基域 Azure DNS 区的资源组名称。
    7
    指定要使用的 Azure 租户 ID。
    注意

    如果您的集群使用 TechPreviewNoUpgrade 功能集启用的技术预览功能,则必须包含 --enable-tech-preview 参数。

    要查看其他可选参数以及如何使用它们的说明,请运行 azure create-all --help 命令。

验证

  • 要验证 OpenShift Container Platform secret 是否已创建,列出 <path_to_ccoctl_output_dir>/manifests 目录中的文件:

    $ ls <path_to_ccoctl_output_dir>/manifests

    输出示例

    azure-ad-pod-identity-webhook-config.yaml
    cluster-authentication-02-config.yaml
    openshift-cloud-controller-manager-azure-cloud-credentials-credentials.yaml
    openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml
    openshift-cluster-api-capz-manager-bootstrap-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-disk-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-file-credentials-credentials.yaml
    openshift-image-registry-installer-cloud-credentials-credentials.yaml
    openshift-ingress-operator-cloud-credentials-credentials.yaml
    openshift-machine-api-azure-cloud-credentials-credentials.yaml

    您可以验证 Microsoft Entra ID 服务账户通过查询 Azure 而创建。如需更多信息,请参阅 Azure 文档中有关列出 Entra ID 服务帐户的内容。

3.3.4.2.3. 整合 Cloud Credential Operator 实用程序清单

要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您已配置了 Cloud Credential Operator 实用程序 (ccoctl)。
  • 已使用 ccoctl 工具创建了集群所需的云供应商资源。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您使用 ccoctl 实用程序创建新的 Azure 资源组,而不是使用现有资源组,请修改 install-config.yaml 中的 resourceGroupName 参数,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    # ...
    platform:
      azure:
        resourceGroupName: <azure_infra_name> 1
    # ...

    1
    这个值必须与 ccoctl azure create-all 命令的 --name 参数指定的 Azure 资源用户定义的名称匹配。
  3. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  4. 运行以下命令,将 ccoctl 工具生成的清单复制到安装程序创建的 manifests 目录中:

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. 将包含私钥的 tls 目录复制到安装目录中:

    $ cp -a /<path_to_ccoctl_output_dir>/tls .

3.3.5. 部署集群

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

重要

在初始安装过程中,您只能运行安装程序的 create cluster 命令一次。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。

流程

  • 进入包含安装程序的目录并初始化集群部署:

    $ ./openshift-install create cluster --dir <installation_directory> \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定自定义 ./install-config.yaml 文件的位置。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

3.3.6. 使用 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.3.7. 后续步骤

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

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

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

3.4.1. 创建安装配置文件

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

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 创建 install-config.yaml 文件。

    1. 进入包含安装程序的目录并运行以下命令:

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

      在指定目录时:

      • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
      • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
    2. 在提示符处,提供云的配置详情:

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

        注意

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

      2. 选择 azure 作为目标平台。

        如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

      3. 为您的订阅输入以下 Azure 参数值:

        • Azure subscription id :输入用于集群的订阅 ID。
        • Azure 租户 id :输入租户 ID。
      4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

        • 如果您使用服务主体,请输入其应用程序 ID。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请指定其客户端 ID。
      5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

        • 如果您使用服务主体,请输入其密码。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请将此值设为空白。
      6. 选择要将集群部署到的区域。
      7. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      8. 为集群输入一个描述性名称。

        重要

        所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语的列表,请参阅 Azure 文档中的解决预留资源名称错误

  3. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  4. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

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

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

3.4.1.1. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 3.2. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

其他资源

3.4.1.2. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 3.4. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
3.4.1.3. 在 64 位 ARM 基础架构上为 Azure 测试的实例类型

以下 Microsoft Azure ARM64 实例类型已使用 OpenShift Container Platform 测试。

例 3.5. 基于 64 位 ARM 架构的机器类型

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
3.4.1.4. 为 Azure 虚拟机启用可信启动

在 Azure 上安装集群时,您可以启用两个可信启动功能: 安全引导虚拟化可信平台模块

有关支持可信启动功能的虚拟机大小的更多信息,请参阅 虚拟机大小

重要

可信启动只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用可信启动:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节,仅在计算节点上启用可信启动:

      compute:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节在所有节点上启用可信启动:

      platform:
        azure:
          settings:
            securityType: TrustedLaunch
            trustedLaunch:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
3.4.1.5. 启用机密虚拟机

您可在安装集群前启用机密虚拟机。您可以为计算节点、control plane 节点或所有节点启用机密虚拟机。

重要

使用机密虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

您可以使用带有以下虚拟机大小的机密虚拟机:

  • DCasv5-series
  • DCadsv5-series
  • ECasv5-series
  • ECadsv5-series
重要

64 位 ARM 架构目前不支持机密虚拟机。

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用机密虚拟机:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,仅在计算节点上启用机密虚拟机:

      compute:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,在所有节点上启用机密虚拟机:

      platform:
        azure:
          settings:
            securityType: ConfidentialVM
            confidentialVM:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
          osDisk:
            securityProfile:
              securityEncryptionType: VMGuestStateOnly
3.4.1.6. Azure 的自定义 install-config.yaml 文件示例

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

重要

此示例 YAML 文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件,并进行修改。

apiVersion: v1
baseDomain: example.com 1
controlPlane: 2
  hyperthreading: Enabled 3 4
  name: master
  platform:
    azure:
      encryptionAtHost: true
      ultraSSDCapability: Enabled
      osDisk:
        diskSizeGB: 1024 5
        diskType: Premium_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      type: Standard_D8s_v3
  replicas: 3
compute: 6
- hyperthreading: Enabled 7 8
  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 9
        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      zones: 10
      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 11
networking: 12
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 13
  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      osImage: 14
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 15
    region: centralus 16
    resourceGroupName: existing_resource_group 17
    outboundType: Loadbalancer
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 18
fips: false 19
sshKey: ssh-ed25519 AAAA... 20
1 11 16 18
必需。安装程序会提示您输入这个值。
2 6 12
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4 8
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您禁用并发多线程,请为您的机器使用较大的虚拟机类型,如 Standard_D8s_v3

5 9
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
10
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
13
要安装的集群网络插件。默认值 OVNKubernetes 是唯一支持的值。
14
可选:应该用来引导 control plane 和计算机器的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。platform.azure.defaultMachinePlatform.osImage 下的 publisher, offer, sku, 和 version 参数应用到 control plane 和计算机器。如果设置了 controlPlane.platform.azure.osImagecompute.platform.azure.osImage 下的参数,它们会覆盖 platform.azure.defaultMachinePlatform.osImage 参数。
15
指定包含基域的 DNS 区的资源组的名称。
17
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
19
是否启用或禁用 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。

20
您可以选择提供您用来访问集群中机器的 sshKey 值。
注意

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

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

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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.2. 网络配置阶段

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.3. 指定高级网络配置

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

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

重要

不支持通过修改安装程序创建的 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/ 目录。

3.4.4. 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.4.1. Cluster Network Operator 配置对象

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

表 3.3. 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 地址块。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.4. defaultNetwork 对象
字段类型描述

type

字符串

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

注意

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

ovnKubernetesConfig

object

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

配置 OVN-Kubernetes 网络插件

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

表 3.5. 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.6. 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.7. 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.8. 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.9. 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.10. gatewayConfig.ipv4 对象
字段类型描述

internalMasqueradeSubnet

字符串

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

重要

对于 OpenShift Container Platform 4.17 及更新的版本,集群使用 169.254.0.0/17 作为默认的 masquerade 子网。对于升级的集群,默认 masquerade 子网没有变化。

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

internalMasqueradeSubnet

字符串

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

重要

对于 OpenShift Container Platform 4.17 及更新的版本,集群使用 fd69::/112 作为默认的 masquerade 子网。对于升级的集群,默认 masquerade 子网没有变化。

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

模式

字符串

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

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

启用 IPSec 的 OVN-Kubernetes 配置示例

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

3.4.5. 使用 OVN-Kubernetes 配置混合网络

您可以将集群配置为使用 OVN-Kubernetes 网络插件的混合网络。这允许支持不同节点网络配置的混合集群。

注意

此配置是在同一集群中同时运行 Linux 和 Windows 节点所必需的。

先决条件

  • 您在 install-config.yaml 文件中为 networking.networkType 参数定义了 OVNKubernetes。如需更多信息,请参阅有关在所选云供应商上配置 OpenShift Container Platform 网络自定义的安装文档。

流程

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

    $ ./openshift-install create manifests --dir <installation_directory>

    其中:

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

    $ cat <<EOF > <installation_directory>/manifests/cluster-network-03-config.yml
    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
    EOF

    其中:

    <installation_directory>
    指定包含集群的 manifests/ 目录的目录名称。
  3. 在编辑器中打开 cluster-network-03-config.yml 文件,并使用混合网络配置 OVN-Kubernetes,如下例所示:

    指定混合网络配置

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      defaultNetwork:
        ovnKubernetesConfig:
          hybridOverlayConfig:
            hybridClusterNetwork: 1
            - cidr: 10.132.0.0/14
              hostPrefix: 23
            hybridOverlayVXLANPort: 9898 2

    1
    指定用于额外覆盖网络上节点的 CIDR 配置。hybridClusterNetwork CIDR 不能与 clusterNetwork CIDR 重叠。
    2
    为额外覆盖网络指定自定义 VXLAN 端口。这是在 vSphere 上安装的集群中运行 Windows 节点所需要的,且不得为任何其他云供应商配置。自定义端口可以是除默认 4789 端口外的任何打开的端口。有关此要求的更多信息,请参阅 Microsoft 文档中的 Pod 到主机间的 pod 连接性
    注意

    Windows Server Long-Term Servicing Channel(LTSC):Windows Server 2019 在带有自定义 hybridOverlayVXLANPort 值的集群中不被支持,因为这个 Windows server 版本不支持选择使用自定义的 VXLAN 端口。

  4. 保存 cluster-network-03-config.yml 文件,再退出文本编辑器。
  5. 可选:备份 manifests/cluster-network-03-config.yml 文件。创建集群时,安装程序会删除 manifests/ 目录。
注意

有关在同一集群中使用 Linux 和 Windows 节点的更多信息,请参阅了解 Windows 容器工作负载

其他资源

3.4.6. 在 kube-system 项目中存储管理员级别的 secret 的替代方案

默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:

3.4.6.1. 手动创建长期凭证

在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  3. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  4. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 自定义资源 (CR) 列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。

    此命令为每个 CredentialsRequest 对象创建一个 YAML 文件。

    CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
      ...

  5. 在之前生成的 openshift-install 清单目录中为 secret 创建 YAML 文件。secret 必须使用在 spec.secretRef 中为每个 CredentialsRequest 定义的命名空间和 secret 名称存储。

    带有 secret 的 CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
          ...
      secretRef:
        name: <component_secret>
        namespace: <component_namespace>
      ...

    Secret 对象示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <component_secret>
      namespace: <component_namespace>
    data:
      azure_subscription_id: <base64_encoded_azure_subscription_id>
      azure_client_id: <base64_encoded_azure_client_id>
      azure_client_secret: <base64_encoded_azure_client_secret>
      azure_tenant_id: <base64_encoded_azure_tenant_id>
      azure_resource_prefix: <base64_encoded_azure_resource_prefix>
      azure_resourcegroup: <base64_encoded_azure_resourcegroup>
      azure_region: <base64_encoded_azure_region>

重要

在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。

3.4.6.2. 配置 Azure 集群以使用短期凭证

要安装使用 Microsoft Entra Workload ID 的集群,您必须配置 Cloud Credential Operator 工具,并为集群创建所需的 Azure 资源。

3.4.6.2.1. 配置 Cloud Credential Operator 工具

当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。

注意

ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。

先决条件

  • 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
  • 已安装 OpenShift CLI(oc)。
  • 您已为 ccoctl 工具创建了全局 Microsoft Azure 帐户,用于以下权限:

    例 3.6. 所需的 Azure 权限

    • Microsoft.Resources/subscriptions/resourceGroups/read
    • Microsoft.Resources/subscriptions/resourceGroups/write
    • Microsoft.Resources/subscriptions/resourceGroups/delete
    • Microsoft.Authorization/roleAssignments/read
    • Microsoft.Authorization/roleAssignments/delete
    • Microsoft.Authorization/roleAssignments/write
    • Microsoft.Authorization/roleDefinitions/read
    • Microsoft.Authorization/roleDefinitions/write
    • Microsoft.Authorization/roleDefinitions/delete
    • Microsoft.Storage/storageAccounts/listkeys/action
    • Microsoft.Storage/storageAccounts/delete
    • Microsoft.Storage/storageAccounts/read
    • Microsoft.Storage/storageAccounts/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/delete
    • Microsoft.Storage/storageAccounts/blobServices/containers/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/delete
    • Microsoft.ManagedIdentity/userAssignedIdentities/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/delete
    • Microsoft.Storage/register/action
    • Microsoft.ManagedIdentity/register/action

流程

  1. 运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    注意

    确保 $RELEASE_IMAGE 的架构与将使用 ccoctl 工具的环境架构相匹配。

  3. 运行以下命令,将 CCO 容器镜像中的 ccoctl 二进制文件提取到 OpenShift Container Platform 发行镜像中:

    $ oc image extract $CCO_IMAGE \
      --file="/usr/bin/ccoctl.<rhel_version>" \1
      -a ~/.pull-secret
    1
    对于 <rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本对应的值。如果没有指定值,则默认使用 ccoctl.rhel8。以下值有效:
    • rhel8: 为使用 RHEL 8 的主机指定这个值。
    • rhel9 :为使用 RHEL 9 的主机指定这个值。
  4. 运行以下命令更改权限以使 ccoctl 可执行:

    $ chmod 775 ccoctl.<rhel_version>

验证

  • 要验证 ccoctl 是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:

    $ ./ccoctl.rhel9

    输出示例

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for {ibm-cloud-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

3.4.6.2.2. 使用 Cloud Credential Operator 实用程序创建 Azure 资源

您可以使用 ccoctl azure create-all 命令自动创建 Azure 资源。

注意

默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。

先决条件

您必须:

  • 提取并准备好 ccoctl 二进制文件。
  • 使用 Azure CLI 访问 Microsoft Azure 帐户。

流程

  1. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 对象列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。
    注意

    此命令可能需要一些时间才能运行。

  3. 要启用 ccoctl 工具自动检测 Azure 凭证,请运行以下命令登录到 Azure CLI:

    $ az login
  4. 运行以下命令,使用 ccoctl 工具处理所有 CredentialsRequest 对象:

    $ ccoctl azure create-all \
      --name=<azure_infra_name> \1
      --output-dir=<ccoctl_output_dir> \2
      --region=<azure_region> \3
      --subscription-id=<azure_subscription_id> \4
      --credentials-requests-dir=<path_to_credentials_requests_directory> \5
      --dnszone-resource-group-name=<azure_dns_zone_resource_group_name> \6
      --tenant-id=<azure_tenant_id> 7
    1
    为用于跟踪的所有创建 Azure 资源指定用户定义的名称。
    2
    可选:指定您希望 ccoctl 实用程序在其中创建对象的目录。默认情况下,实用程序在运行命令的目录中创建对象。
    3
    指定在其中创建云资源的 Azure 区域。
    4
    指定要使用的 Azure 订阅 ID。
    5
    指定包含组件 CredentialsRequest 对象文件的目录。
    6
    指定包含集群基域 Azure DNS 区的资源组名称。
    7
    指定要使用的 Azure 租户 ID。
    注意

    如果您的集群使用 TechPreviewNoUpgrade 功能集启用的技术预览功能,则必须包含 --enable-tech-preview 参数。

    要查看其他可选参数以及如何使用它们的说明,请运行 azure create-all --help 命令。

验证

  • 要验证 OpenShift Container Platform secret 是否已创建,列出 <path_to_ccoctl_output_dir>/manifests 目录中的文件:

    $ ls <path_to_ccoctl_output_dir>/manifests

    输出示例

    azure-ad-pod-identity-webhook-config.yaml
    cluster-authentication-02-config.yaml
    openshift-cloud-controller-manager-azure-cloud-credentials-credentials.yaml
    openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml
    openshift-cluster-api-capz-manager-bootstrap-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-disk-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-file-credentials-credentials.yaml
    openshift-image-registry-installer-cloud-credentials-credentials.yaml
    openshift-ingress-operator-cloud-credentials-credentials.yaml
    openshift-machine-api-azure-cloud-credentials-credentials.yaml

    您可以验证 Microsoft Entra ID 服务账户通过查询 Azure 而创建。如需更多信息,请参阅 Azure 文档中有关列出 Entra ID 服务帐户的内容。

3.4.6.2.3. 整合 Cloud Credential Operator 实用程序清单

要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您已配置了 Cloud Credential Operator 实用程序 (ccoctl)。
  • 已使用 ccoctl 工具创建了集群所需的云供应商资源。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您使用 ccoctl 实用程序创建新的 Azure 资源组,而不是使用现有资源组,请修改 install-config.yaml 中的 resourceGroupName 参数,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    # ...
    platform:
      azure:
        resourceGroupName: <azure_infra_name> 1
    # ...

    1
    这个值必须与 ccoctl azure create-all 命令的 --name 参数指定的 Azure 资源用户定义的名称匹配。
  3. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  4. 运行以下命令,将 ccoctl 工具生成的清单复制到安装程序创建的 manifests 目录中:

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. 将包含私钥的 tls 目录复制到安装目录中:

    $ cp -a /<path_to_ccoctl_output_dir>/tls .

3.4.7. 部署集群

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

重要

在初始安装过程中,您只能运行安装程序的 create cluster 命令一次。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。

流程

  • 进入包含安装程序的目录并初始化集群部署:

    $ ./openshift-install create cluster --dir <installation_directory> \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定自定义 ./install-config.yaml 文件的位置。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

3.4.8. 使用 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.9. 后续步骤

3.5. 在受限网络中的 Azure 上安装集群

在 OpenShift Container Platform 版本 4.17 中,您可以通过在现有 Azure Virtual Network (VNet)上创建安装发行内容的内部镜像在受限网络中的 Microsoft Azure 上安装集群。

重要

您可以使用镜像安装发行内容安装 OpenShift Container Platform 集群,但集群需要访问互联网才能使用 Azure API。

3.5.1. 先决条件

  • 您已 将断开连接的安装的镜像镜像 到 registry,并获取了 OpenShift Container Platform 版本的 imageContentSources 数据。

    重要

    由于安装介质位于镜像主机上,因此您可以使用该计算机完成所有安装步骤。

  • Azure 中有一个现有的 VNet。在使用安装程序置备的基础架构的受限网络中安装集群时,您无法使用安装程序置备的 VNet。您必须使用用户置备的 VNet 来满足以下要求之一:

    • VNet 包含镜像 registry。
    • VNet 有防火墙规则或对等连接来访问其他位置托管的镜像 registry

3.5.2. 关于在受限网络中安装

在 OpenShift Container Platform 4.17 中,可以执行不需要有效的互联网连接来获取软件组件的安装。受限网络安装可以使用安装程序置备的基础架构或用户置备的基础架构完成,具体取决于您要安装集群的云平台。

如果您选择在云平台中执行受限网络安装,您仍需要访问其云 API。有些云功能,比如 Amazon Web Service 的 Route 53 DNS 和 IAM 服务,需要访问互联网。根据您的网络,在裸机硬件、Nutanix 或 VMware vSphere 上安装可能需要较少的互联网访问。

要完成受限网络安装,您必须创建一个 registry,以镜像 OpenShift 镜像 registry 的内容并包含安装介质。您可以在镜像主机上创建此 registry,该主机可同时访问互联网和您的封闭网络,也可以使用满足您的限制条件的其他方法。

3.5.2.1. 其他限制

受限网络中的集群有以下额外限制和限制:

  • ClusterVersion 状态包含一个 Unable to retrieve available updates 错误。
  • 默认情况下,您无法使用 Developer Catalog 的内容,因为您无法访问所需的镜像流标签。
3.5.2.2. 用户定义的出站路由

在 OpenShift Container Platform 中,您可以选择自己的出站路由来连接到互联网。这可让您跳过创建公共 IP 地址和公共负载均衡器的步骤。

您可在安装集群前修改 install-config.yaml 文件中的参数来配置用户定义的路由。安装集群时,需要一个已存在的 VNet 来使用出站路由,安装程序不负责配置它。

当将集群配置为使用用户定义的路由时,安装程序不会创建以下资源:

  • 用于访问互联网的出站规则。
  • 公共负载均衡器的公共 IP。
  • Kubernetes Service 对象,为出站请求将集群机器添加到公共负载均衡器中。

在设置用户定义的路由前,您必须确保以下项目可用:

  • 出口到互联网可以拉取容器镜像,除非使用 OpenShift image registry 镜像。
  • 集群可以访问 Azure API。
  • 配置了各种允许列表端点。您可以在 配置防火墙 部分引用这些端点。

支持一些已存在的网络设置,使用用户定义的路由访问互联网。

使用 Azure Firewall 的受限集群

您可以使用 Azure Firewall 来限制用于安装 OpenShift Container Platform 集群的虚拟网络 (VNet) 的出站路由。如需更多信息,请参阅使用 Azure Firewall 提供用户定义的路由。您可以使用 Azure Firewall 的 VNet 并配置用户定义的路由,在受限网络中创建 OpenShift Container Platform 集群。

重要

如果使用 Azure Firewall 来限制互联网访问,您必须在 install-config.yaml 文件中将 publish 字段设置为 Internal。这是因为 Azure Firewall 无法用于 Azure 公共负载均衡器

3.5.3. 关于为 OpenShift Container Platform 集群重复使用 VNet

在 OpenShift Container Platform 4.17 中,您可以在 Microsoft Azure 中将集群部署到现有的 Azure Virtual Network(VNet)中。如果您这样做,还必须在 VNet 和路由规则中使用现有子网。

通过将 OpenShift Container Platform 部署到现有的 Azure VNet 中,您可以避免新帐户中的服务限制,或者更容易地利用公司所设置的操作限制。如果您无法获得创建 VNet 所需的基础架构创建权限,则可以使用这个选项。

3.5.3.1. 使用 VNet 的要求

当使用现有 VNet 部署集群时,必须在安装集群前执行额外的网络配置。在安装程序置备的基础架构集群中,安装程序通常会创建以下组件,但在安装到现有 VNet 时不会创建它们:

  • 子网
  • 路由表
  • VNets
  • 网络安全组
注意

安装程序要求您使用由云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,并导致安装失败。

如果使用自定义 VNet,您必须正确配置它及其子网,供安装程序和集群使用。安装程序不能为集群分配要使用的网络范围,为子网设置路由表,或者设置类似 DHCP 的 VNet 选项,因此您必须在安装集群前这样做。

集群必须能够访问包含现有 VNet 和子网的资源组。虽然集群创建的所有资源都放在它创建的单独资源组中,但有些网络资源则从单独的组中使用。有些集群 Operator 必须能够访问这两个资源组中的资源。例如,Machine API 控制器会为它创建的虚拟机附加 NICS,以便从网络资源组中进行子网。

您的 VNet 必须满足以下特征:

  • VNet 的 CIDR 块必须包含 Networking.MachineCIDR 范围,它是集群机器的 IP 地址池。
  • VNet 及其子网必须属于同一资源组,子网必须配置为使用 Azure 分配的 DHCP IP 地址,而不是静态 IP 地址。

您必须在 VNet 中提供两个子网,一个用于 control plane 机器,一个用于计算机器。因为 Azure 在您指定的区域内的不同可用区中分发机器,所以集群将默认具有高可用性。

注意

默认情况下,如果您在 install-config.yaml 文件中指定可用区,安装程序会在一个区(region)内的这些可用区间分发 control plane 机器和计算机器。要确保集群的高可用性,请选择至少含有三个可用区的区域。如果您的区域包含的可用区少于三个,安装程序将在可用区中放置多台 control plane 机器。

为确保您提供的子网适合,安装程序会确认以下数据:

  • 所有指定的子网都存在。
  • 有两个专用子网,一个用于 control plane 机器,一个用于计算机器。
  • 子网 CIDR 属于您指定的机器 CIDR。机器不会在您不为其提供私有子网的可用区中置备。如果需要,安装程序会创建管理 control plane 和 worker 节点的公共负载均衡器,Azure 会为其分配一个公共 IP 地址。
注意

如果您销毁了使用现有 VNet 的集群,则不会删除 VNet。

3.5.3.1.1. 网络安全组要求

托管 compute 和 control plane 机器的子网的网络安全组需要特定的访问权限,以确保集群通信正确。您必须创建规则以允许访问所需的集群通信端口。

重要

在安装集群前,必须先设置网络安全组规则。如果您试图在没有所需访问权限的情况下安装集群,安装程序无法访问 Azure API,安装会失败。

表 3.13. 所需端口
port描述Control plane(控制平面)Compute

80

允许 HTTP 流量

 

x

443

允许 HTTPS 流量

 

x

6443

允许与 control plane 机器通信

x

 

22623

允许内部与机器配置服务器通信以用于置备机器

x

 

*

允许连接到 Azure API。您必须将 Destination Service Tag 设置为 AzureCloud[1]

x

x

*

拒绝连接到互联网。您必须将目标服务标签设置为 Internet[1]

x

x

  1. 如果您使用 Azure Firewall 来限制互联网访问,您可以将 Azure Firewall 配置为允许 Azure API。不需要网络安全组规则。如需更多信息,请参阅"添加资源"中的"配置防火墙"。
重要

目前,不支持阻止或限制机器配置服务器端点。机器配置服务器必须公开给网络,以便新置备的机器没有现有配置或状态,才能获取其配置。在这个模型中,信任的根是证书签名请求 (CSR) 端点,即 kubelet 发送其证书签名请求以批准加入集群。因此,机器配置不应用于分发敏感信息,如 secret 和证书。

为确保机器配置服务器端点,端口 22623 和 22624 在裸机场景中是安全的,客户必须配置正确的网络策略。

由于集群组件不会修改 Kubernetes 控制器更新的用户提供的网络安全组,因此为 Kubernetes 控制器在不影响其余环境的情况下创建一个伪网络安全组。

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

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

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

10250-10259

Kubernetes 保留的默认端口

UDP

4789

VXLAN

6081

Geneve

9000-9999

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

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

UDP 端口 123 上的网络时间协议 (NTP)

如果配置外部 NTP 时间服务器,您必须打开 UDP 端口 123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

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

TCP

2379-2380

etcd 服务器和对等端口

3.5.3.2. 权限划分

从 OpenShift Container Platform 4.3 开始,您不需要安装程序置备的基础架构集群部署所需的所有权限。这与您所在机构可能拥有的权限划分类似:一些个人可以在您的云中创建不同的资源。例如,您可以创建特定于应用程序的对象,如实例、存储和负载均衡器,但不能创建与网络相关的组件,如 VNets、子网或入站规则。

您在创建集群时使用的 Azure 凭证不需要 VNets 和核心网络组件(如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要获取集群中的机器需要的应用程序资源的权限,如负载均衡器、安全组、存储帐户和节点。

3.5.3.3. 集群间隔离

因为集群无法修改现有子网中的网络安全组,所以无法在 VNet 中相互隔离集群。

3.5.4. 创建安装配置文件

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

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。对于受限网络安装,这些文件位于您的镜像主机上。
  • 您有创建镜像 registry 期间生成的 imageContentSources 值。
  • 您已获取了镜像 registry 的证书内容。
  • 您已检索了 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像,并将其上传到可访问的位置。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 创建 install-config.yaml 文件。

    1. 进入包含安装程序的目录并运行以下命令:

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

      在指定目录时:

      • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
      • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
    2. 在提示符处,提供云的配置详情:

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

        注意

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

      2. 选择 azure 作为目标平台。

        如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

      3. 为您的订阅输入以下 Azure 参数值:

        • Azure subscription id :输入用于集群的订阅 ID。
        • Azure 租户 id :输入租户 ID。
      4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

        • 如果您使用服务主体,请输入其应用程序 ID。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请指定其客户端 ID。
      5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

        • 如果您使用服务主体,请输入其密码。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请将此值设为空白。
      6. 选择要将集群部署到的区域。
      7. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      8. 为集群输入一个描述性名称。

        重要

        所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语列表,请参阅 Azure 文档中的解决保留资源名称错误

      9. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret
  3. 编辑 install-config.yaml 文件,以提供在受限网络中安装所需的额外信息。

    1. 更新 pullSecret 值,使其包含 registry 的身份验证信息:

      pullSecret: '{"auths":{"<mirror_host_name>:5000": {"auth": "<credentials>","email": "you@example.com"}}}'

      对于 <mirror_host_name>,请指定 您在镜像 registry 证书中指定的 registry 域名 ;对于 <credentials>, 请指定您的镜像 registry 的 base64 编码用户名和密码。

    2. 添加 additionalTrustBundle 参数和值。

      additionalTrustBundle: |
        -----BEGIN CERTIFICATE-----
        ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
        -----END CERTIFICATE-----

      该值必须是您用于镜像 registry 的证书文件内容。证书文件可以是现有的可信证书颁发机构,也可以是您为镜像 registry 生成的自签名证书。

    3. platform.azure 字段中定义 VNet 的网络和子网,以安装集群:

      networkResourceGroupName: <vnet_resource_group> 1
      virtualNetwork: <vnet> 2
      controlPlaneSubnet: <control_plane_subnet> 3
      computeSubnet: <compute_subnet> 4
      1
      <vnet_resource_group> 替换为包含现有虚拟网络 (VNet)的资源组名称。
      2
      <vnet> 替换为现有的虚拟网络名称。
      3
      <control_plane_subnet> 替换为部署 control plane 机器的现有子网名称。
      4
      <compute_subnet> 替换为部署计算机器的现有子网名称。
    4. 添加镜像内容资源,类似于以下 YAML 摘录:

      imageContentSources:
      - mirrors:
        - <mirror_host_name>:5000/<repo_name>/release
        source: quay.io/openshift-release-dev/ocp-release
      - mirrors:
        - <mirror_host_name>:5000/<repo_name>/release
        source: registry.redhat.io/ocp/release

      对于这些值,请使用您在创建镜像 registry 时记录的 imageContentSources

    5. 可选:将发布策略设置为 Internal

      publish: Internal

      通过设置这个选项,您可以创建一个内部 Ingress Controller 和一个私有负载均衡器。

      重要

      Azure Firewall 无法与 Azure 公共负载均衡器无缝工作。因此,当使用 Azure Firewall 来限制互联网访问时,install-config.yaml 中的 publish 字段应设置为 Internal

  4. 对您需要的 install-config.yaml 文件进行任何其他修改。

    有关参数的更多信息,请参阅"安装配置参数"。

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

    重要

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

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

3.5.4.1. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 3.16. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

3.5.4.2. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 3.7. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
3.5.4.3. 在 64 位 ARM 基础架构上为 Azure 测试的实例类型

以下 Microsoft Azure ARM64 实例类型已使用 OpenShift Container Platform 测试。

例 3.8. 基于 64 位 ARM 架构的机器类型

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
3.5.4.4. 为 Azure 虚拟机启用可信启动

在 Azure 上安装集群时,您可以启用两个可信启动功能: 安全引导虚拟化可信平台模块

有关支持可信启动功能的虚拟机大小的更多信息,请参阅 虚拟机大小

重要

可信启动只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用可信启动:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节,仅在计算节点上启用可信启动:

      compute:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节在所有节点上启用可信启动:

      platform:
        azure:
          settings:
            securityType: TrustedLaunch
            trustedLaunch:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
3.5.4.5. 启用机密虚拟机

您可在安装集群前启用机密虚拟机。您可以为计算节点、control plane 节点或所有节点启用机密虚拟机。

重要

使用机密虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

您可以使用带有以下虚拟机大小的机密虚拟机:

  • DCasv5-series
  • DCadsv5-series
  • ECasv5-series
  • ECadsv5-series
重要

64 位 ARM 架构目前不支持机密虚拟机。

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用机密虚拟机:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,仅在计算节点上启用机密虚拟机:

      compute:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,在所有节点上启用机密虚拟机:

      platform:
        azure:
          settings:
            securityType: ConfidentialVM
            confidentialVM:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
          osDisk:
            securityProfile:
              securityEncryptionType: VMGuestStateOnly
3.5.4.6. Azure 的自定义 install-config.yaml 文件示例

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

重要

此示例 YAML 文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件,并进行修改。

apiVersion: v1
baseDomain: example.com 1
controlPlane: 2
  hyperthreading: Enabled 3 4
  name: master
  platform:
    azure:
      encryptionAtHost: true
      ultraSSDCapability: Enabled
      osDisk:
        diskSizeGB: 1024 5
        diskType: Premium_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      type: Standard_D8s_v3
  replicas: 3
compute: 6
- hyperthreading: Enabled 7 8
  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 9
        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      zones: 10
      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 11
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 12
  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      osImage: 13
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 14
    region: centralus 15
    resourceGroupName: existing_resource_group 16
    networkResourceGroupName: vnet_resource_group 17
    virtualNetwork: vnet 18
    controlPlaneSubnet: control_plane_subnet 19
    computeSubnet: compute_subnet 20
    outboundType: UserDefinedRouting 21
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 22
fips: false 23
sshKey: ssh-ed25519 AAAA... 24
additionalTrustBundle: | 25
    -----BEGIN CERTIFICATE-----
    <MY_TRUSTED_CA_CERT>
    -----END CERTIFICATE-----
imageContentSources: 26
- mirrors:
  - <local_registry>/<local_repository_name>/release
  source: quay.io/openshift-release-dev/ocp-release
- mirrors:
  - <local_registry>/<local_repository_name>/release
  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
publish: Internal 27
1 11 15 22
必需。安装程序会提示您输入这个值。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4 8
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您禁用并发多线程,请为您的机器使用较大的虚拟机类型,如 Standard_D8s_v3

5 9
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
10
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
12
要安装的集群网络插件。默认值 OVNKubernetes 是唯一支持的值。
13
可选:应该用来引导 control plane 和计算机器的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。platform.azure.defaultMachinePlatform.osImage 下的 publisher, offer, sku, 和 version 参数应用到 control plane 和计算机器。如果设置了 controlPlane.platform.azure.osImagecompute.platform.azure.osImage 下的参数,它们会覆盖 platform.azure.defaultMachinePlatform.osImage 参数。
14
指定包含基域的 DNS 区的资源组的名称。
16
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
17
如果使用现有的 VNet,请指定包含它的资源组的名称。
18
如果使用现有的 VNet,请指定其名称。
19
如果使用现有的 VNet,请指定托管 control plane 机器的子网名称。
20
如果使用现有的 VNet,请指定托管计算机器的子网名称。
21
当使用 Azure Firewall 来限制互联网访问时,您必须配置出站路由来通过 Azure Firewall 发送流量。配置用户定义的路由可防止在集群中公开外部端点。
23
是否启用或禁用 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。

24
您可以选择提供您用来访问集群中机器的 sshKey 值。
注意

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

25
提供用于镜像 registry 的证书文件内容。
26
提供命令输出中的 imageContentSources 部分来 镜像存储库。
27
如何发布集群的面向用户的端点。当使用 Azure Firewall 来限制互联网访问时,请将 publish 设置为 Internal 以部署私有集群。然后,无法从互联网访问面向用户的端点。默认值为 External
3.5.4.7. 在安装过程中配置集群范围的代理

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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.5.5. 在 kube-system 项目中存储管理员级别的 secret 的替代方案

默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:

3.5.5.1. 手动创建长期凭证

在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  3. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  4. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 自定义资源 (CR) 列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。

    此命令为每个 CredentialsRequest 对象创建一个 YAML 文件。

    CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
      ...

  5. 在之前生成的 openshift-install 清单目录中为 secret 创建 YAML 文件。secret 必须使用在 spec.secretRef 中为每个 CredentialsRequest 定义的命名空间和 secret 名称存储。

    带有 secret 的 CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
          ...
      secretRef:
        name: <component_secret>
        namespace: <component_namespace>
      ...

    Secret 对象示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <component_secret>
      namespace: <component_namespace>
    data:
      azure_subscription_id: <base64_encoded_azure_subscription_id>
      azure_client_id: <base64_encoded_azure_client_id>
      azure_client_secret: <base64_encoded_azure_client_secret>
      azure_tenant_id: <base64_encoded_azure_tenant_id>
      azure_resource_prefix: <base64_encoded_azure_resource_prefix>
      azure_resourcegroup: <base64_encoded_azure_resourcegroup>
      azure_region: <base64_encoded_azure_region>

重要

在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。

3.5.5.2. 配置 Azure 集群以使用短期凭证

要安装使用 Microsoft Entra Workload ID 的集群,您必须配置 Cloud Credential Operator 工具,并为集群创建所需的 Azure 资源。

3.5.5.2.1. 配置 Cloud Credential Operator 工具

当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。

注意

ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。

先决条件

  • 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
  • 已安装 OpenShift CLI(oc)。
  • 您已为 ccoctl 工具创建了全局 Microsoft Azure 帐户,用于以下权限:

    例 3.9. 所需的 Azure 权限

    • Microsoft.Resources/subscriptions/resourceGroups/read
    • Microsoft.Resources/subscriptions/resourceGroups/write
    • Microsoft.Resources/subscriptions/resourceGroups/delete
    • Microsoft.Authorization/roleAssignments/read
    • Microsoft.Authorization/roleAssignments/delete
    • Microsoft.Authorization/roleAssignments/write
    • Microsoft.Authorization/roleDefinitions/read
    • Microsoft.Authorization/roleDefinitions/write
    • Microsoft.Authorization/roleDefinitions/delete
    • Microsoft.Storage/storageAccounts/listkeys/action
    • Microsoft.Storage/storageAccounts/delete
    • Microsoft.Storage/storageAccounts/read
    • Microsoft.Storage/storageAccounts/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/delete
    • Microsoft.Storage/storageAccounts/blobServices/containers/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/delete
    • Microsoft.ManagedIdentity/userAssignedIdentities/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/delete
    • Microsoft.Storage/register/action
    • Microsoft.ManagedIdentity/register/action

流程

  1. 运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    注意

    确保 $RELEASE_IMAGE 的架构与将使用 ccoctl 工具的环境架构相匹配。

  3. 运行以下命令,将 CCO 容器镜像中的 ccoctl 二进制文件提取到 OpenShift Container Platform 发行镜像中:

    $ oc image extract $CCO_IMAGE \
      --file="/usr/bin/ccoctl.<rhel_version>" \1
      -a ~/.pull-secret
    1
    对于 <rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本对应的值。如果没有指定值,则默认使用 ccoctl.rhel8。以下值有效:
    • rhel8: 为使用 RHEL 8 的主机指定这个值。
    • rhel9 :为使用 RHEL 9 的主机指定这个值。
  4. 运行以下命令更改权限以使 ccoctl 可执行:

    $ chmod 775 ccoctl.<rhel_version>

验证

  • 要验证 ccoctl 是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:

    $ ./ccoctl.rhel9

    输出示例

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for {ibm-cloud-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

3.5.5.2.2. 使用 Cloud Credential Operator 实用程序创建 Azure 资源

您可以使用 ccoctl azure create-all 命令自动创建 Azure 资源。

注意

默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。

先决条件

您必须:

  • 提取并准备好 ccoctl 二进制文件。
  • 使用 Azure CLI 访问 Microsoft Azure 帐户。

流程

  1. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 对象列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。
    注意

    此命令可能需要一些时间才能运行。

  3. 要启用 ccoctl 工具自动检测 Azure 凭证,请运行以下命令登录到 Azure CLI:

    $ az login
  4. 运行以下命令,使用 ccoctl 工具处理所有 CredentialsRequest 对象:

    $ ccoctl azure create-all \
      --name=<azure_infra_name> \1
      --output-dir=<ccoctl_output_dir> \2
      --region=<azure_region> \3
      --subscription-id=<azure_subscription_id> \4
      --credentials-requests-dir=<path_to_credentials_requests_directory> \5
      --dnszone-resource-group-name=<azure_dns_zone_resource_group_name> \6
      --tenant-id=<azure_tenant_id> 7
    1
    为用于跟踪的所有创建 Azure 资源指定用户定义的名称。
    2
    可选:指定您希望 ccoctl 实用程序在其中创建对象的目录。默认情况下,实用程序在运行命令的目录中创建对象。
    3
    指定在其中创建云资源的 Azure 区域。
    4
    指定要使用的 Azure 订阅 ID。
    5
    指定包含组件 CredentialsRequest 对象文件的目录。
    6
    指定包含集群基域 Azure DNS 区的资源组名称。
    7
    指定要使用的 Azure 租户 ID。
    注意

    如果您的集群使用 TechPreviewNoUpgrade 功能集启用的技术预览功能,则必须包含 --enable-tech-preview 参数。

    要查看其他可选参数以及如何使用它们的说明,请运行 azure create-all --help 命令。

验证

  • 要验证 OpenShift Container Platform secret 是否已创建,列出 <path_to_ccoctl_output_dir>/manifests 目录中的文件:

    $ ls <path_to_ccoctl_output_dir>/manifests

    输出示例

    azure-ad-pod-identity-webhook-config.yaml
    cluster-authentication-02-config.yaml
    openshift-cloud-controller-manager-azure-cloud-credentials-credentials.yaml
    openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml
    openshift-cluster-api-capz-manager-bootstrap-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-disk-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-file-credentials-credentials.yaml
    openshift-image-registry-installer-cloud-credentials-credentials.yaml
    openshift-ingress-operator-cloud-credentials-credentials.yaml
    openshift-machine-api-azure-cloud-credentials-credentials.yaml

    您可以验证 Microsoft Entra ID 服务账户通过查询 Azure 而创建。如需更多信息,请参阅 Azure 文档中有关列出 Entra ID 服务帐户的内容。

3.5.5.2.3. 整合 Cloud Credential Operator 实用程序清单

要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您已配置了 Cloud Credential Operator 实用程序 (ccoctl)。
  • 已使用 ccoctl 工具创建了集群所需的云供应商资源。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您使用 ccoctl 实用程序创建新的 Azure 资源组,而不是使用现有资源组,请修改 install-config.yaml 中的 resourceGroupName 参数,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    # ...
    platform:
      azure:
        resourceGroupName: <azure_infra_name> 1
    # ...

    1
    这个值必须与 ccoctl azure create-all 命令的 --name 参数指定的 Azure 资源用户定义的名称匹配。
  3. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  4. 运行以下命令,将 ccoctl 工具生成的清单复制到安装程序创建的 manifests 目录中:

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. 将包含私钥的 tls 目录复制到安装目录中:

    $ cp -a /<path_to_ccoctl_output_dir>/tls .

3.5.6. 部署集群

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

重要

在初始安装过程中,您只能运行安装程序的 create cluster 命令一次。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。

流程

  • 进入包含安装程序的目录并初始化集群部署:

    $ ./openshift-install create cluster --dir <installation_directory> \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定自定义 ./install-config.yaml 文件的位置。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

3.5.7. 使用 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.5.8. 后续步骤

3.6. 将 Azure 上的集群安装到现有的 VNet

在 OpenShift Container Platform 版本 4.17 中,您可以在 Microsoft Azure 上将集群安装到现有 Azure Virtual Network (VNet)中。安装程序会置备所需基础架构的其余部分,您可以进一步自定义这些基础架构。要自定义安装,请在安装集群前修改 install-config.yaml 文件中的参数。

3.6.1. 关于为 OpenShift Container Platform 集群重复使用 VNet

在 OpenShift Container Platform 4.17 中,您可以在 Microsoft Azure 中将集群部署到现有的 Azure Virtual Network(VNet)中。如果您这样做,还必须在 VNet 和路由规则中使用现有子网。

通过将 OpenShift Container Platform 部署到现有的 Azure VNet 中,您可以避免新帐户中的服务限制,或者更容易地利用公司所设置的操作限制。如果您无法获得创建 VNet 所需的基础架构创建权限,则可以使用这个选项。

3.6.1.1. 使用 VNet 的要求

当使用现有 VNet 部署集群时,必须在安装集群前执行额外的网络配置。在安装程序置备的基础架构集群中,安装程序通常会创建以下组件,但在安装到现有 VNet 时不会创建它们:

  • 子网
  • 路由表
  • VNets
  • 网络安全组
注意

安装程序要求您使用由云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,并导致安装失败。

如果使用自定义 VNet,您必须正确配置它及其子网,供安装程序和集群使用。安装程序不能为集群分配要使用的网络范围,为子网设置路由表,或者设置类似 DHCP 的 VNet 选项,因此您必须在安装集群前这样做。

集群必须能够访问包含现有 VNet 和子网的资源组。虽然集群创建的所有资源都放在它创建的单独资源组中,但有些网络资源则从单独的组中使用。有些集群 Operator 必须能够访问这两个资源组中的资源。例如,Machine API 控制器会为它创建的虚拟机附加 NICS,以便从网络资源组中进行子网。

您的 VNet 必须满足以下特征:

  • VNet 的 CIDR 块必须包含 Networking.MachineCIDR 范围,它是集群机器的 IP 地址池。
  • VNet 及其子网必须属于同一资源组,子网必须配置为使用 Azure 分配的 DHCP IP 地址,而不是静态 IP 地址。

您必须在 VNet 中提供两个子网,一个用于 control plane 机器,一个用于计算机器。因为 Azure 在您指定的区域内的不同可用区中分发机器,所以集群将默认具有高可用性。

注意

默认情况下,如果您在 install-config.yaml 文件中指定可用区,安装程序会在一个区(region)内的这些可用区间分发 control plane 机器和计算机器。要确保集群的高可用性,请选择至少含有三个可用区的区域。如果您的区域包含的可用区少于三个,安装程序将在可用区中放置多台 control plane 机器。

为确保您提供的子网适合,安装程序会确认以下数据:

  • 所有指定的子网都存在。
  • 有两个专用子网,一个用于 control plane 机器,一个用于计算机器。
  • 子网 CIDR 属于您指定的机器 CIDR。机器不会在您不为其提供私有子网的可用区中置备。如果需要,安装程序会创建管理 control plane 和 worker 节点的公共负载均衡器,Azure 会为其分配一个公共 IP 地址。
注意

如果您销毁了使用现有 VNet 的集群,则不会删除 VNet。

3.6.1.1.1. 网络安全组要求

托管 compute 和 control plane 机器的子网的网络安全组需要特定的访问权限,以确保集群通信正确。您必须创建规则以允许访问所需的集群通信端口。

重要

在安装集群前,必须先设置网络安全组规则。如果您试图在没有所需访问权限的情况下安装集群,安装程序无法访问 Azure API,安装会失败。

表 3.17. 所需端口
port描述Control plane(控制平面)Compute

80

允许 HTTP 流量

 

x

443

允许 HTTPS 流量

 

x

6443

允许与 control plane 机器通信

x

 

22623

允许内部与机器配置服务器通信以用于置备机器

x

 
  1. 如果您使用 Azure Firewall 来限制互联网访问,您可以将 Azure Firewall 配置为允许 Azure API。不需要网络安全组规则。如需更多信息,请参阅"添加资源"中的"配置防火墙"。
重要

目前,不支持阻止或限制机器配置服务器端点。机器配置服务器必须公开给网络,以便新置备的机器没有现有配置或状态,才能获取其配置。在这个模型中,信任的根是证书签名请求 (CSR) 端点,即 kubelet 发送其证书签名请求以批准加入集群。因此,机器配置不应用于分发敏感信息,如 secret 和证书。

为确保机器配置服务器端点,端口 22623 和 22624 在裸机场景中是安全的,客户必须配置正确的网络策略。

由于集群组件不会修改 Kubernetes 控制器更新的用户提供的网络安全组,因此为 Kubernetes 控制器在不影响其余环境的情况下创建一个伪网络安全组。

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

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

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

10250-10259

Kubernetes 保留的默认端口

UDP

4789

VXLAN

6081

Geneve

9000-9999

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

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

UDP 端口 123 上的网络时间协议 (NTP)

如果配置外部 NTP 时间服务器,您必须打开 UDP 端口 123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

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

TCP

2379-2380

etcd 服务器和对等端口

3.6.1.2. 权限划分

从 OpenShift Container Platform 4.3 开始,您不需要安装程序置备的基础架构集群部署所需的所有权限。这与您所在机构可能拥有的权限划分类似:一些个人可以在您的云中创建不同的资源。例如,您可以创建特定于应用程序的对象,如实例、存储和负载均衡器,但不能创建与网络相关的组件,如 VNets、子网或入站规则。

您在创建集群时使用的 Azure 凭证不需要 VNets 和核心网络组件(如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要获取集群中的机器需要的应用程序资源的权限,如负载均衡器、安全组、存储帐户和节点。

3.6.1.3. 集群间隔离

因为集群无法修改现有子网中的网络安全组,所以无法在 VNet 中相互隔离集群。

3.6.2. 创建安装配置文件

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

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 创建 install-config.yaml 文件。

    1. 进入包含安装程序的目录并运行以下命令:

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

      在指定目录时:

      • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
      • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
    2. 在提示符处,提供云的配置详情:

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

        注意

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

      2. 选择 azure 作为目标平台。

        如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

      3. 为您的订阅输入以下 Azure 参数值:

        • Azure subscription id :输入用于集群的订阅 ID。
        • Azure 租户 id :输入租户 ID。
      4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

        • 如果您使用服务主体,请输入其应用程序 ID。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请指定其客户端 ID。
      5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

        • 如果您使用服务主体,请输入其密码。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请将此值设为空白。
      6. 选择要将集群部署到的区域。
      7. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      8. 为集群输入一个描述性名称。

        重要

        所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语的列表,请参阅 Azure 文档中的解决预留资源名称错误

  3. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  4. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

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

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

3.6.2.1. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 3.20. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

其他资源

3.6.2.2. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 3.10. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
3.6.2.3. 在 64 位 ARM 基础架构上为 Azure 测试的实例类型

以下 Microsoft Azure ARM64 实例类型已使用 OpenShift Container Platform 测试。

例 3.11. 基于 64 位 ARM 架构的机器类型

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
3.6.2.4. 为 Azure 虚拟机启用可信启动

在 Azure 上安装集群时,您可以启用两个可信启动功能: 安全引导虚拟化可信平台模块

有关支持可信启动功能的虚拟机大小的更多信息,请参阅 虚拟机大小

重要

可信启动只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用可信启动:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节,仅在计算节点上启用可信启动:

      compute:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节在所有节点上启用可信启动:

      platform:
        azure:
          settings:
            securityType: TrustedLaunch
            trustedLaunch:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
3.6.2.5. 启用机密虚拟机

您可在安装集群前启用机密虚拟机。您可以为计算节点、control plane 节点或所有节点启用机密虚拟机。

重要

使用机密虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

您可以使用带有以下虚拟机大小的机密虚拟机:

  • DCasv5-series
  • DCadsv5-series
  • ECasv5-series
  • ECadsv5-series
重要

64 位 ARM 架构目前不支持机密虚拟机。

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用机密虚拟机:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,仅在计算节点上启用机密虚拟机:

      compute:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,在所有节点上启用机密虚拟机:

      platform:
        azure:
          settings:
            securityType: ConfidentialVM
            confidentialVM:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
          osDisk:
            securityProfile:
              securityEncryptionType: VMGuestStateOnly
3.6.2.6. Azure 的自定义 install-config.yaml 文件示例

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

重要

此示例 YAML 文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件,并进行修改。

apiVersion: v1
baseDomain: example.com 1
controlPlane: 2
  hyperthreading: Enabled 3 4
  name: master
  platform:
    azure:
      encryptionAtHost: true
      ultraSSDCapability: Enabled
      osDisk:
        diskSizeGB: 1024 5
        diskType: Premium_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      type: Standard_D8s_v3
  replicas: 3
compute: 6
- hyperthreading: Enabled 7 8
  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 9
        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      zones: 10
      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 11
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 12
  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      osImage: 13
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 14
    region: centralus 15
    resourceGroupName: existing_resource_group 16
    networkResourceGroupName: vnet_resource_group 17
    virtualNetwork: vnet 18
    controlPlaneSubnet: control_plane_subnet 19
    computeSubnet: compute_subnet 20
    outboundType: Loadbalancer
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 21
fips: false 22
sshKey: ssh-ed25519 AAAA... 23
1 11 15 21
必需。安装程序会提示您输入这个值。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4 8
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您禁用并发多线程,请为您的机器使用较大的虚拟机类型,如 Standard_D8s_v3

5 9
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
10
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
12
要安装的集群网络插件。默认值 OVNKubernetes 是唯一支持的值。
13
可选:应该用来引导 control plane 和计算机器的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。platform.azure.defaultMachinePlatform.osImage 下的 publisher, offer, sku, 和 version 参数应用到 control plane 和计算机器。如果设置了 controlPlane.platform.azure.osImagecompute.platform.azure.osImage 下的参数,它们会覆盖 platform.azure.defaultMachinePlatform.osImage 参数。
14
指定包含基域的 DNS 区的资源组的名称。
16
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
17
如果使用现有的 VNet,请指定包含它的资源组的名称。
18
如果使用现有的 VNet,请指定其名称。
19
如果使用现有的 VNet,请指定托管 control plane 机器的子网名称。
20
如果使用现有的 VNet,请指定托管计算机器的子网名称。
22
是否启用或禁用 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。

23
您可以选择提供您用来访问集群中机器的 sshKey 值。
注意

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

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

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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.6.3. 在 kube-system 项目中存储管理员级别的 secret 的替代方案

默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:

3.6.3.1. 手动创建长期凭证

在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  3. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  4. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 自定义资源 (CR) 列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。

    此命令为每个 CredentialsRequest 对象创建一个 YAML 文件。

    CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
      ...

  5. 在之前生成的 openshift-install 清单目录中为 secret 创建 YAML 文件。secret 必须使用在 spec.secretRef 中为每个 CredentialsRequest 定义的命名空间和 secret 名称存储。

    带有 secret 的 CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
          ...
      secretRef:
        name: <component_secret>
        namespace: <component_namespace>
      ...

    Secret 对象示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <component_secret>
      namespace: <component_namespace>
    data:
      azure_subscription_id: <base64_encoded_azure_subscription_id>
      azure_client_id: <base64_encoded_azure_client_id>
      azure_client_secret: <base64_encoded_azure_client_secret>
      azure_tenant_id: <base64_encoded_azure_tenant_id>
      azure_resource_prefix: <base64_encoded_azure_resource_prefix>
      azure_resourcegroup: <base64_encoded_azure_resourcegroup>
      azure_region: <base64_encoded_azure_region>

重要

在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。

3.6.3.2. 配置 Azure 集群以使用短期凭证

要安装使用 Microsoft Entra Workload ID 的集群,您必须配置 Cloud Credential Operator 工具,并为集群创建所需的 Azure 资源。

3.6.3.2.1. 配置 Cloud Credential Operator 工具

当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。

注意

ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。

先决条件

  • 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
  • 已安装 OpenShift CLI(oc)。
  • 您已为 ccoctl 工具创建了全局 Microsoft Azure 帐户,用于以下权限:

    例 3.12. 所需的 Azure 权限

    • Microsoft.Resources/subscriptions/resourceGroups/read
    • Microsoft.Resources/subscriptions/resourceGroups/write
    • Microsoft.Resources/subscriptions/resourceGroups/delete
    • Microsoft.Authorization/roleAssignments/read
    • Microsoft.Authorization/roleAssignments/delete
    • Microsoft.Authorization/roleAssignments/write
    • Microsoft.Authorization/roleDefinitions/read
    • Microsoft.Authorization/roleDefinitions/write
    • Microsoft.Authorization/roleDefinitions/delete
    • Microsoft.Storage/storageAccounts/listkeys/action
    • Microsoft.Storage/storageAccounts/delete
    • Microsoft.Storage/storageAccounts/read
    • Microsoft.Storage/storageAccounts/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/delete
    • Microsoft.Storage/storageAccounts/blobServices/containers/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/delete
    • Microsoft.ManagedIdentity/userAssignedIdentities/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/delete
    • Microsoft.Storage/register/action
    • Microsoft.ManagedIdentity/register/action

流程

  1. 运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    注意

    确保 $RELEASE_IMAGE 的架构与将使用 ccoctl 工具的环境架构相匹配。

  3. 运行以下命令,将 CCO 容器镜像中的 ccoctl 二进制文件提取到 OpenShift Container Platform 发行镜像中:

    $ oc image extract $CCO_IMAGE \
      --file="/usr/bin/ccoctl.<rhel_version>" \1
      -a ~/.pull-secret
    1
    对于 <rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本对应的值。如果没有指定值,则默认使用 ccoctl.rhel8。以下值有效:
    • rhel8: 为使用 RHEL 8 的主机指定这个值。
    • rhel9 :为使用 RHEL 9 的主机指定这个值。
  4. 运行以下命令更改权限以使 ccoctl 可执行:

    $ chmod 775 ccoctl.<rhel_version>

验证

  • 要验证 ccoctl 是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:

    $ ./ccoctl.rhel9

    输出示例

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for {ibm-cloud-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

3.6.3.2.2. 使用 Cloud Credential Operator 实用程序创建 Azure 资源

您可以使用 ccoctl azure create-all 命令自动创建 Azure 资源。

注意

默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。

先决条件

您必须:

  • 提取并准备好 ccoctl 二进制文件。
  • 使用 Azure CLI 访问 Microsoft Azure 帐户。

流程

  1. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 对象列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。
    注意

    此命令可能需要一些时间才能运行。

  3. 要启用 ccoctl 工具自动检测 Azure 凭证,请运行以下命令登录到 Azure CLI:

    $ az login
  4. 运行以下命令,使用 ccoctl 工具处理所有 CredentialsRequest 对象:

    $ ccoctl azure create-all \
      --name=<azure_infra_name> \1
      --output-dir=<ccoctl_output_dir> \2
      --region=<azure_region> \3
      --subscription-id=<azure_subscription_id> \4
      --credentials-requests-dir=<path_to_credentials_requests_directory> \5
      --dnszone-resource-group-name=<azure_dns_zone_resource_group_name> \6
      --tenant-id=<azure_tenant_id> 7
    1
    为用于跟踪的所有创建 Azure 资源指定用户定义的名称。
    2
    可选:指定您希望 ccoctl 实用程序在其中创建对象的目录。默认情况下,实用程序在运行命令的目录中创建对象。
    3
    指定在其中创建云资源的 Azure 区域。
    4
    指定要使用的 Azure 订阅 ID。
    5
    指定包含组件 CredentialsRequest 对象文件的目录。
    6
    指定包含集群基域 Azure DNS 区的资源组名称。
    7
    指定要使用的 Azure 租户 ID。
    注意

    如果您的集群使用 TechPreviewNoUpgrade 功能集启用的技术预览功能,则必须包含 --enable-tech-preview 参数。

    要查看其他可选参数以及如何使用它们的说明,请运行 azure create-all --help 命令。

验证

  • 要验证 OpenShift Container Platform secret 是否已创建,列出 <path_to_ccoctl_output_dir>/manifests 目录中的文件:

    $ ls <path_to_ccoctl_output_dir>/manifests

    输出示例

    azure-ad-pod-identity-webhook-config.yaml
    cluster-authentication-02-config.yaml
    openshift-cloud-controller-manager-azure-cloud-credentials-credentials.yaml
    openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml
    openshift-cluster-api-capz-manager-bootstrap-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-disk-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-file-credentials-credentials.yaml
    openshift-image-registry-installer-cloud-credentials-credentials.yaml
    openshift-ingress-operator-cloud-credentials-credentials.yaml
    openshift-machine-api-azure-cloud-credentials-credentials.yaml

    您可以验证 Microsoft Entra ID 服务账户通过查询 Azure 而创建。如需更多信息,请参阅 Azure 文档中有关列出 Entra ID 服务帐户的内容。

3.6.3.2.3. 整合 Cloud Credential Operator 实用程序清单

要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您已配置了 Cloud Credential Operator 实用程序 (ccoctl)。
  • 已使用 ccoctl 工具创建了集群所需的云供应商资源。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您使用 ccoctl 实用程序创建新的 Azure 资源组,而不是使用现有资源组,请修改 install-config.yaml 中的 resourceGroupName 参数,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    # ...
    platform:
      azure:
        resourceGroupName: <azure_infra_name> 1
    # ...

    1
    这个值必须与 ccoctl azure create-all 命令的 --name 参数指定的 Azure 资源用户定义的名称匹配。
  3. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  4. 运行以下命令,将 ccoctl 工具生成的清单复制到安装程序创建的 manifests 目录中:

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. 将包含私钥的 tls 目录复制到安装目录中:

    $ cp -a /<path_to_ccoctl_output_dir>/tls .

3.6.4. 部署集群

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

重要

在初始安装过程中,您只能运行安装程序的 create cluster 命令一次。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。

流程

  • 进入包含安装程序的目录并初始化集群部署:

    $ ./openshift-install create cluster --dir <installation_directory> \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定自定义 ./install-config.yaml 文件的位置。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

3.6.5. 后续步骤

3.7. 在 Azure 上安装私有集群

在 OpenShift Container Platform 版本 4.17 中,您可以在 Microsoft Azure 上将私有集群安装到现有 Azure Virtual Network (VNet)中。安装程序会置备所需基础架构的其余部分,您可以进一步自定义这些基础架构。要自定义安装,请在安装集群前修改 install-config.yaml 文件中的参数。

3.7.1. 私有集群

您可以部署不公开外部端点的私有 OpenShift Container Platform 集群。私有集群只能从内部网络访问,且无法在互联网中看到。

默认情况下,OpenShift Container Platform 被置备为使用可公开访问的 DNS 和端点。在部署集群时,私有集群会将 DNS、Ingress Controller 和 API 服务器设置为私有。这意味着集群资源只能从您的内部网络访问,且不能在互联网中看到。

重要

如果集群有任何公共子网,管理员创建的负载均衡器服务可能会公开访问。为确保集群安全性,请验证这些服务是否已明确标注为私有。

要部署私有集群,您必须:

  • 使用满足您的要求的现有网络。集群资源可能会在网络上的其他集群间共享。
  • 从有权访问的机器中部署:

    • 您置备的云的 API 服务。
    • 您调配的网络上的主机。
    • 用于获取安装介质的互联网。

您可以使用符合这些访问要求的机器,并按照您的公司规定进行操作。例如,此机器可以是云网络上的堡垒主机,也可以是可通过 VPN 访问网络的机器。

3.7.1.1. Azure 中的私有集群

要在 Microsoft Azure 上创建私有集群,您必须提供一个现有的私有 VNet 和子网来托管集群。安装程序还必须能够解析集群所需的 DNS 记录。安装程序只为内部流量配置 Ingress Operator 和 API 服务器。

根据您的网络如何连接到私有 VNET,您可能需要使用 DNS 转发器来解析集群的私有 DNS 记录。集群的机器在内部使用 168.63.129.16 进行 DNS 解析。如需更多信息,请参阅 Azure 文档中的 What is Azure Private DNS?What is IP address 168.63.129.16??。

集群仍然需要访问互联网来访问 Azure API。

安装私有集群时不需要或创建以下项目:

  • BaseDomainResourceGroup,因为集群不会创建公共记录
  • 公共 IP 地址
  • 公共 DNS 记录
  • 公共端点

    The cluster is configured so that the Operators do not create public records for the cluster and all cluster machines are placed in the private subnets that you specify.
3.7.1.1.1. 限制

Azure 上的私有集群只受到与使用现有 VNet 相关的限制。

3.7.1.2. 用户定义的出站路由

在 OpenShift Container Platform 中,您可以选择自己的出站路由来连接到互联网。这可让您跳过创建公共 IP 地址和公共负载均衡器的步骤。

您可在安装集群前修改 install-config.yaml 文件中的参数来配置用户定义的路由。安装集群时,需要一个已存在的 VNet 来使用出站路由,安装程序不负责配置它。

当将集群配置为使用用户定义的路由时,安装程序不会创建以下资源:

  • 用于访问互联网的出站规则。
  • 公共负载均衡器的公共 IP。
  • Kubernetes Service 对象,为出站请求将集群机器添加到公共负载均衡器中。

在设置用户定义的路由前,您必须确保以下项目可用:

  • 出口到互联网可以拉取容器镜像,除非使用 OpenShift image registry 镜像。
  • 集群可以访问 Azure API。
  • 配置了各种允许列表端点。您可以在 配置防火墙 部分引用这些端点。

支持一些已存在的网络设置,使用用户定义的路由访问互联网。

带有网络地址转换的私有集群

您可以使用 Azure VNET 网络地址转换(NAT) 为集群中的子网提供出站互联网访问。请参阅 Azure 文档中的 使用 Azure CLI 创建 NAT 网关

使用 Azure NAT 和用户定义的路由的 VNet 设置时,您可以创建没有公共端点的私有集群。

使用 Azure 防火墙的私有集群

您可以使用 Azure Firewall 为用来安装集群的 VNet 提供出站路由。请参阅 Azure 文档中的Azure Firewall 提供用户定义的路由 的更多信息。

使用 Azure Firewall 和用户定义的路由的 VNet 设置时,您可以创建没有公共端点的私有集群。

带有代理配置的私有集群

您可以使用带有用户定义的路由的代理来允许到互联网的出口。您必须确保集群 Operator 不使用代理访问 Azure API。Operator 必须有权访问代理外的 Azure API。

当使用子网的默认路由表时,Azure 会自动填充0.0.0.0/0,所有 Azure API 请求都会通过 Azure 的内部网络路由,即使 IP 地址是公共的。只要网络安全组规则允许出口到 Azure API 端点,配置了用户定义的路由的代理就可以在没有公共端点的情况下创建私有集群。

没有互联网访问的私有集群

您可以安装专用网络,以限制对互联网的访问,但 Azure API 除外。这可以通过在本地镜像 registry 来完成。您的集群必须有权访问以下内容:

  • 允许拉取容器镜像的 OpenShift image registry 镜像
  • 访问 Azure API

在满足这些要求时,您可以使用用户定义的路由来创建没有公共端点的私有集群。

3.7.2. 关于为 OpenShift Container Platform 集群重复使用 VNet

在 OpenShift Container Platform 4.17 中,您可以在 Microsoft Azure 中将集群部署到现有的 Azure Virtual Network(VNet)中。如果您这样做,还必须在 VNet 和路由规则中使用现有子网。

通过将 OpenShift Container Platform 部署到现有的 Azure VNet 中,您可以避免新帐户中的服务限制,或者更容易地利用公司所设置的操作限制。如果您无法获得创建 VNet 所需的基础架构创建权限,则可以使用这个选项。

3.7.2.1. 使用 VNet 的要求

当使用现有 VNet 部署集群时,必须在安装集群前执行额外的网络配置。在安装程序置备的基础架构集群中,安装程序通常会创建以下组件,但在安装到现有 VNet 时不会创建它们:

  • 子网
  • 路由表
  • VNets
  • 网络安全组
注意

安装程序要求您使用由云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,并导致安装失败。

如果使用自定义 VNet,您必须正确配置它及其子网,供安装程序和集群使用。安装程序不能为集群分配要使用的网络范围,为子网设置路由表,或者设置类似 DHCP 的 VNet 选项,因此您必须在安装集群前这样做。

集群必须能够访问包含现有 VNet 和子网的资源组。虽然集群创建的所有资源都放在它创建的单独资源组中,但有些网络资源则从单独的组中使用。有些集群 Operator 必须能够访问这两个资源组中的资源。例如,Machine API 控制器会为它创建的虚拟机附加 NICS,以便从网络资源组中进行子网。

您的 VNet 必须满足以下特征:

  • VNet 的 CIDR 块必须包含 Networking.MachineCIDR 范围,它是集群机器的 IP 地址池。
  • VNet 及其子网必须属于同一资源组,子网必须配置为使用 Azure 分配的 DHCP IP 地址,而不是静态 IP 地址。

您必须在 VNet 中提供两个子网,一个用于 control plane 机器,一个用于计算机器。因为 Azure 在您指定的区域内的不同可用区中分发机器,所以集群将默认具有高可用性。

注意

默认情况下,如果您在 install-config.yaml 文件中指定可用区,安装程序会在一个区(region)内的这些可用区间分发 control plane 机器和计算机器。要确保集群的高可用性,请选择至少含有三个可用区的区域。如果您的区域包含的可用区少于三个,安装程序将在可用区中放置多台 control plane 机器。

为确保您提供的子网适合,安装程序会确认以下数据:

  • 所有指定的子网都存在。
  • 有两个专用子网,一个用于 control plane 机器,一个用于计算机器。
  • 子网 CIDR 属于您指定的机器 CIDR。机器不会在没有为其提供私有子网的可用区中置备。
注意

如果您销毁了使用现有 VNet 的集群,则不会删除 VNet。

3.7.2.1.1. 网络安全组要求

托管 compute 和 control plane 机器的子网的网络安全组需要特定的访问权限,以确保集群通信正确。您必须创建规则以允许访问所需的集群通信端口。

重要

在安装集群前,必须先设置网络安全组规则。如果您试图在没有所需访问权限的情况下安装集群,安装程序无法访问 Azure API,安装会失败。

表 3.21. 所需端口
port描述Control plane(控制平面)Compute

80

允许 HTTP 流量

 

x

443

允许 HTTPS 流量

 

x

6443

允许与 control plane 机器通信

x

 

22623

允许内部与机器配置服务器通信以用于置备机器

x

 
  1. 如果您使用 Azure Firewall 来限制互联网访问,您可以将 Azure Firewall 配置为允许 Azure API。不需要网络安全组规则。如需更多信息,请参阅"添加资源"中的"配置防火墙"。
重要

目前,不支持阻止或限制机器配置服务器端点。机器配置服务器必须公开给网络,以便新置备的机器没有现有配置或状态,才能获取其配置。在这个模型中,信任的根是证书签名请求 (CSR) 端点,即 kubelet 发送其证书签名请求以批准加入集群。因此,机器配置不应用于分发敏感信息,如 secret 和证书。

为确保机器配置服务器端点,端口 22623 和 22624 在裸机场景中是安全的,客户必须配置正确的网络策略。

由于集群组件不会修改 Kubernetes 控制器更新的用户提供的网络安全组,因此为 Kubernetes 控制器在不影响其余环境的情况下创建一个伪网络安全组。

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

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

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

10250-10259

Kubernetes 保留的默认端口

UDP

4789

VXLAN

6081

Geneve

9000-9999

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

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

UDP 端口 123 上的网络时间协议 (NTP)

如果配置外部 NTP 时间服务器,您必须打开 UDP 端口 123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

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

TCP

2379-2380

etcd 服务器和对等端口

3.7.2.2. 权限划分

从 OpenShift Container Platform 4.3 开始,您不需要安装程序置备的基础架构集群部署所需的所有权限。这与您所在机构可能拥有的权限划分类似:一些个人可以在您的云中创建不同的资源。例如,您可以创建特定于应用程序的对象,如实例、存储和负载均衡器,但不能创建与网络相关的组件,如 VNets、子网或入站规则。

您在创建集群时使用的 Azure 凭证不需要 VNets 和核心网络组件(如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要获取集群中的机器需要的应用程序资源的权限,如负载均衡器、安全组、存储帐户和节点。

3.7.2.3. 集群间隔离

因为集群无法修改现有子网中的网络安全组,所以无法在 VNet 中相互隔离集群。

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

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

先决条件

  • 您在本地机器上有一个 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.7.3.1. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 3.24. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

其他资源

3.7.3.2. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 3.13. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
3.7.3.3. 在 64 位 ARM 基础架构上为 Azure 测试的实例类型

以下 Microsoft Azure ARM64 实例类型已使用 OpenShift Container Platform 测试。

例 3.14. 基于 64 位 ARM 架构的机器类型

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
3.7.3.4. 为 Azure 虚拟机启用可信启动

在 Azure 上安装集群时,您可以启用两个可信启动功能: 安全引导虚拟化可信平台模块

有关支持可信启动功能的虚拟机大小的更多信息,请参阅 虚拟机大小

重要

可信启动只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用可信启动:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节,仅在计算节点上启用可信启动:

      compute:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节在所有节点上启用可信启动:

      platform:
        azure:
          settings:
            securityType: TrustedLaunch
            trustedLaunch:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
3.7.3.5. 启用机密虚拟机

您可在安装集群前启用机密虚拟机。您可以为计算节点、control plane 节点或所有节点启用机密虚拟机。

重要

使用机密虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

您可以使用带有以下虚拟机大小的机密虚拟机:

  • DCasv5-series
  • DCadsv5-series
  • ECasv5-series
  • ECadsv5-series
重要

64 位 ARM 架构目前不支持机密虚拟机。

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用机密虚拟机:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,仅在计算节点上启用机密虚拟机:

      compute:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,在所有节点上启用机密虚拟机:

      platform:
        azure:
          settings:
            securityType: ConfidentialVM
            confidentialVM:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
          osDisk:
            securityProfile:
              securityEncryptionType: VMGuestStateOnly
3.7.3.6. Azure 的自定义 install-config.yaml 文件示例

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

重要

此示例 YAML 文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件,并进行修改。

apiVersion: v1
baseDomain: example.com 1
controlPlane: 2
  hyperthreading: Enabled 3 4
  name: master
  platform:
    azure:
      encryptionAtHost: true
      ultraSSDCapability: Enabled
      osDisk:
        diskSizeGB: 1024 5
        diskType: Premium_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      type: Standard_D8s_v3
  replicas: 3
compute: 6
- hyperthreading: Enabled 7 8
  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 9
        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      zones: 10
      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 11
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 12
  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      osImage: 13
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 14
    region: centralus 15
    resourceGroupName: existing_resource_group 16
    networkResourceGroupName: vnet_resource_group 17
    virtualNetwork: vnet 18
    controlPlaneSubnet: control_plane_subnet 19
    computeSubnet: compute_subnet 20
    outboundType: UserDefinedRouting 21
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 22
fips: false 23
sshKey: ssh-ed25519 AAAA... 24
publish: Internal 25
1 11 15 22
必需。安装程序会提示您输入这个值。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4 8
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您禁用并发多线程,请为您的机器使用较大的虚拟机类型,如 Standard_D8s_v3

5 9
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
10
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
12
要安装的集群网络插件。默认值 OVNKubernetes 是唯一支持的值。
13
可选:应该用来引导 control plane 和计算机器的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。platform.azure.defaultMachinePlatform.osImage 下的 publisher, offer, sku, 和 version 参数应用到 control plane 和计算机器。如果设置了 controlPlane.platform.azure.osImagecompute.platform.azure.osImage 下的参数,它们会覆盖 platform.azure.defaultMachinePlatform.osImage 参数。
14
指定包含基域的 DNS 区的资源组的名称。
16
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
17
如果使用现有的 VNet,请指定包含它的资源组的名称。
18
如果使用现有的 VNet,请指定其名称。
19
如果使用现有的 VNet,请指定托管 control plane 机器的子网名称。
20
如果使用现有的 VNet,请指定托管计算机器的子网名称。
21
您可以自定义自己的出站路由。配置用户定义的路由可防止在集群中公开外部端点。出口的用户定义路由需要将集群部署到现有的 VNet。
23
是否启用或禁用 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。

24
您可以选择提供您用来访问集群中机器的 sshKey 值。
注意

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

25
如何发布集群的面向用户的端点。将 publish 设置为 Internal 以部署一个私有集群,它不能被互联网访问。默认值为 External
3.7.3.7. 在安装过程中配置集群范围的代理

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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.7.4. 在 kube-system 项目中存储管理员级别的 secret 的替代方案

默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:

3.7.4.1. 手动创建长期凭证

在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  3. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  4. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 自定义资源 (CR) 列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。

    此命令为每个 CredentialsRequest 对象创建一个 YAML 文件。

    CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
      ...

  5. 在之前生成的 openshift-install 清单目录中为 secret 创建 YAML 文件。secret 必须使用在 spec.secretRef 中为每个 CredentialsRequest 定义的命名空间和 secret 名称存储。

    带有 secret 的 CredentialsRequest 对象示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
          ...
      secretRef:
        name: <component_secret>
        namespace: <component_namespace>
      ...

    Secret 对象示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <component_secret>
      namespace: <component_namespace>
    data:
      azure_subscription_id: <base64_encoded_azure_subscription_id>
      azure_client_id: <base64_encoded_azure_client_id>
      azure_client_secret: <base64_encoded_azure_client_secret>
      azure_tenant_id: <base64_encoded_azure_tenant_id>
      azure_resource_prefix: <base64_encoded_azure_resource_prefix>
      azure_resourcegroup: <base64_encoded_azure_resourcegroup>
      azure_region: <base64_encoded_azure_region>

重要

在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。

3.7.4.2. 配置 Azure 集群以使用短期凭证

要安装使用 Microsoft Entra Workload ID 的集群,您必须配置 Cloud Credential Operator 工具,并为集群创建所需的 Azure 资源。

3.7.4.2.1. 配置 Cloud Credential Operator 工具

当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。

注意

ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。

先决条件

  • 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
  • 已安装 OpenShift CLI(oc)。
  • 您已为 ccoctl 工具创建了全局 Microsoft Azure 帐户,用于以下权限:

    例 3.15. 所需的 Azure 权限

    • Microsoft.Resources/subscriptions/resourceGroups/read
    • Microsoft.Resources/subscriptions/resourceGroups/write
    • Microsoft.Resources/subscriptions/resourceGroups/delete
    • Microsoft.Authorization/roleAssignments/read
    • Microsoft.Authorization/roleAssignments/delete
    • Microsoft.Authorization/roleAssignments/write
    • Microsoft.Authorization/roleDefinitions/read
    • Microsoft.Authorization/roleDefinitions/write
    • Microsoft.Authorization/roleDefinitions/delete
    • Microsoft.Storage/storageAccounts/listkeys/action
    • Microsoft.Storage/storageAccounts/delete
    • Microsoft.Storage/storageAccounts/read
    • Microsoft.Storage/storageAccounts/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/write
    • Microsoft.Storage/storageAccounts/blobServices/containers/delete
    • Microsoft.Storage/storageAccounts/blobServices/containers/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/delete
    • Microsoft.ManagedIdentity/userAssignedIdentities/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/read
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write
    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/delete
    • Microsoft.Storage/register/action
    • Microsoft.ManagedIdentity/register/action

流程

  1. 运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    注意

    确保 $RELEASE_IMAGE 的架构与将使用 ccoctl 工具的环境架构相匹配。

  3. 运行以下命令,将 CCO 容器镜像中的 ccoctl 二进制文件提取到 OpenShift Container Platform 发行镜像中:

    $ oc image extract $CCO_IMAGE \
      --file="/usr/bin/ccoctl.<rhel_version>" \1
      -a ~/.pull-secret
    1
    对于 <rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本对应的值。如果没有指定值,则默认使用 ccoctl.rhel8。以下值有效:
    • rhel8: 为使用 RHEL 8 的主机指定这个值。
    • rhel9 :为使用 RHEL 9 的主机指定这个值。
  4. 运行以下命令更改权限以使 ccoctl 可执行:

    $ chmod 775 ccoctl.<rhel_version>

验证

  • 要验证 ccoctl 是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:

    $ ./ccoctl.rhel9

    输出示例

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for {ibm-cloud-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

3.7.4.2.2. 使用 Cloud Credential Operator 实用程序创建 Azure 资源

您可以使用 ccoctl azure create-all 命令自动创建 Azure 资源。

注意

默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。

先决条件

您必须:

  • 提取并准备好 ccoctl 二进制文件。
  • 使用 Azure CLI 访问 Microsoft Azure 帐户。

流程

  1. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 CredentialsRequest 对象列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \1
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2
      --to=<path_to_directory_for_credentials_requests> 3
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。
    注意

    此命令可能需要一些时间才能运行。

  3. 要启用 ccoctl 工具自动检测 Azure 凭证,请运行以下命令登录到 Azure CLI:

    $ az login
  4. 运行以下命令,使用 ccoctl 工具处理所有 CredentialsRequest 对象:

    $ ccoctl azure create-all \
      --name=<azure_infra_name> \1
      --output-dir=<ccoctl_output_dir> \2
      --region=<azure_region> \3
      --subscription-id=<azure_subscription_id> \4
      --credentials-requests-dir=<path_to_credentials_requests_directory> \5
      --dnszone-resource-group-name=<azure_dns_zone_resource_group_name> \6
      --tenant-id=<azure_tenant_id> 7
    1
    为用于跟踪的所有创建 Azure 资源指定用户定义的名称。
    2
    可选:指定您希望 ccoctl 实用程序在其中创建对象的目录。默认情况下,实用程序在运行命令的目录中创建对象。
    3
    指定在其中创建云资源的 Azure 区域。
    4
    指定要使用的 Azure 订阅 ID。
    5
    指定包含组件 CredentialsRequest 对象文件的目录。
    6
    指定包含集群基域 Azure DNS 区的资源组名称。
    7
    指定要使用的 Azure 租户 ID。
    注意

    如果您的集群使用 TechPreviewNoUpgrade 功能集启用的技术预览功能,则必须包含 --enable-tech-preview 参数。

    要查看其他可选参数以及如何使用它们的说明,请运行 azure create-all --help 命令。

验证

  • 要验证 OpenShift Container Platform secret 是否已创建,列出 <path_to_ccoctl_output_dir>/manifests 目录中的文件:

    $ ls <path_to_ccoctl_output_dir>/manifests

    输出示例

    azure-ad-pod-identity-webhook-config.yaml
    cluster-authentication-02-config.yaml
    openshift-cloud-controller-manager-azure-cloud-credentials-credentials.yaml
    openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml
    openshift-cluster-api-capz-manager-bootstrap-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-disk-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-file-credentials-credentials.yaml
    openshift-image-registry-installer-cloud-credentials-credentials.yaml
    openshift-ingress-operator-cloud-credentials-credentials.yaml
    openshift-machine-api-azure-cloud-credentials-credentials.yaml

    您可以验证 Microsoft Entra ID 服务账户通过查询 Azure 而创建。如需更多信息,请参阅 Azure 文档中有关列出 Entra ID 服务帐户的内容。

3.7.4.2.3. 整合 Cloud Credential Operator 实用程序清单

要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您已配置了 Cloud Credential Operator 实用程序 (ccoctl)。
  • 已使用 ccoctl 工具创建了集群所需的云供应商资源。

流程

  1. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  2. 如果您使用 ccoctl 实用程序创建新的 Azure 资源组,而不是使用现有资源组,请修改 install-config.yaml 中的 resourceGroupName 参数,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    # ...
    platform:
      azure:
        resourceGroupName: <azure_infra_name> 1
    # ...

    1
    这个值必须与 ccoctl azure create-all 命令的 --name 参数指定的 Azure 资源用户定义的名称匹配。
  3. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  4. 运行以下命令,将 ccoctl 工具生成的清单复制到安装程序创建的 manifests 目录中:

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. 将包含私钥的 tls 目录复制到安装目录中:

    $ cp -a /<path_to_ccoctl_output_dir>/tls .

3.7.5. 可选:为私有镜像 registry 准备私有 Microsoft Azure 集群

通过在私有 Microsoft Azure 集群上安装私有镜像 registry,您可以创建私有存储端点。私有存储端点在 registry 的存储帐户中禁用面向公共的端点,为 OpenShift Container Platform 部署添加额外的安全层。

重要

不要在 Microsoft Azure Red Hat OpenShift (ARO) 上安装私有镜像 registry,因为端点会使 Microsoft Azure Red Hat OpenShift 集群处于不可恢复的状态。

使用以下指南准备私有 Microsoft Azure 集群,以使用私有镜像 registry 安装。

先决条件

  • 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
  • 已安装 OpenShift CLI(oc)。
  • 您已准备了一个 install-config.yaml,其中包含以下信息:

    • publish 字段设置为 Internal
  • 您已设置了创建私有存储端点的权限。如需更多信息,请参阅"安装程序置备的基础架构的Azure 权限"。

流程

  1. 如果您之前还没有创建安装清单文件,请运行以下命令:

    $ ./openshift-install create manifests --dir <installation_directory>

    这个命令显示以下信息:

    输出示例

    INFO Consuming Install Config from target directory
    INFO Manifests created in: <installation_directory>/manifests and <installation_directory>/openshift

  2. 创建镜像 registry 配置对象,并传递 Microsoft Azure 提供的 networkResourceGroupNamesubnetNamevnetName。例如:

    $ touch imageregistry-config.yaml
    apiVersion: imageregistry.operator.openshift.io/v1
    kind: Config
    metadata:
      name: cluster
    spec:
      managementState: "Managed"
      replicas: 2
      rolloutStrategy: RollingUpdate
      storage:
        azure:
          networkAccess:
            internal:
              networkResourceGroupName: <vnet_resource_group> 1
              subnetName: <subnet_name> 2
              vnetName: <vnet_name> 3
            type: Internal
    1
    可选。如果您有一个现有的 VNet 和子网设置,将 <vnet_resource_group> 替换为包含现有虚拟网络 (VNet) 的资源组名称。
    2
    可选。如果您有一个现有的 VNet 和子网设置,将 <subnet_name> 替换为指定资源组中现有计算子网的名称。
    3
    可选。如果您有一个现有的 VNet 和子网设置,请将 &lt ;vnet_name > 替换为指定资源组中现有虚拟网络(VNet)的名称。
    注意

    imageregistry-config.yaml 文件会在安装过程中消耗。如果需要,您必须在安装前备份。

  3. 运行以下命令,将 imageregistry-config.yaml 文件移到 <installation_directory/manifests> 文件夹中:

    $ mv imageregistry-config.yaml <installation_directory/manifests/>

后续步骤

  • imageregistry-config.yaml 文件移到 <installation_directory/manifests> 文件夹并设置所需权限后,继续执行 "Deploying the cluster"。

其他资源

3.7.6. 部署集群

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

重要

在初始安装过程中,您只能运行安装程序的 create cluster 命令一次。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 进入包含安装程序的目录并初始化集群部署:

    $ ./openshift-install create cluster --dir <installation_directory> \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定自定义 ./install-config.yaml 文件的位置。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 info

    如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

  3. 为您的订阅输入以下 Azure 参数值:

    • Azure subscription id :输入用于集群的订阅 ID。
    • Azure 租户 id :输入租户 ID。
  4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

    • 如果您使用服务主体,请输入其应用程序 ID。
    • 如果您使用系统分配的受管身份,请将此值设为空白。
    • 如果您使用用户分配的受管身份,请指定其客户端 ID。
  5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

    • 如果您使用服务主体,请输入其密码。
    • 如果您使用系统分配的受管身份,请将此值设为空白。
    • 如果您使用用户分配的受管身份,请将此值设为空白。

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

验证

当集群部署成功完成时:

  • 终端会显示用于访问集群的说明,包括指向 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

3.7.7. 使用 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.7.8. 后续步骤

3.8. 在 Azure 上将集群安装到一个政府区域

在 OpenShift Container Platform 版本 4.17 中,您可以在 Microsoft Azure 上将集群安装到一个政府区域。要配置政府区域,请在安装集群前修改 install-config.yaml 文件中的参数。

3.8.1. Azure 政府区域

OpenShift Container Platform 支持将集群部署到 Microsoft Azure Government(MAG) 区域。MAG 是专门为需要运行敏感负载的美国政府机构、企业、企业和其他美国客户特别设计的。MAG 由仅政府数据中心区域组成,它们都赋予了 影响级别 5 授权

安装到 MAG 区域需要在 install-config.yaml 文件中手动配置 Azure Government 专用云实例和区域。您还必须更新服务主体以引用适当的政府环境。

注意

Azure 政府区域不能使用安装程序的引导终端提示来选择。您必须在 install-config.yaml 文件中手动定义区域。记得还要根据指定的区域设置专用云实例,如 AzureUSrianCloud

3.8.2. 私有集群

您可以部署不公开外部端点的私有 OpenShift Container Platform 集群。私有集群只能从内部网络访问,且无法在互联网中看到。

默认情况下,OpenShift Container Platform 被置备为使用可公开访问的 DNS 和端点。在部署集群时,私有集群会将 DNS、Ingress Controller 和 API 服务器设置为私有。这意味着集群资源只能从您的内部网络访问,且不能在互联网中看到。

重要

如果集群有任何公共子网,管理员创建的负载均衡器服务可能会公开访问。为确保集群安全性,请验证这些服务是否已明确标注为私有。

要部署私有集群,您必须:

  • 使用满足您的要求的现有网络。集群资源可能会在网络上的其他集群间共享。
  • 从有权访问的机器中部署:

    • 您置备的云的 API 服务。
    • 您调配的网络上的主机。
    • 用于获取安装介质的互联网。

您可以使用符合这些访问要求的机器,并按照您的公司规定进行操作。例如,此机器可以是云网络上的堡垒主机,也可以是可通过 VPN 访问网络的机器。

3.8.2.1. Azure 中的私有集群

要在 Microsoft Azure 上创建私有集群,您必须提供一个现有的私有 VNet 和子网来托管集群。安装程序还必须能够解析集群所需的 DNS 记录。安装程序只为内部流量配置 Ingress Operator 和 API 服务器。

根据您的网络如何连接到私有 VNET,您可能需要使用 DNS 转发器来解析集群的私有 DNS 记录。集群的机器在内部使用 168.63.129.16 进行 DNS 解析。如需更多信息,请参阅 Azure 文档中的 What is Azure Private DNS?What is IP address 168.63.129.16??。

集群仍然需要访问互联网来访问 Azure API。

安装私有集群时不需要或创建以下项目:

  • BaseDomainResourceGroup,因为集群不会创建公共记录
  • 公共 IP 地址
  • 公共 DNS 记录
  • 公共端点

    The cluster is configured so that the Operators do not create public records for the cluster and all cluster machines are placed in the private subnets that you specify.
3.8.2.1.1. 限制

Azure 上的私有集群只受到与使用现有 VNet 相关的限制。

3.8.2.2. 用户定义的出站路由

在 OpenShift Container Platform 中,您可以选择自己的出站路由来连接到互联网。这可让您跳过创建公共 IP 地址和公共负载均衡器的步骤。

您可在安装集群前修改 install-config.yaml 文件中的参数来配置用户定义的路由。安装集群时,需要一个已存在的 VNet 来使用出站路由,安装程序不负责配置它。

当将集群配置为使用用户定义的路由时,安装程序不会创建以下资源:

  • 用于访问互联网的出站规则。
  • 公共负载均衡器的公共 IP。
  • Kubernetes Service 对象,为出站请求将集群机器添加到公共负载均衡器中。

在设置用户定义的路由前,您必须确保以下项目可用:

  • 出口到互联网可以拉取容器镜像,除非使用 OpenShift image registry 镜像。
  • 集群可以访问 Azure API。
  • 配置了各种允许列表端点。您可以在 配置防火墙 部分引用这些端点。

支持一些已存在的网络设置,使用用户定义的路由访问互联网。

3.8.3. 关于为 OpenShift Container Platform 集群重复使用 VNet

在 OpenShift Container Platform 4.17 中,您可以在 Microsoft Azure 中将集群部署到现有的 Azure Virtual Network(VNet)中。如果您这样做,还必须在 VNet 和路由规则中使用现有子网。

通过将 OpenShift Container Platform 部署到现有的 Azure VNet 中,您可以避免新帐户中的服务限制,或者更容易地利用公司所设置的操作限制。如果您无法获得创建 VNet 所需的基础架构创建权限,则可以使用这个选项。

3.8.3.1. 使用 VNet 的要求

当使用现有 VNet 部署集群时,必须在安装集群前执行额外的网络配置。在安装程序置备的基础架构集群中,安装程序通常会创建以下组件,但在安装到现有 VNet 时不会创建它们:

  • 子网
  • 路由表
  • VNets
  • 网络安全组
注意

安装程序要求您使用由云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,并导致安装失败。

如果使用自定义 VNet,您必须正确配置它及其子网,供安装程序和集群使用。安装程序不能为集群分配要使用的网络范围,为子网设置路由表,或者设置类似 DHCP 的 VNet 选项,因此您必须在安装集群前这样做。

集群必须能够访问包含现有 VNet 和子网的资源组。虽然集群创建的所有资源都放在它创建的单独资源组中,但有些网络资源则从单独的组中使用。有些集群 Operator 必须能够访问这两个资源组中的资源。例如,Machine API 控制器会为它创建的虚拟机附加 NICS,以便从网络资源组中进行子网。

您的 VNet 必须满足以下特征:

  • VNet 的 CIDR 块必须包含 Networking.MachineCIDR 范围,它是集群机器的 IP 地址池。
  • VNet 及其子网必须属于同一资源组,子网必须配置为使用 Azure 分配的 DHCP IP 地址,而不是静态 IP 地址。

您必须在 VNet 中提供两个子网,一个用于 control plane 机器,一个用于计算机器。因为 Azure 在您指定的区域内的不同可用区中分发机器,所以集群将默认具有高可用性。

注意

默认情况下,如果您在 install-config.yaml 文件中指定可用区,安装程序会在一个区(region)内的这些可用区间分发 control plane 机器和计算机器。要确保集群的高可用性,请选择至少含有三个可用区的区域。如果您的区域包含的可用区少于三个,安装程序将在可用区中放置多台 control plane 机器。

为确保您提供的子网适合,安装程序会确认以下数据:

  • 所有指定的子网都存在。
  • 有两个专用子网,一个用于 control plane 机器,一个用于计算机器。
  • 子网 CIDR 属于您指定的机器 CIDR。机器不会在您不为其提供私有子网的可用区中置备。如果需要,安装程序会创建管理 control plane 和 worker 节点的公共负载均衡器,Azure 会为其分配一个公共 IP 地址。
注意

如果您销毁了使用现有 VNet 的集群,则不会删除 VNet。

3.8.3.1.1. 网络安全组要求

托管 compute 和 control plane 机器的子网的网络安全组需要特定的访问权限,以确保集群通信正确。您必须创建规则以允许访问所需的集群通信端口。

重要

在安装集群前,必须先设置网络安全组规则。如果您试图在没有所需访问权限的情况下安装集群,安装程序无法访问 Azure API,安装会失败。

表 3.25. 所需端口
port描述Control plane(控制平面)Compute

80

允许 HTTP 流量

 

x

443

允许 HTTPS 流量

 

x

6443

允许与 control plane 机器通信

x

 

22623

允许内部与机器配置服务器通信以用于置备机器

x

 
  1. 如果您使用 Azure Firewall 来限制互联网访问,您可以将 Azure Firewall 配置为允许 Azure API。不需要网络安全组规则。如需更多信息,请参阅"添加资源"中的"配置防火墙"。
重要

目前,不支持阻止或限制机器配置服务器端点。机器配置服务器必须公开给网络,以便新置备的机器没有现有配置或状态,才能获取其配置。在这个模型中,信任的根是证书签名请求 (CSR) 端点,即 kubelet 发送其证书签名请求以批准加入集群。因此,机器配置不应用于分发敏感信息,如 secret 和证书。

为确保机器配置服务器端点,端口 22623 和 22624 在裸机场景中是安全的,客户必须配置正确的网络策略。

由于集群组件不会修改 Kubernetes 控制器更新的用户提供的网络安全组,因此为 Kubernetes 控制器在不影响其余环境的情况下创建一个伪网络安全组。

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

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

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

10250-10259

Kubernetes 保留的默认端口

UDP

4789

VXLAN

6081

Geneve

9000-9999

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

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

UDP 端口 123 上的网络时间协议 (NTP)

如果配置外部 NTP 时间服务器,您必须打开 UDP 端口 123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

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

TCP

2379-2380

etcd 服务器和对等端口

3.8.3.2. 权限划分

从 OpenShift Container Platform 4.3 开始,您不需要安装程序置备的基础架构集群部署所需的所有权限。这与您所在机构可能拥有的权限划分类似:一些个人可以在您的云中创建不同的资源。例如,您可以创建特定于应用程序的对象,如实例、存储和负载均衡器,但不能创建与网络相关的组件,如 VNets、子网或入站规则。

您在创建集群时使用的 Azure 凭证不需要 VNets 和核心网络组件(如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要获取集群中的机器需要的应用程序资源的权限,如负载均衡器、安全组、存储帐户和节点。

3.8.3.3. 集群间隔离

因为集群无法修改现有子网中的网络安全组,所以无法在 VNet 中相互隔离集群。

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

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

先决条件

  • 您在本地机器上有一个 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.8.4.1. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 3.28. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

其他资源

3.8.4.2. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 3.16. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
3.8.4.3. 为 Azure 虚拟机启用可信启动

在 Azure 上安装集群时,您可以启用两个可信启动功能: 安全引导虚拟化可信平台模块

有关支持可信启动功能的虚拟机大小的更多信息,请参阅 虚拟机大小

重要

可信启动只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用可信启动:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节,仅在计算节点上启用可信启动:

      compute:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 通过添加以下小节在所有节点上启用可信启动:

      platform:
        azure:
          settings:
            securityType: TrustedLaunch
            trustedLaunch:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
3.8.4.4. 启用机密虚拟机

您可在安装集群前启用机密虚拟机。您可以为计算节点、control plane 节点或所有节点启用机密虚拟机。

重要

使用机密虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

您可以使用带有以下虚拟机大小的机密虚拟机:

  • DCasv5-series
  • DCadsv5-series
  • ECasv5-series
  • ECadsv5-series
重要

64 位 ARM 架构目前不支持机密虚拟机。

先决条件

  • 您已创建了 install-config.yaml 文件。

流程

  • 在部署集群前编辑 install-config.yaml 文件:

    • 通过添加以下小节,仅在 control plane 上启用机密虚拟机:

      controlPlane:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,仅在计算节点上启用机密虚拟机:

      compute:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 通过添加以下小节,在所有节点上启用机密虚拟机:

      platform:
        azure:
          settings:
            securityType: ConfidentialVM
            confidentialVM:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
          osDisk:
            securityProfile:
              securityEncryptionType: VMGuestStateOnly
3.8.4.5. Azure 的自定义 install-config.yaml 文件示例

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

重要

此示例 YAML 文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件,并进行修改。

apiVersion: v1
baseDomain: example.com 1
controlPlane: 2
  hyperthreading: Enabled 3 4
  name: master
  platform:
    azure:
      encryptionAtHost: true
      ultraSSDCapability: Enabled
      osDisk:
        diskSizeGB: 1024 5
        diskType: Premium_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      type: Standard_D8s_v3
  replicas: 3
compute: 6
- hyperthreading: Enabled 7 8
  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 9
        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      zones: 10
      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 11
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 12
  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      osImage: 13
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 14
    region: usgovvirginia
    resourceGroupName: existing_resource_group 15
    networkResourceGroupName: vnet_resource_group 16
    virtualNetwork: vnet 17
    controlPlaneSubnet: control_plane_subnet 18
    computeSubnet: compute_subnet 19
    outboundType: UserDefinedRouting 20
    cloudName: AzureUSGovernmentCloud 21
pullSecret: '{"auths": ...}' 22
fips: false 23
sshKey: ssh-ed25519 AAAA... 24
publish: Internal 25
1 11 22
必需。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4 8
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您禁用并发多线程,请为您的机器使用较大的虚拟机类型,如 Standard_D8s_v3

5 9
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
10
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
12
要安装的集群网络插件。默认值 OVNKubernetes 是唯一支持的值。
13
可选:应该用来引导 control plane 和计算机器的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。platform.azure.defaultMachinePlatform.osImage 下的 publisher, offer, sku, 和 version 参数应用到 control plane 和计算机器。如果设置了 controlPlane.platform.azure.osImagecompute.platform.azure.osImage 下的参数,它们会覆盖 platform.azure.defaultMachinePlatform.osImage 参数。
14
指定包含基域的 DNS 区的资源组的名称。
15
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
16
如果使用现有的 VNet,请指定包含它的资源组的名称。
17
如果使用现有的 VNet,请指定其名称。
18
如果使用现有的 VNet,请指定托管 control plane 机器的子网名称。
19
如果使用现有的 VNet,请指定托管计算机器的子网名称。
20
您可以自定义自己的出站路由。配置用户定义的路由可防止在集群中公开外部端点。出口的用户定义路由需要将集群部署到现有的 VNet。
21
指定要将集群部署到的 Azure 云环境的名称。将 AzureUS GovernmentCloud 设置为部署到 Microsoft Azure Government(MAG)区域。默认值为 AzurePublicCloud
23
是否启用或禁用 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。

24
您可以选择提供您用来访问集群中机器的 sshKey 值。
注意

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

25
如何发布集群的面向用户的端点。将 publish 设置为 Internal 以部署一个私有集群,它不能被互联网访问。默认值为 External
3.8.4.6. 在安装过程中配置集群范围的代理

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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.8.5. 部署集群

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

重要

在初始安装过程中,您只能运行安装程序的 create cluster 命令一次。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 进入包含安装程序的目录并初始化集群部署:

    $ ./openshift-install create cluster --dir <installation_directory> \ 1
        --log-level=info 2
    1
    对于 <installation_directory>,请指定自定义 ./install-config.yaml 文件的位置。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 info

    如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

  3. 为您的订阅输入以下 Azure 参数值:

    • Azure subscription id :输入用于集群的订阅 ID。
    • Azure 租户 id :输入租户 ID。
  4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

    • 如果您使用服务主体,请输入其应用程序 ID。
    • 如果您使用系统分配的受管身份,请将此值设为空白。
    • 如果您使用用户分配的受管身份,请指定其客户端 ID。
  5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

    • 如果您使用服务主体,请输入其密码。
    • 如果您使用系统分配的受管身份,请将此值设为空白。
    • 如果您使用用户分配的受管身份,请将此值设为空白。

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

验证

当集群部署成功完成时:

  • 终端会显示用于访问集群的说明,包括指向 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

3.8.6. 使用 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.8.7. 后续步骤

第 4 章 用户置备的基础架构

4.1. 准备在 Azure 上安装集群

要准备在 Azure 上安装 OpenShift Container Platform 集群,请完成以下步骤:

4.1.1. OpenShift Container Platform 互联网访问

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

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

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

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

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

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

将密钥传递给节点后,您可以使用密钥对作为用户 核心 通过 SSH 连接到 RHCOS 节点。若要通过 SSH 访问节点,必须由 SSH 为您的本地用户管理私钥身份。

如果要通过 SSH 连接到集群节点来执行安装调试或灾难恢复,则必须在安装过程中提供 SSH 公钥。./openshift-install gather 命令还需要在集群节点上设置 SSH 公钥。

重要

不要在生产环境中跳过这个过程,在生产环境中需要灾难恢复和调试。

注意

您必须使用本地密钥,而不是使用特定平台方法配置 的密钥,如 AWS 密钥对

流程

  1. 如果您在本地计算机上没有可用于在集群节点上进行身份验证的现有 SSH 密钥对,请创建一个。例如,在使用 Linux 操作系统的计算机上运行以下命令:

    $ ssh-keygen -t ed25519 -N '' -f <path>/<file_name> 1
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

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

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub

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

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

    注意

    在某些发行版中,自动管理默认 SSH 私钥身份,如 ~/.ssh/id_rsa~/.ssh/id_dsa

    1. 如果 ssh-agent 进程尚未为您的本地用户运行,请将其作为后台任务启动:

      $ eval "$(ssh-agent -s)"

      输出示例

      Agent pid 31874

      注意

      如果集群处于 FIPS 模式,则只使用 FIPS 兼容算法来生成 SSH 密钥。密钥必须是 RSA 或 ECDSA。

  4. 将 SSH 私钥添加到 ssh-agent

    $ ssh-add <path>/<file_name> 1
    1
    指定 SSH 私钥的路径和文件名,如 ~/.ssh/id_ed25519.pub

    输出示例

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

后续步骤

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

4.1.3. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,至少有 1.2 GB 本地磁盘空间。

流程

  1. 进入 Red Hat Hybrid Cloud Console 上的 Cluster Type 页。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 在页的 Run it yourself 部分中选择您的基础架构供应商。
  3. OpenShift 安装程序下的下拉菜单中选择您的主机操作系统和架构,然后点下载安装程序
  4. 将下载的文件保存在要存储安装配置文件的目录中。

    重要
    • 安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。删除集群需要这两个文件。
    • 删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。
  5. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

另外,您还可以从红帽客户门户网站检索安装程序,您可以在其中指定要下载的安装程序版本。但是,您需要有一个有效的订阅才能访问此页。

4.1.4. 安装 OpenShift CLI

您可以安装 OpenShift CLI(oc)来使用命令行界面与 OpenShift Container Platform 进行交互。您可以在 Linux、Windows 或 macOS 上安装 oc

重要

如果安装了旧版本的 oc,则可能无法使用 OpenShift Container Platform 4.17 中的所有命令。下载并安装新版本的 oc

在 Linux 上安装 OpenShift CLI

您可以按照以下流程在 Linux 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 产品变体 下拉列表中选择架构。
  3. 版本 下拉列表中选择适当的版本。
  4. OpenShift v4.17 Linux Clients 条目旁的 Download Now 来保存文件。
  5. 解包存档:

    $ tar xvf <file>
  6. oc 二进制文件放到 PATH 中的目录中

    要查看您的 PATH,请执行以下命令:

    $ echo $PATH

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    $ oc <command>
在 Windows 上安装 OpenShift CLI

您可以按照以下流程在 Windows 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 Windows Client 条目旁的 Download Now 来保存文件。
  4. 使用 ZIP 程序解压存档。
  5. oc 二进制文件移到 PATH 中的目录中

    要查看您的 PATH,请打开命令提示并执行以下命令:

    C:\> path

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    C:\> oc <command>
在 macOS 上安装 OpenShift CLI

您可以按照以下流程在 macOS 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 macOS Clients 条目旁的 Download Now 来保存文件。

    注意

    对于 macOS arm64,请选择 OpenShift v4.17 macOS arm64 Client 条目。

  4. 解包和解压存档。
  5. oc 二进制文件移到 PATH 的目录中。

    要查看您的 PATH,请打开终端并执行以下命令:

    $ echo $PATH

验证

  • 使用 oc 命令验证安装:

    $ oc <command>

4.1.5. OpenShift Container Platform 的 Telemetry 访问

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

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

其他资源

4.2. 在使用用户置备的受限网络中的 Azure 上安装集群

在 OpenShift Container Platform 中,您可以使用您提供的基础架构在 Microsoft Azure 上安装集群。

提供的几个 Azure Resource Manager(ARM) 模板可协助完成这些步骤,也可帮助您自行建模。

重要

进行用户置备的基础架构安装的步骤仅作为示例。使用您提供的基础架构安装集群需要了解云供应商和 OpenShift Container Platform 安装过程。提供的几个 ARM 模板可帮助完成这些步骤,或帮助您自行建模。您还可以自由选择通过其他方法创建所需的资源。

先决条件

4.2.1. 关于在受限网络中安装

在 OpenShift Container Platform 4.17 中,可以执行不需要有效的互联网连接来获取软件组件的安装。受限网络安装可以使用安装程序置备的基础架构或用户置备的基础架构完成,具体取决于您要安装集群的云平台。

如果您选择在云平台中执行受限网络安装,您仍需要访问其云 API。有些云功能,比如 Amazon Web Service 的 Route 53 DNS 和 IAM 服务,需要访问互联网。根据您的网络,在裸机硬件、Nutanix 或 VMware vSphere 上安装可能需要较少的互联网访问。

要完成受限网络安装,您必须创建一个 registry,以镜像 OpenShift 镜像 registry 的内容并包含安装介质。您可以在镜像主机上创建此 registry,该主机可同时访问互联网和您的封闭网络,也可以使用满足您的限制条件的其他方法。

重要

由于用户置备安装配置的复杂性,在尝试使用用户置备的基础架构受限网络安装前,请考虑完成标准用户置备的基础架构安装。完成此测试安装后,您可以更轻松地隔离和排除在受限网络中安装过程中可能出现的任何问题。

4.2.1.1. 其他限制

受限网络中的集群有以下额外限制和限制:

  • ClusterVersion 状态包含一个 Unable to retrieve available updates 错误。
  • 默认情况下,您无法使用 Developer Catalog 的内容,因为您无法访问所需的镜像流标签。
4.2.1.2. OpenShift Container Platform 互联网访问

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

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

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

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

4.2.2. 配置 Azure 项目

在安装 OpenShift Container Platform 之前,您必须配置 Azure 项目来托管它。

重要

所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语列表,请参阅 Azure 文档中的解决保留资源名称错误

4.2.2.1. Azure 帐户限值

OpenShift Container Platform 集群使用诸多 Microsoft Azure 组件,默认的 Azure 订阅和服务限值、配额和约束会影响您安装 OpenShift Container Platform 集群的能力。

重要

默认的限制因服务类别的不同(如 Free Trial 或 Pay-As-You-Go)以及系列的不同(如 Dv2 、F 或 G)而有所不同。例如,对于 Enterprise Agreement 订阅的默认限制是 350 个内核。

在 Azure 上安装默认集群前,请检查您的订阅类型的限制,如有必要,请提高帐户的配额限制。

下表总结了 Azure 组件,它们的限值会影响您安装和运行 OpenShift Container Platform 集群的能力。

组件默认所需的组件数默认 Azure 限值描述

vCPU

44

每个区域 20 个

默认集群需要 44 个 vCPU,因此您必须提高帐户限值。

默认情况下,每个集群创建以下实例:

  • 一台 Bootstrap 机器,在安装后删除
  • 三个 control plane 机器
  • 三个计算(compute)机器

因为 bootstrap 和 control plane 机器使用 Standard_D8s_v3 虚拟机 (使用 8 个 vCPU),因此计算机器使用 Standard_D4s_v3 虚拟机(使用 4 个 vCPU),所以默认集群需要 44 个 vCPU。bootstrap 节点 VM(使用 8 个 vCPU)只在安装过程中使用。

若要部署更多 worker 节点、启用自动扩展、部署大型工作负载或使用不同的实例类型,您必须进一步提高帐户的 vCPU 限值,以确保集群可以部署您需要的机器。

OS Disk

7

 

每个集群机器必须至少有 100 GB 存储和 300 IOPS。虽然这些值是最低支持的值,但对于具有密集型工作负载的生产环境集群和集群,建议使用更快的存储。有关优化性能存储的更多信息,请参阅"扩展和性能"部分中的页面标题为"优化存储"。

VNet

1

每个区域 1000 个

每个默认集群都需要一个虚拟网络 (VNet),此网络包括两个子网。

网络接口

7

每个区域 65,536 个

每个默认集群都需要 7 个网络接口。如果您要创建更多机器或者您部署的工作负载要创建负载均衡器,则集群会使用更多的网络接口。

网络安全组

2

5000

每个集群为 VNet 中的每个子网创建网络安全组。默认集群为 control plane 和计算节点子网创建网络安全组:

controlplane

允许从任何位置通过端口 6443 访问 control plane 机器

node

允许从互联网通过端口 80 和 443 访问 worker 节点

网络负载均衡器

3

每个区域 1000 个

每个集群都会创建以下负载均衡器

default

用于在 worker 机器之间对端口 80 和 443 的请求进行负载均衡的公共 IP 地址

internal

用于在 control plane 机器之间对端口 6443 和 22623 的请求进行负载均衡的专用 IP 地址

external

用于在 control plane 机器之间对端口 6443 的请求进行负载均衡的公共 IP 地址

如果您的应用程序创建了更多的 Kubernetes LoadBalancer 服务对象,您的集群会使用更多的负载均衡器。

公共 IP 地址

3

 

两个公共负载均衡器各自使用一个公共 IP 地址。bootstrap 机器也使用一个公共 IP 地址,以便您可以在安装期间通过 SSH 连接到该机器来进行故障排除。bootstrap 节点的 IP 地址仅在安装过程中使用。

专用 IP 地址

7

 

内部负载均衡器、三台 control plane 机器中的每一台以及三台 worker 机器中的每一台各自使用一个专用 IP 地址。

Spot VM vCPU(可选)

0

如果配置 spot 虚拟机,您的集群必须为每个计算节点有两个 spot VM vCPU。

每个区域 20 个

这是可选组件。要使用 spot 虚拟机,您必须将 Azure 默认限值增加到集群中至少有两倍的计算节点数量。

注意

不建议将 spot 虚拟机用于 control plane 节点。

其他资源

4.2.2.2. 在 Azure 中配置公共 DNS 区

要安装 OpenShift Container Platform,您使用的 Microsoft Azure 帐户必须在帐户中具有一个专用的公共托管 DNS 区。此区域必须对域具有权威。此服务为集群外部连接提供集群 DNS 解析和名称查询。

流程

  1. 标识您的域或子域,以及注册商(registrar)。您可以转移现有的域和注册商,或通过 Azure 或其他来源获取新的域和注册商。

    注意

    如需通过 Azure 购买域的更多信息,请参阅 Azure 文档中的购买 Azure 应用服务的自定义域名

  2. 如果您使用现有的域和注册商,请将其 DNS 迁移到 Azure。请参阅 Azure 文档中的将活动 DNS 名称迁移到 Azure 应用服务
  3. 为您的域配置 DNS。按照 Azure 文档中教程:在 Azure DNS 中托管域部分里的步骤,为您的域或子域创建一个公共托管区,提取新的权威名称服务器,并更新您的域使用的名称服务器的注册商记录。

    使用合适的根域(如 openshiftcorp.com)或子域(如 clusters.openshiftcorp.com)。

  4. 如果您使用子域,请按照您公司的流程将其委派记录添加到父域。

您可以通过访问此 示例来创建 DNS 区域来查看 Azure 的 DNS 解决方案

4.2.2.3. 提高 Azure 帐户限值

要提高帐户限值,请在 Azure 门户上提交支持请求。

注意

每一支持请求只能提高一种类型的配额。

流程

  1. 从 Azure 门户,点击左下角的 Help + suport
  2. 点击 New support request,然后选择所需的值:

    1. Issue type 列表中,选择 Service and subscription limits (quotas)
    2. Subscription 列表中,选择要修改的订阅。
    3. Quota type 列表中,选择要提高的配额。例如,选择 Compute-VM (cores-vCPUs) subscription limit increases 以增加 vCPU 的数量,这是安装集群所必须的。
    4. 点击 Next: Solutions
  3. Problem Details 页面中,提供您要提高配额所需的信息:

    1. 点击 Provide details,然后在 Quota details 窗口中提供所需的详情。
    2. 在 SUPPORT METHOD 和 CONTACT INFO 部分中,提供问题严重性和您的联系详情。
  4. 点击 Next: Review + create,然后点击 Create
4.2.2.4. 证书签名请求管理

在使用您置备的基础架构时,集群只能有限地访问自动机器管理,因此您必须提供一种在安装后批准集群证书签名请求 (CSR) 的机制。kube-controller-manager 只能批准 kubelet 客户端 CSR。machine-approver 无法保证使用 kubelet 凭证请求的提供证书的有效性,因为它不能确认是正确的机器发出了该请求。您必须决定并实施一种方法,以验证 kubelet 提供证书请求的有效性并进行批准。

4.2.2.5. 所需的 Azure 角色

OpenShift Container Platform 集群需要一个 Azure 身份来创建和管理 Azure 资源。在创建身份前,请验证您的环境是否满足以下要求:

  • 用于创建身份的 Azure 帐户被分配 User Access AdministratorContributor 角色。在以下情况下需要这些角色:

    • 创建服务主体或用户分配的受管身份。
    • 在虚拟机上启用系统分配的受管身份。
  • 如果您要使用服务主体完成安装,请验证您用来创建身份的 Azure 帐户是否已被分配了 Microsoft Entra ID 中的 microsoft.directory/servicePrincipals/createAsOwner 权限。

要在 Azure 门户上设置角色,请参阅 Azure 文档中的使用 RBAC 和 Azure 门户管理对 Azure 资源的访问

4.2.2.6. 用户置备的基础架构所需的 Azure 权限

安装程序需要访问具有所需权限的 Azure 服务主体或受管身份,以部署集群并维护其每日操作。这些权限必须授予与身份关联的 Azure 订阅。

以下选项可供您使用:

  • 您可以为身份分配 ContributorUser Access Administrator 角色。分配这些角色是授予所有所需权限的最快速方法。

    有关分配角色的更多信息,请参阅 Azure 文档,使用 Azure 门户管理 Azure 资源的访问

  • 如果机构的安全策略需要更严格的权限集,您可以创建具有所需权限的自定义角色

在 Microsoft Azure 上创建 OpenShift Container Platform 集群需要以下权限。

例 4.1. 创建授权资源所需的权限

  • Microsoft.Authorization/policies/audit/action
  • Microsoft.Authorization/policies/auditIfNotExists/action
  • Microsoft.Authorization/roleAssignments/read
  • Microsoft.Authorization/roleAssignments/write

例 4.2. 创建计算资源所需的权限

  • Microsoft.Compute/images/read
  • Microsoft.Compute/images/write
  • Microsoft.Compute/images/delete
  • Microsoft.Compute/availabilitySets/read
  • Microsoft.Compute/disks/beginGetAccess/action
  • Microsoft.Compute/disks/delete
  • Microsoft.Compute/disks/read
  • Microsoft.Compute/disks/write
  • Microsoft.Compute/galleries/images/read
  • Microsoft.Compute/galleries/images/versions/read
  • Microsoft.Compute/galleries/images/versions/write
  • Microsoft.Compute/galleries/images/write
  • Microsoft.Compute/galleries/read
  • Microsoft.Compute/galleries/write
  • Microsoft.Compute/snapshots/read
  • Microsoft.Compute/snapshots/write
  • Microsoft.Compute/snapshots/delete
  • Microsoft.Compute/virtualMachines/delete
  • Microsoft.Compute/virtualMachines/powerOff/action
  • Microsoft.Compute/virtualMachines/read
  • Microsoft.Compute/virtualMachines/write
  • Microsoft.Compute/virtualMachines/deallocate/action

例 4.3. 创建身份管理资源所需的权限

  • Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
  • Microsoft.ManagedIdentity/userAssignedIdentities/read
  • Microsoft.ManagedIdentity/userAssignedIdentities/write

例 4.4. 创建网络资源所需的权限

  • Microsoft.Network/dnsZones/A/write
  • Microsoft.Network/dnsZones/CNAME/write
  • Microsoft.Network/dnszones/CNAME/read
  • Microsoft.Network/dnszones/read
  • Microsoft.Network/loadBalancers/backendAddressPools/join/action
  • Microsoft.Network/loadBalancers/backendAddressPools/read
  • Microsoft.Network/loadBalancers/backendAddressPools/write
  • Microsoft.Network/loadBalancers/read
  • Microsoft.Network/loadBalancers/write
  • Microsoft.Network/networkInterfaces/delete
  • Microsoft.Network/networkInterfaces/join/action
  • Microsoft.Network/networkInterfaces/read
  • Microsoft.Network/networkInterfaces/write
  • Microsoft.Network/networkSecurityGroups/join/action
  • Microsoft.Network/networkSecurityGroups/read
  • Microsoft.Network/networkSecurityGroups/securityRules/delete
  • Microsoft.Network/networkSecurityGroups/securityRules/read
  • Microsoft.Network/networkSecurityGroups/securityRules/write
  • Microsoft.Network/networkSecurityGroups/write
  • Microsoft.Network/privateDnsZones/A/read
  • Microsoft.Network/privateDnsZones/A/write
  • Microsoft.Network/privateDnsZones/A/delete
  • Microsoft.Network/privateDnsZones/SOA/read
  • Microsoft.Network/privateDnsZones/read
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/read
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/write
  • Microsoft.Network/privateDnsZones/write
  • Microsoft.Network/publicIPAddresses/delete
  • Microsoft.Network/publicIPAddresses/join/action
  • Microsoft.Network/publicIPAddresses/read
  • Microsoft.Network/publicIPAddresses/write
  • Microsoft.Network/virtualNetworks/join/action
  • Microsoft.Network/virtualNetworks/read
  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read
  • Microsoft.Network/virtualNetworks/subnets/write
  • Microsoft.Network/virtualNetworks/write

例 4.5. 检查资源健康状况所需的权限

  • Microsoft.Resourcehealth/healthevent/Activated/action
  • Microsoft.Resourcehealth/healthevent/InProgress/action
  • Microsoft.Resourcehealth/healthevent/Pending/action
  • Microsoft.Resourcehealth/healthevent/Resolved/action
  • Microsoft.Resourcehealth/healthevent/Updated/action

例 4.6. 创建资源组所需的权限

  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Resources/subscriptions/resourcegroups/write

例 4.7. 创建资源标签所需的权限

  • Microsoft.Resources/tags/write

例 4.8. 创建存储资源所需的权限

  • Microsoft.Storage/storageAccounts/blobServices/read
  • Microsoft.Storage/storageAccounts/blobServices/containers/write
  • Microsoft.Storage/storageAccounts/fileServices/read
  • Microsoft.Storage/storageAccounts/fileServices/shares/read
  • Microsoft.Storage/storageAccounts/fileServices/shares/write
  • Microsoft.Storage/storageAccounts/fileServices/shares/delete
  • Microsoft.Storage/storageAccounts/listKeys/action
  • Microsoft.Storage/storageAccounts/read
  • Microsoft.Storage/storageAccounts/write

例 4.9. 创建部署所需的权限

  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/validate/action
  • Microsoft.Resources/deployments/operationstatuses/read

例 4.10. 创建计算资源的可选权限

  • Microsoft.Compute/availabilitySets/delete
  • Microsoft.Compute/availabilitySets/write

例 4.11. 创建 marketplace 虚拟机资源的可选权限

  • Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read
  • Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write

例 4.12. 启用用户管理加密的可选权限

  • Microsoft.Compute/diskEncryptionSets/read
  • Microsoft.Compute/diskEncryptionSets/write
  • Microsoft.Compute/diskEncryptionSets/delete
  • Microsoft.KeyVault/vaults/read
  • Microsoft.KeyVault/vaults/write
  • Microsoft.KeyVault/vaults/delete
  • Microsoft.KeyVault/vaults/deploy/action
  • Microsoft.KeyVault/vaults/keys/read
  • Microsoft.KeyVault/vaults/keys/write
  • Microsoft.Features/providers/features/register/action

删除 Microsoft Azure 上的 OpenShift Container Platform 集群需要以下权限。

例 4.13. 删除授权资源所需的权限

  • Microsoft.Authorization/roleAssignments/delete

例 4.14. 删除计算资源所需的权限

  • Microsoft.Compute/disks/delete
  • Microsoft.Compute/galleries/delete
  • Microsoft.Compute/galleries/images/delete
  • Microsoft.Compute/galleries/images/versions/delete
  • Microsoft.Compute/virtualMachines/delete
  • Microsoft.Compute/images/delete

例 4.15. 删除身份管理资源所需的权限

  • Microsoft.ManagedIdentity/userAssignedIdentities/delete

例 4.16. 删除网络资源所需的权限

  • Microsoft.Network/dnszones/read
  • Microsoft.Network/dnsZones/A/read
  • Microsoft.Network/dnsZones/A/delete
  • Microsoft.Network/dnsZones/CNAME/read
  • Microsoft.Network/dnsZones/CNAME/delete
  • Microsoft.Network/loadBalancers/delete
  • Microsoft.Network/networkInterfaces/delete
  • Microsoft.Network/networkSecurityGroups/delete
  • Microsoft.Network/privateDnsZones/read
  • Microsoft.Network/privateDnsZones/A/read
  • Microsoft.Network/privateDnsZones/delete
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/delete
  • Microsoft.Network/publicIPAddresses/delete
  • Microsoft.Network/virtualNetworks/delete

例 4.17. 检查资源健康状况所需的权限

  • Microsoft.Resourcehealth/healthevent/Activated/action
  • Microsoft.Resourcehealth/healthevent/Resolved/action
  • Microsoft.Resourcehealth/healthevent/Updated/action

例 4.18. 删除资源组所需的权限

  • Microsoft.Resources/subscriptions/resourcegroups/delete

例 4.19. 删除存储资源所需的权限

  • Microsoft.Storage/storageAccounts/delete
  • Microsoft.Storage/storageAccounts/listKeys/action
注意

要在 Azure 上安装 OpenShift Container Platform,您必须将资源组创建的权限范围到您的订阅。创建资源组后,您可以将剩余权限的范围限定到所创建的资源组。如果其他资源组中存在公共 DNS 区域,则必须始终将网络 DNS 区域相关权限应用到您的订阅。

在删除 OpenShift Container Platform 集群时,您可以将订阅的所有权限限定到您的订阅。

4.2.2.7. 创建服务主体

由于 OpenShift Container Platform 及其安装程序使用 Azure Resource Manager 创建 Microsoft Azure 资源,因此您必须创建一个服务主体来代表它。

先决条件

  • 安装或更新 Azure CLI
  • 您的 Azure 帐户具有您所用订阅所需的角色。
  • 如果要使用自定义角色,您已创建了带有在 使用用户置备的基础架构所需的 Azure 权限中列出的所需权限的一个自定义角色

流程

  1. 登录 Azure CLI:

    $ az login
  2. 如果您的 Azure 帐户使用订阅,请确定您使用正确的订阅:

    1. 查看可用帐户列表并记录您要用于集群的订阅的 tenantId 值:

      $ az account list --refresh

      输出示例

      [
        {
          "cloudName": "AzureCloud",
          "id": "9bab1460-96d5-40b3-a78e-17b15e978a80",
          "isDefault": true,
          "name": "Subscription Name",
          "state": "Enabled",
          "tenantId": "6057c7e9-b3ae-489d-a54e-de3f6bf6a8ee",
          "user": {
            "name": "you@example.com",
            "type": "user"
          }
        }
      ]

    2. 查看您的活跃帐户详情,确认 tenantId 值与您要使用的订阅匹配:

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "9bab1460-96d5-40b3-a78e-17b15e978a80",
        "isDefault": true,
        "name": "Subscription Name",
        "state": "Enabled",
        "tenantId": "6057c7e9-b3ae-489d-a54e-de3f6bf6a8ee", 1
        "user": {
          "name": "you@example.com",
          "type": "user"
        }
      }

      1
      确保 tenantId 参数的值是正确的订阅 ID。
    3. 如果您使用的订阅不正确,请更改活跃的订阅:

      $ az account set -s <subscription_id> 1
      1
      指定订阅 ID。
    4. 验证订阅 ID 更新:

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "33212d16-bdf6-45cb-b038-f6565b61edda",
        "isDefault": true,
        "name": "Subscription Name",
        "state": "Enabled",
        "tenantId": "8049c7e9-c3de-762d-a54e-dc3f6be6a7ee",
        "user": {
          "name": "you@example.com",
          "type": "user"
        }
      }

  3. 记录输出中的 tenantIdid 参数值。OpenShift Container Platform 安装过程中需要这些值。
  4. 为您的帐户创建服务主体:

    $ az ad sp create-for-rbac --role <role_name> \1
         --name <service_principal> \2
         --scopes /subscriptions/<subscription_id> 3
    1
    定义角色名称。您可以使用 Contributor 角色,或者指定包含所需权限的自定义角色。
    2
    定义服务主体名称。
    3
    指定订阅 ID。

    输出示例

    Creating 'Contributor' role assignment under scope '/subscriptions/<subscription_id>'
    The output includes credentials that you must protect. Be sure that you do not
    include these credentials in your code or check the credentials into your source
    control. For more information, see https://aka.ms/azadsp-cli
    {
      "appId": "ac461d78-bf4b-4387-ad16-7e32e328aec6",
      "displayName": <service_principal>",
      "password": "00000000-0000-0000-0000-000000000000",
      "tenantId": "8049c7e9-c3de-762d-a54e-dc3f6be6a7ee"
    }

  5. 记录前面输出中 appIdpassword 参数的值。OpenShift Container Platform 安装过程中需要这些值。
  6. 如果您将 Contributor 角色应用到服务主体,请运行以下命令来分配 User Administrator Access 角色:

    $ az role assignment create --role "User Access Administrator" \
      --assignee-object-id $(az ad sp show --id <appId> --query id -o tsv) 1
    1
    为您的服务主体指定 appId 参数值。

其他资源

4.2.2.8. 支持的 Azure 区域

安装程序会根据您的订阅动态地生成可用的 Microsoft Azure 区域列表。

支持的 Azure 公共区域
  • australiacentral (Australia Central)
  • australiaeast (Australia East)
  • australiasoutheast (Australia South East)
  • brazilsouth (Brazil South)
  • canadacentral (Canada Central)
  • canadaeast (Canada East)
  • centralindia (Central India)
  • centralus (Central US)
  • eastasia (East Asia)
  • eastus (East US)
  • eastus2 (East US 2)
  • francecentral (France Central)
  • germanywestcentral (Germany West Central)
  • israelcentral (Israel Central)
  • italynorth (Italy North)
  • japaneast (Japan East)
  • japanwest (Japan West)
  • koreacentral (Korea Central)
  • koreasouth (Korea South)
  • mexicocentral (Mexico Central)
  • northcentralus (North Central US)
  • northeurope (North Europe)
  • norwayeast (Norway East)
  • polandcentral (Poland Central)
  • qatarcentral (Qatar Central)
  • southafricanorth (South Africa North)
  • southcentralus (South Central US)
  • southeastasia (Southeast Asia)
  • southindia (South India)
  • spaincentral (Spain Central)
  • swedencentral (Sweden Central)
  • switzerlandnorth (Switzerland North)
  • uaenorth (UAE North)
  • uksouth (UK South)
  • ukwest (UK West)
  • westcentralus (West Central US)
  • westeurope (West Europe)
  • westindia (West India)
  • westus (West US)
  • westus2 (West US 2)
  • westus3 (West US 3)
支持的 Azure 政府区域

OpenShift Container Platform 4.6 添加了对以下 Microsoft Azure Government(MAG)区域的支持:

  • usgovtexas (US Gov Texas)
  • usgovvirginia (US Gov Virginia)

您可以参阅 Azure 文档来了解与所有可用 MAG 区域的信息。其他 MAG 区域应该可以与 OpenShift Container Platform 一起工作,但并没有经过测试。

4.2.3. 具有用户置备基础架构的集群的要求

对于包含用户置备的基础架构的集群,您必须部署所有所需的机器。

本节论述了在用户置备的基础架构上部署 OpenShift Container Platform 的要求。

4.2.3.1. 集群安装所需的机器

最小的 OpenShift Container Platform 集群需要以下主机:

表 4.1. 最低所需的主机
主机描述

一个临时 bootstrap 机器

集群需要 bootstrap 机器在三台 control plane 机器上部署 OpenShift Container Platform 集群。您可在安装集群后删除 bootstrap 机器。

三台 control plane 机器

control plane 机器运行组成 control plane 的 Kubernetes 和 OpenShift Container Platform 服务。

至少两台计算机器,也称为 worker 机器。

OpenShift Container Platform 用户请求的工作负载在计算机器上运行。

重要

要保持集群的高可用性,请将独立的物理主机用于这些集群机器。

bootstrap 和 control plane 机器必须使用 Red Hat Enterprise Linux CoreOS(RHCOS)作为操作系统。但是,计算机器可以在 Red Hat Enterprise Linux CoreOS(RHCOS)、Red Hat Enterprise Linux(RHEL) 8.6 和更高的版本。

请注意,RHCOS 基于 Red Hat Enterprise Linux(RHEL) 9.2,并继承其所有硬件认证和要求。查看 红帽企业 Linux 技术功能和限制

4.2.3.2. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 4.2. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

4.2.3.3. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 4.20. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
4.2.3.4. 在 64 位 ARM 基础架构上为 Azure 测试的实例类型

以下 Microsoft Azure ARM64 实例类型已使用 OpenShift Container Platform 测试。

例 4.21. 基于 64 位 ARM 架构的机器类型

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family

4.2.4. 使用 Azure Marketplace 产品

使用 Azure Marketplace 产品可让您部署 OpenShift Container Platform 集群,该集群按照使用付费(按小时、每个内核)进行计费,同时仍由红帽直接支持。

要使用 Azure Marketplace 产品部署 OpenShift Container Platform 集群,您必须首先获取 Azure Marketplace 镜像。安装程序使用这个镜像来部署 worker 或 control plane 节点。在获取您的镜像时,请考虑以下事项:

  • 虽然镜像相同,但 Azure Marketplace publisher 根据您的区域。如果您位于北美,请将 redhat 指定为发布者。如果您位于 EMEA,请将 redhat-limited 指定为发布者。
  • 此项优惠包括 rh-ocp-worker SKU 和 rh-ocp-worker-gen1 SKU。rh-ocp-worker SKU 代表 Hyper-V 生成版本 2 虚拟机镜像。OpenShift Container Platform 中使用的默认实例类型与版本 2 兼容。如果您计划使用与版本 1 兼容的实例类型,请使用与 rh-ocp-worker-gen1 SKU 关联的镜像。rh-ocp-worker-gen1 SKU 代表 Hyper-V 版本 1 虚拟机镜像。
重要

在使用 64 位 ARM 实例的集群上不支持使用 Azure marketplace 安装镜像。

先决条件

  • 已安装 Azure CLI 客户端 (az)
  • 您的 Azure 帐户为产品授权,您使用 Azure CLI 客户端登录到此帐户。

流程

  1. 运行以下命令之一,显示所有可用的 OpenShift Container Platform 镜像:

    • 北美:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  -----------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-ocp-worker:4.15.2024072409              4.15.2024072409
      rh-ocp-worker  RedHat          rh-ocp-worker-gen1  RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409         4.15.2024072409

    • 欧洲、中东和非洲地区:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                                     Version
      -------------  --------------  ------------------  --------------------------------------------------------------          -----------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.15.2024072409              4.15.2024072409
      rh-ocp-worker  redhat-limited  rh-ocp-worker-gen1  redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409         4.15.2024072409

    注意

    使用可用于 compute 和 control plane 节点的最新镜像。如果需要,您的虚拟机会在安装过程中自动升级。

  2. 运行以下命令之一检查您的所提供的镜像:

    • 北美:

      $ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  3. 运行以下命令之一查看提供的术语:

    • 北美:

      $ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  4. 运行以下命令之一接受产品条款:

    • 北美:

      $ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  5. 记录您的所提供的镜像详情。如果使用 Azure Resource Manager (ARM) 模板来部署计算节点:

    1. 您可以通过删除 id 参数,并使用您的值来添加 offer, publisher, sku, and version 参数来更新 storageProfile.imageReference
    2. 为虚拟机 (VM) 指定一个计划

      示例 06_workers.json ARM 模板带有一个更新的 storageProfile.imageReference 对象和一个特定的计划

      ...
        "plan" : {
          "name": "rh-ocp-worker",
          "product": "rh-ocp-worker",
          "publisher": "redhat"
        },
        "dependsOn" : [
          "[concat('Microsoft.Network/networkInterfaces/', concat(variables('vmNames')[copyIndex()], '-nic'))]"
        ],
        "properties" : {
      ...
        "storageProfile": {
          "imageReference": {
          "offer": "rh-ocp-worker",
          "publisher": "redhat",
          "sku": "rh-ocp-worker",
          "version": "413.92.2023101700"
          }
          ...
         }
      ...
        }

4.2.4.1. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,至少有 1.2 GB 本地磁盘空间。

流程

  1. 进入 Red Hat Hybrid Cloud Console 上的 Cluster Type 页。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 在页的 Run it yourself 部分中选择您的基础架构供应商。
  3. OpenShift 安装程序下的下拉菜单中选择您的主机操作系统和架构,然后点下载安装程序
  4. 将下载的文件保存在要存储安装配置文件的目录中。

    重要
    • 安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。删除集群需要这两个文件。
    • 删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。
  5. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

另外,您还可以从红帽客户门户网站检索安装程序,您可以在其中指定要下载的安装程序版本。但是,您需要有一个有效的订阅才能访问此页。

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

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

将密钥传递给节点后,您可以使用密钥对作为用户 核心 通过 SSH 连接到 RHCOS 节点。若要通过 SSH 访问节点,必须由 SSH 为您的本地用户管理私钥身份。

如果要通过 SSH 连接到集群节点来执行安装调试或灾难恢复,则必须在安装过程中提供 SSH 公钥。./openshift-install gather 命令还需要在集群节点上设置 SSH 公钥。

重要

不要在生产环境中跳过这个过程,在生产环境中需要灾难恢复和调试。

注意

您必须使用本地密钥,而不是使用特定平台方法配置 的密钥,如 AWS 密钥对

流程

  1. 如果您在本地计算机上没有可用于在集群节点上进行身份验证的现有 SSH 密钥对,请创建一个。例如,在使用 Linux 操作系统的计算机上运行以下命令:

    $ ssh-keygen -t ed25519 -N '' -f <path>/<file_name> 1
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

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

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub

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

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

    注意

    在某些发行版中,自动管理默认 SSH 私钥身份,如 ~/.ssh/id_rsa~/.ssh/id_dsa

    1. 如果 ssh-agent 进程尚未为您的本地用户运行,请将其作为后台任务启动:

      $ eval "$(ssh-agent -s)"

      输出示例

      Agent pid 31874

      注意

      如果集群处于 FIPS 模式,则只使用 FIPS 兼容算法来生成 SSH 密钥。密钥必须是 RSA 或 ECDSA。

  4. 将 SSH 私钥添加到 ssh-agent

    $ ssh-add <path>/<file_name> 1
    1
    指定 SSH 私钥的路径和文件名,如 ~/.ssh/id_ed25519.pub

    输出示例

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

后续步骤

  • 安装 OpenShift Container Platform 时,为安装程序提供 SSH 公钥。如果在您置备的基础架构上安装集群,则必须为安装程序提供密钥。

4.2.5. 创建用于 Azure 的安装文件

要使用用户置备的基础架构在 Microsoft Azure 上安装 OpenShift Container Platform,您必须生成并修改安装程序部署集群所需的文件,以便集群只创建要使用的机器。您要生成并自定义 install-config.yaml 文件、Kubernetes 清单和 Ignition 配置文件。您还可以选择在安装准备阶段首先设置独立 var 分区。

4.2.5.1. 可选:创建独立 /var 分区

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

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

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

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

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

重要

如果按照以下步骤在此流程中创建独立 /var 分区,则不需要再次创建 Kubernetes 清单和 Ignition 配置文件,如本节所述。

流程

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

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

    $ openshift-install create manifests --dir $HOME/clusterconfig

    输出示例

    ? SSH Public Key ...
    INFO Credentials loaded from the "myprofile" profile in file "/home/myuser/.aws/credentials"
    INFO Consuming Install Config from target directory
    INFO Manifests created in: $HOME/clusterconfig/manifests and $HOME/clusterconfig/openshift

  3. 可选:确认安装程序在 clusterconfig/openshift 目录中创建了清单:

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

  4. 创建用于配置额外分区的 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(Mebibytes)。root 文件系统会自动调整大小以填充所有可用空间(最多到指定的偏移值)。如果没有指定值,或者指定的值小于推荐的最小值,则生成的 root 文件系统会太小,而在以后进行的 RHCOS 重新安装可能会覆盖数据分区的开始部分。
    3
    以兆字节为单位的数据分区大小。
    4
    对于用于容器存储的文件系统,必须启用 prjquota 挂载选项。
    注意

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

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

    $ butane $HOME/clusterconfig/98-var-partition.bu -o $HOME/clusterconfig/openshift/98-var-partition.yaml
  6. 再次运行 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 配置文件作为安装程序的输入来安装 Red Hat Enterprise Linux CoreOS(RHCOS)系统。

4.2.5.2. 创建安装配置文件

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

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。对于受限网络安装,这些文件位于您的镜像主机上。
  • 您有创建镜像 registry 期间生成的 imageContentSources 值。
  • 您已获取了镜像 registry 的证书内容。
  • 您已检索了 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像,并将其上传到可访问的位置。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 创建 install-config.yaml 文件。

    1. 进入包含安装程序的目录并运行以下命令:

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

      在指定目录时:

      • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
      • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
    2. 在提示符处,提供云的配置详情:

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

        注意

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

      2. 选择 azure 作为目标平台。

        如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

      3. 为您的订阅输入以下 Azure 参数值:

        • Azure subscription id :输入用于集群的订阅 ID。
        • Azure 租户 id :输入租户 ID。
      4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

        • 如果您使用服务主体,请输入其应用程序 ID。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请指定其客户端 ID。
      5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

        • 如果您使用服务主体,请输入其密码。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请将此值设为空白。
      6. 选择要将集群部署到的区域。
      7. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      8. 为集群输入一个描述性名称。

        重要

        所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语列表,请参阅 Azure 文档中的解决保留资源名称错误

      9. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret
  3. 编辑 install-config.yaml 文件,以提供在受限网络中安装所需的额外信息。

    1. 更新 pullSecret 值,使其包含 registry 的身份验证信息:

      pullSecret: '{"auths":{"<mirror_host_name>:5000": {"auth": "<credentials>","email": "you@example.com"}}}'

      对于 <mirror_host_name>,请指定 您在镜像 registry 证书中指定的 registry 域名 ;对于 <credentials>, 请指定您的镜像 registry 的 base64 编码用户名和密码。

    2. 添加 additionalTrustBundle 参数和值。

      additionalTrustBundle: |
        -----BEGIN CERTIFICATE-----
        ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
        -----END CERTIFICATE-----

      该值必须是您用于镜像 registry 的证书文件内容。证书文件可以是现有的可信证书颁发机构,也可以是您为镜像 registry 生成的自签名证书。

    3. platform.azure 字段中定义 VNet 的网络和子网,以安装集群:

      networkResourceGroupName: <vnet_resource_group> 1
      virtualNetwork: <vnet> 2
      controlPlaneSubnet: <control_plane_subnet> 3
      computeSubnet: <compute_subnet> 4
      1
      <vnet_resource_group> 替换为包含现有虚拟网络 (VNet)的资源组名称。
      2
      <vnet> 替换为现有的虚拟网络名称。
      3
      <control_plane_subnet> 替换为部署 control plane 机器的现有子网名称。
      4
      <compute_subnet> 替换为部署计算机器的现有子网名称。
    4. 添加镜像内容资源,类似于以下 YAML 摘录:

      imageContentSources:
      - mirrors:
        - <mirror_host_name>:5000/<repo_name>/release
        source: quay.io/openshift-release-dev/ocp-release
      - mirrors:
        - <mirror_host_name>:5000/<repo_name>/release
        source: registry.redhat.io/ocp/release

      对于这些值,请使用您在创建镜像 registry 时记录的 imageContentSources

    5. 可选:将发布策略设置为 Internal

      publish: Internal

      通过设置这个选项,您可以创建一个内部 Ingress Controller 和一个私有负载均衡器。

      重要

      Azure Firewall 无法与 Azure 公共负载均衡器无缝工作。因此,当使用 Azure Firewall 来限制互联网访问时,install-config.yaml 中的 publish 字段应设置为 Internal

  4. 对您需要的 install-config.yaml 文件进行任何其他修改。

    有关参数的更多信息,请参阅"安装配置参数"。

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

    重要

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

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

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

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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 对象,且无法创建额外的代理。

4.2.5.4. 为 ARM 模板导出常用变量

您必须导出与提供的 Azure Resource Manager(ARM)模板搭配使用的一组常用变量,它们有助于在 Microsoft Azure 上完成用户提供基础架构安装。

注意

特定的 ARM 模板可能还需要其他导出变量,这些变量在相关的程序中详细介绍。

先决条件

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

流程

  1. 导出 install-config.yaml 中由提供的 ARM 模板使用的通用变量:

    $ export CLUSTER_NAME=<cluster_name>1
    $ export AZURE_REGION=<azure_region>2
    $ export SSH_KEY=<ssh_key>3
    $ export BASE_DOMAIN=<base_domain>4
    $ export BASE_DOMAIN_RESOURCE_GROUP=<base_domain_resource_group>5
    1
    install-config.yaml 文件中的.metadata.name 属性的值。
    2
    集群要部署到的区域,如 centralus 。这是来自 install-config.yaml 文件中的 .platform.azure.region 属性的值。
    3
    作为字符串的 SSH RSA 公钥文件。您必须使用引号包括 SSH 密钥,因为它包含空格。这是来自 install-config.yaml 文件中的 .sshKey 属性的值。
    4
    集群要部署到的基域。基域与您为集群创建的公共 DNS 区对应。这是来自 install-config.yaml 文件中的 .baseDomain 属性的值。
    5
    公共 DNS 区所在的资源组。这是来自 install-config.yaml 文件中的 .platform.azure.baseDomainResourceGroupName 属性的值。

    例如:

    $ export CLUSTER_NAME=test-cluster
    $ export AZURE_REGION=centralus
    $ export SSH_KEY="ssh-rsa xxx/xxx/xxx= user@email.com"
    $ export BASE_DOMAIN=example.com
    $ export BASE_DOMAIN_RESOURCE_GROUP=ocp-cluster
  2. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
4.2.5.5. 创建 Kubernetes 清单和 Ignition 配置文件

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

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

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

先决条件

  • 已获得 OpenShift Container Platform 安装程序。
  • 已创建 install-config.yaml 安装配置文件。

流程

  1. 进入包含 OpenShift Container Platform 安装程序的目录,并为集群生成 Kubernetes 清单:

    $ ./openshift-install create manifests --dir <installation_directory> 1
    1
    对于 <installation_directory>,请指定包含您创建的 install-config.yaml 文件的安装目录。
  2. 删除定义 control plane 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_master-machines-*.yaml

    通过删除这些文件,您可以防止集群自动生成 control plane 机器。

  3. 删除定义 control plane 机器集的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-machine-api_master-control-plane-machine-set.yaml
  4. 删除定义 worker 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-*.yaml
    重要

    如果在用户置备的基础架构上安装集群时禁用了 MachineAPI 功能,则必须删除定义 worker 机器的 Kubernetes 清单文件。否则,集群将无法安装。

    由于您要自行创建和管理 worker 机器,因此不需要初始化这些机器。

  5. 检查 <installation_directory>/manifests/cluster-scheduler-02-config.yml Kubernetes 清单文件中的 mastersSchedulable 参数是否已设置为 false。此设置可防止在 control plane 机器上调度 pod:

    1. 打开 <installation_directory>/manifests/cluster-scheduler-02-config.yml 文件。
    2. 找到 mastersSchedulable 参数,并确保它被设置为 false
    3. 保存并退出 文件。
  6. 可选:如果您不希望 Ingress Operator 代表您创建 DNS 记录,请删除 <installation_directory>/manifests/cluster-dns-02-config.yml DNS 配置文件中的 privateZone 和 publicZone 部分:

    apiVersion: config.openshift.io/v1
    kind: DNS
    metadata:
      creationTimestamp: null
      name: cluster
    spec:
      baseDomain: example.openshift.com
      privateZone: 1
        id: mycluster-100419-private-zone
      publicZone: 2
        id: example.openshift.com
    status: {}
    1 2
    完全删除此部分。

    如果您这样做,后续步骤中必须手动添加入口 DNS 记录。

  7. 在用户置备的基础架构上配置 Azure 时,您必须导出清单文件中定义的一些常见变量,以备稍后在 Azure Resource Manager(ARM)模板中使用:

    1. 使用以下命令导出基础架构 ID:

      $ export INFRA_ID=<infra_id> 1
      1
      OpenShift Container Platform 集群被分配了一个标识符(INFRA_ID),其格式为 <cluster_name>-<random_string>。这将作为使用提供的 ARM 模板创建的大部分资源的基本名称。这是来自 manifests/cluster-infrastructure-02-config.yml 文件中的 .status.infrastructureName 属性的值。
    2. 使用以下命令导出资源组:

      $ export RESOURCE_GROUP=<resource_group> 1
      1
      此 Azure 部署中创建的所有资源都作为资源组的一部分。资源组名称还基于 INFRA_ID,格式为 <cluster_name>-<random_string>-rg。这是来自 manifests/cluster-infrastructure-02-config.yml 文件中的 .status.platformStatus.azure.resourceGroupName 属性的值。
  8. 要创建 Ignition 配置文件,从包含安装程序的目录运行以下命令:

    $ ./openshift-install create ignition-configs --dir <installation_directory> 1
    1
    对于 <installation_directory>,请指定相同的安装目录。

    为安装目录中的 bootstrap、control plane 和计算节点创建 Ignition 配置文件。kubeadmin-passwordkubeconfig 文件是在 ./<installation_directory>/auth 目录中创建的:

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

4.2.6. 创建 Azure 资源组

您必须创建一个 Microsoft Azure 资源组以及该资源组的身份。它们都用于在 Azure 上安装 OpenShift Container Platform 集群。

流程

  1. 在受支持的 Azure 区域中创建资源组:

    $ az group create --name ${RESOURCE_GROUP} --location ${AZURE_REGION}
  2. 为资源组创建 Azure 身份:

    $ az identity create -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity

    这用于授予集群中 Operator 所需的访问权限。例如,这允许 Ingress Operator 创建公共 IP 及其负载均衡器。您必须将 Azure 身份分配给角色。

  3. 将 Contributor 角色授予 Azure 身份:

    1. 导出 Azure 角色分配所需的以下变量:

      $ export PRINCIPAL_ID=`az identity show -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity --query principalId --out tsv`
      $ export RESOURCE_GROUP_ID=`az group show -g ${RESOURCE_GROUP} --query id --out tsv`
    2. 将 Contributor 角色分配给身份:

      $ az role assignment create --assignee "${PRINCIPAL_ID}" --role 'Contributor' --scope "${RESOURCE_GROUP_ID}"
      注意

      如果要为身份分配具有所有所需权限的自定义角色,请运行以下命令:

      $ az role assignment create --assignee "${PRINCIPAL_ID}" --role <custom_role> \ 1
      --scope "${RESOURCE_GROUP_ID}"
      1
      指定自定义角色名称。

4.2.7. 上传 RHCOS 集群镜像和 bootstrap Ignition 配置文件

Azure 客户端不支持基于本地现有文件进行部署。您必须复制 RHCOS 虚拟硬盘(VHD)集群镜像,并将 bootstrap Ignition 配置文件存储在存储容器中,以便在部署过程中访问它们。

先决条件

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

流程

  1. 创建 Azure 存储帐户以存储 VHD 集群镜像:

    $ az storage account create -g ${RESOURCE_GROUP} --location ${AZURE_REGION} --name ${CLUSTER_NAME}sa --kind Storage --sku Standard_LRS
    警告

    Azure 存储帐户名称的长度必须在 3 到 24 个字符之,且只使用数字和小写字母。如果您的 CLUSTER_NAME 变量没有遵循这些限制,您必须手动定义 Azure 存储帐户名称。如需有关 Azure 存储帐户名称限制的更多信息,请参阅 Azure 文档中的解决存储帐户名称的错误

  2. 将存储帐户密钥导出为环境变量:

    $ export ACCOUNT_KEY=`az storage account keys list -g ${RESOURCE_GROUP} --account-name ${CLUSTER_NAME}sa --query "[0].value" -o tsv`
  3. 将 RHCOS VHD 的 URL 导出为环境变量:

    $ export VHD_URL=`openshift-install coreos print-stream-json | jq -r '.architectures.<architecture>."rhel-coreos-extensions"."azure-disk".url'`

    其中:

    <architecture>

    指定架构,有效值包括 x86_64aarch64

    重要

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

  4. 为 VHD 创建存储容器:

    $ az storage container create --name vhd --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY}
  5. 将本地 VHD 复制为一个 blob:

    $ az storage blob copy start --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} --destination-blob "rhcos.vhd" --destination-container vhd --source-uri "${VHD_URL}"
  6. 创建 blob 存储容器并上传生成的 bootstrap.ign 文件:

    $ az storage container create --name files --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY}
    $ az storage blob upload --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -f "<installation_directory>/bootstrap.ign" -n "bootstrap.ign"

4.2.8. 创建 DNS 区示例

使用用户置备的基础架构的集群需要 DNS 记录。您应该选择适合您的场景的 DNS 策略。

在本例中,使用了 Azure 的 DNS 解决方案,因此您将为外部(内部网络)可见性创建一个新的公共 DNS 区域,并为内部集群解析创建一个私有 DNS 区域。

注意

公共 DNS 区域不需要与集群部署位于同一个资源组中,且可能已在您的机构中为所需基域存在。如果情况如此,您可以跳过创建公共 DNS 区这一步 ; 请确定您之前生成的安装配置反映了这种情况。

流程

  1. BASE_DOMAIN_RESOURCE_GROUP 环境变量中导出的资源组中创建新的公共 DNS 区域:

    $ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n ${CLUSTER_NAME}.${BASE_DOMAIN}

    如果您使用的是公共 DNS 区域,可以跳过这一步。

  2. 在与这个部署的其余部分相同的资源组中创建私有 DNS 区域:

    $ az network private-dns zone create -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME}.${BASE_DOMAIN}

如需了解更多信息,请参阅在 Azure 中配置公共 DNS 的信息。

4.2.9. 在 Azure 中创建 VNet

您必须在 Microsoft Azure 中创建虚拟网络(VNet),供您的 OpenShift Container Platform 集群使用。您可以对 VNet 进行定制来满足您的要求。创建 VNet 的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 Azure 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

流程

  1. 复制 VNet 的 ARM 模板 一节中的模板,并将它以 01_vnet.json 保存到集群的安装目录中。此模板描述了集群所需的 VNet。
  2. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/01_vnet.json" \
      --parameters baseName="${INFRA_ID}"1
    1
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
  3. 将 VNet 模板链接到私有 DNS 区域:

    $ az network private-dns link vnet create -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n ${INFRA_ID}-network-link -v "${INFRA_ID}-vnet" -e false
4.2.9.1. VNet 的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 VPC:

例 4.22. 01_vnet.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(parameters('baseName'), '-vnet')]",
    "addressPrefix" : "10.0.0.0/16",
    "masterSubnetName" : "[concat(parameters('baseName'), '-master-subnet')]",
    "masterSubnetPrefix" : "10.0.0.0/24",
    "nodeSubnetName" : "[concat(parameters('baseName'), '-worker-subnet')]",
    "nodeSubnetPrefix" : "10.0.1.0/24",
    "clusterNsgName" : "[concat(parameters('baseName'), '-nsg')]"
  },
  "resources" : [
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/virtualNetworks",
      "name" : "[variables('virtualNetworkName')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[concat('Microsoft.Network/networkSecurityGroups/', variables('clusterNsgName'))]"
      ],
      "properties" : {
        "addressSpace" : {
          "addressPrefixes" : [
            "[variables('addressPrefix')]"
          ]
        },
        "subnets" : [
          {
            "name" : "[variables('masterSubnetName')]",
            "properties" : {
              "addressPrefix" : "[variables('masterSubnetPrefix')]",
              "serviceEndpoints": [],
              "networkSecurityGroup" : {
                "id" : "[resourceId('Microsoft.Network/networkSecurityGroups', variables('clusterNsgName'))]"
              }
            }
          },
          {
            "name" : "[variables('nodeSubnetName')]",
            "properties" : {
              "addressPrefix" : "[variables('nodeSubnetPrefix')]",
              "serviceEndpoints": [],
              "networkSecurityGroup" : {
                "id" : "[resourceId('Microsoft.Network/networkSecurityGroups', variables('clusterNsgName'))]"
              }
            }
          }
        ]
      }
    },
    {
      "type" : "Microsoft.Network/networkSecurityGroups",
      "name" : "[variables('clusterNsgName')]",
      "apiVersion" : "2018-10-01",
      "location" : "[variables('location')]",
      "properties" : {
        "securityRules" : [
          {
            "name" : "apiserver_in",
            "properties" : {
              "protocol" : "Tcp",
              "sourcePortRange" : "*",
              "destinationPortRange" : "6443",
              "sourceAddressPrefix" : "*",
              "destinationAddressPrefix" : "*",
              "access" : "Allow",
              "priority" : 101,
              "direction" : "Inbound"
            }
          }
        ]
      }
    }
  ]
}

4.2.10. 为 Azure 基础架构创建 RHCOS 集群镜像

您必须对 OpenShift Container Platform 节点的 Microsoft Azure 使用有效的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像。

先决条件

  • 将 RHCOS 虚拟硬盘(VHD)集群镜像存储在 Azure 存储容器中。
  • 在 Azure 存储容器中存储 bootstrap Ignition 配置文件。

流程

  1. 复制镜像存储的 ARM 模板 部分中的模板,并将它以 02_storage.json 保存到集群的安装目录中。此模板描述了集群所需的镜像存储。
  2. 以一个变量的形式将 RHCOS VHD blob URL 导出:

    $ export VHD_BLOB_URL=`az storage blob url --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c vhd -n "rhcos.vhd" -o tsv`
  3. 部署集群镜像

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/02_storage.json" \
      --parameters vhdBlobURL="${VHD_BLOB_URL}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameters storageAccount="${CLUSTER_NAME}sa" \ 3
      --parameters architecture="<architecture>" 4
    1
    用于创建 master 和 worker 机器的 RHCOS VHD 的 blob URL。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    Azure 存储帐户的名称。
    4
    指定系统架构。有效值为 x64 (默认)或 Arm64
4.2.10.1. 镜像存储的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的存储的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像:

例 4.23. 02_storage.json ARM 模板

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "architecture": {
      "type": "string",
      "metadata": {
        "description": "The architecture of the Virtual Machines"
      },
      "defaultValue": "x64",
      "allowedValues": [
        "Arm64",
        "x64"
      ]
    },
    "baseName": {
      "type": "string",
      "minLength": 1,
      "metadata": {
        "description": "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "storageAccount": {
      "type": "string",
      "metadata": {
        "description": "The Storage Account name"
      }
    },
    "vhdBlobURL": {
      "type": "string",
      "metadata": {
        "description": "URL pointing to the blob where the VHD to be used to create master and worker machines is located"
      }
    }
  },
  "variables": {
    "location": "[resourceGroup().location]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName": "[parameters('baseName')]",
    "imageNameGen2": "[concat(parameters('baseName'), '-gen2')]",
    "imageRelease": "1.0.0"
  },
  "resources": [
    {
      "apiVersion": "2021-10-01",
      "type": "Microsoft.Compute/galleries",
      "name": "[variables('galleryName')]",
      "location": "[variables('location')]",
      "resources": [
        {
          "apiVersion": "2021-10-01",
          "type": "images",
          "name": "[variables('imageName')]",
          "location": "[variables('location')]",
          "dependsOn": [
            "[variables('galleryName')]"
          ],
          "properties": {
            "architecture": "[parameters('architecture')]",
            "hyperVGeneration": "V1",
            "identifier": {
              "offer": "rhcos",
              "publisher": "RedHat",
              "sku": "basic"
            },
            "osState": "Generalized",
            "osType": "Linux"
          },
          "resources": [
            {
              "apiVersion": "2021-10-01",
              "type": "versions",
              "name": "[variables('imageRelease')]",
              "location": "[variables('location')]",
              "dependsOn": [
                "[variables('imageName')]"
              ],
              "properties": {
                "publishingProfile": {
                  "storageAccountType": "Standard_LRS",
                  "targetRegions": [
                    {
                      "name": "[variables('location')]",
                      "regionalReplicaCount": "1"
                    }
                  ]
                },
                "storageProfile": {
                  "osDiskImage": {
                    "source": {
                      "id": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccount'))]",
                      "uri": "[parameters('vhdBlobURL')]"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "apiVersion": "2021-10-01",
          "type": "images",
          "name": "[variables('imageNameGen2')]",
          "location": "[variables('location')]",
          "dependsOn": [
            "[variables('galleryName')]"
          ],
          "properties": {
            "architecture": "[parameters('architecture')]",
            "hyperVGeneration": "V2",
            "identifier": {
              "offer": "rhcos-gen2",
              "publisher": "RedHat-gen2",
              "sku": "gen2"
            },
            "osState": "Generalized",
            "osType": "Linux"
          },
          "resources": [
            {
              "apiVersion": "2021-10-01",
              "type": "versions",
              "name": "[variables('imageRelease')]",
              "location": "[variables('location')]",
              "dependsOn": [
                "[variables('imageNameGen2')]"
              ],
              "properties": {
                "publishingProfile": {
                  "storageAccountType": "Standard_LRS",
                  "targetRegions": [
                    {
                      "name": "[variables('location')]",
                      "regionalReplicaCount": "1"
                    }
                  ]
                },
                "storageProfile": {
                  "osDiskImage": {
                    "source": {
                      "id": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccount'))]",
                      "uri": "[parameters('vhdBlobURL')]"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    }
  ]
}

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

所有 Red Hat Enterprise Linux CoreOS(RHCOS)机器需要在启动过程中在 initramfs 中配置网络,以获取其 Ignition 配置文件。

4.2.11.1. 网络连接要求

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

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

重要

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

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

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

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

10250-10259

Kubernetes 保留的默认端口

UDP

4789

VXLAN

6081

Geneve

9000-9999

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

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

UDP 端口 123 上的网络时间协议 (NTP)

如果配置了外部 NTP 时间服务器,需要打开 UDP 端口 123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

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

TCP

6443

Kubernetes API

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

TCP

2379-2380

etcd 服务器和对等端口

4.2.12. 在 Azure 中创建网络和负载均衡组件

您必须在 Microsoft Azure 中配置网络和负载均衡,供您的 OpenShift Container Platform 集群使用。创建这些组件的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 Azure 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 在 Azure 中创建和配置 VNet 及相关子网。

流程

  1. 复制 网络和负载均衡器的 ARM 模板 一节中的模板,并将它以 03_infra.json 保存到集群的安装目录中。此模板描述了集群所需的网络和负载均衡对象。
  2. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/03_infra.json" \
      --parameters privateDNSZoneName="${CLUSTER_NAME}.${BASE_DOMAIN}" \ 1
      --parameters baseName="${INFRA_ID}"2
    1
    私有 DNS 区的名称。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
  3. 在公共区为 API 公共负载均衡器创建一个 api DNS 记录。${BASE_DOMAIN_RESOURCE_GROUP} 变量必须指向存在公共 DNS 区的资源组。

    1. 导出以下变量:

      $ export PUBLIC_IP=`az network public-ip list -g ${RESOURCE_GROUP} --query "[?name=='${INFRA_ID}-master-pip'] | [0].ipAddress" -o tsv`
    2. 在新的公共区中创建 api DNS 记录:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n api -a ${PUBLIC_IP} --ttl 60

      如果要将集群添加到现有的公共区,您可以在其中创建 api DNS 记录:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n api.${CLUSTER_NAME} -a ${PUBLIC_IP} --ttl 60
4.2.12.1. 网络和负载均衡器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的网络对象和负载均衡器:

例 4.24. 03_infra.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "privateDNSZoneName" : {
      "type" : "string",
      "metadata" : {
        "description" : "Name of the private DNS zone"
      }
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "masterSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-master-subnet')]",
    "masterSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('masterSubnetName'))]",
    "masterPublicIpAddressName" : "[concat(parameters('baseName'), '-master-pip')]",
    "masterPublicIpAddressID" : "[resourceId('Microsoft.Network/publicIPAddresses', variables('masterPublicIpAddressName'))]",
    "masterLoadBalancerName" : "[parameters('baseName')]",
    "masterLoadBalancerID" : "[resourceId('Microsoft.Network/loadBalancers', variables('masterLoadBalancerName'))]",
    "internalLoadBalancerName" : "[concat(parameters('baseName'), '-internal-lb')]",
    "internalLoadBalancerID" : "[resourceId('Microsoft.Network/loadBalancers', variables('internalLoadBalancerName'))]",
    "skuName": "Standard"
  },
  "resources" : [
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/publicIPAddresses",
      "name" : "[variables('masterPublicIpAddressName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "[variables('skuName')]"
      },
      "properties" : {
        "publicIPAllocationMethod" : "Static",
        "dnsSettings" : {
          "domainNameLabel" : "[variables('masterPublicIpAddressName')]"
        }
      }
    },
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/loadBalancers",
      "name" : "[variables('masterLoadBalancerName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "[variables('skuName')]"
      },
      "dependsOn" : [
        "[concat('Microsoft.Network/publicIPAddresses/', variables('masterPublicIpAddressName'))]"
      ],
      "properties" : {
        "frontendIPConfigurations" : [
          {
            "name" : "public-lb-ip-v4",
            "properties" : {
              "publicIPAddress" : {
                "id" : "[variables('masterPublicIpAddressID')]"
              }
            }
          }
        ],
        "backendAddressPools" : [
          {
            "name" : "[variables('masterLoadBalancerName')]"
          }
        ],
        "loadBalancingRules" : [
          {
            "name" : "api-internal",
            "properties" : {
              "frontendIPConfiguration" : {
                "id" :"[concat(variables('masterLoadBalancerID'), '/frontendIPConfigurations/public-lb-ip-v4')]"
              },
              "backendAddressPool" : {
                "id" : "[concat(variables('masterLoadBalancerID'), '/backendAddressPools/', variables('masterLoadBalancerName'))]"
              },
              "protocol" : "Tcp",
              "loadDistribution" : "Default",
              "idleTimeoutInMinutes" : 30,
              "frontendPort" : 6443,
              "backendPort" : 6443,
              "probe" : {
                "id" : "[concat(variables('masterLoadBalancerID'), '/probes/api-internal-probe')]"
              }
            }
          }
        ],
        "probes" : [
          {
            "name" : "api-internal-probe",
            "properties" : {
              "protocol" : "Https",
              "port" : 6443,
              "requestPath": "/readyz",
              "intervalInSeconds" : 10,
              "numberOfProbes" : 3
            }
          }
        ]
      }
    },
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/loadBalancers",
      "name" : "[variables('internalLoadBalancerName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "[variables('skuName')]"
      },
      "properties" : {
        "frontendIPConfigurations" : [
          {
            "name" : "internal-lb-ip",
            "properties" : {
              "privateIPAllocationMethod" : "Dynamic",
              "subnet" : {
                "id" : "[variables('masterSubnetRef')]"
              },
              "privateIPAddressVersion" : "IPv4"
            }
          }
        ],
        "backendAddressPools" : [
          {
            "name" : "internal-lb-backend"
          }
        ],
        "loadBalancingRules" : [
          {
            "name" : "api-internal",
            "properties" : {
              "frontendIPConfiguration" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/frontendIPConfigurations/internal-lb-ip')]"
              },
              "frontendPort" : 6443,
              "backendPort" : 6443,
              "enableFloatingIP" : false,
              "idleTimeoutInMinutes" : 30,
              "protocol" : "Tcp",
              "enableTcpReset" : false,
              "loadDistribution" : "Default",
              "backendAddressPool" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/backendAddressPools/internal-lb-backend')]"
              },
              "probe" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/probes/api-internal-probe')]"
              }
            }
          },
          {
            "name" : "sint",
            "properties" : {
              "frontendIPConfiguration" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/frontendIPConfigurations/internal-lb-ip')]"
              },
              "frontendPort" : 22623,
              "backendPort" : 22623,
              "enableFloatingIP" : false,
              "idleTimeoutInMinutes" : 30,
              "protocol" : "Tcp",
              "enableTcpReset" : false,
              "loadDistribution" : "Default",
              "backendAddressPool" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/backendAddressPools/internal-lb-backend')]"
              },
              "probe" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/probes/sint-probe')]"
              }
            }
          }
        ],
        "probes" : [
          {
            "name" : "api-internal-probe",
            "properties" : {
              "protocol" : "Https",
              "port" : 6443,
              "requestPath": "/readyz",
              "intervalInSeconds" : 10,
              "numberOfProbes" : 3
            }
          },
          {
            "name" : "sint-probe",
            "properties" : {
              "protocol" : "Https",
              "port" : 22623,
              "requestPath": "/healthz",
              "intervalInSeconds" : 10,
              "numberOfProbes" : 3
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2018-09-01",
      "type": "Microsoft.Network/privateDnsZones/A",
      "name": "[concat(parameters('privateDNSZoneName'), '/api')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[concat('Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'))]"
      ],
      "properties": {
        "ttl": 60,
        "aRecords": [
          {
            "ipv4Address": "[reference(variables('internalLoadBalancerName')).frontendIPConfigurations[0].properties.privateIPAddress]"
          }
        ]
      }
    },
    {
      "apiVersion": "2018-09-01",
      "type": "Microsoft.Network/privateDnsZones/A",
      "name": "[concat(parameters('privateDNSZoneName'), '/api-int')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[concat('Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'))]"
      ],
      "properties": {
        "ttl": 60,
        "aRecords": [
          {
            "ipv4Address": "[reference(variables('internalLoadBalancerName')).frontendIPConfigurations[0].properties.privateIPAddress]"
          }
        ]
      }
    }
  ]
}

4.2.13. 在 Azure 中创建 bootstrap 机器

您必须在 Microsoft Azure 中创建 bootstrap 机器,以便在 OpenShift Container Platform 集群初始化过程中使用。创建此机器的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 bootstrap 机器,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 在 Azure 中创建和配置联网及负载均衡器。
  • 创建 Azure 身份并授予适当的角色。

流程

  1. 复制 bootstrap 机器的 ARM 模板一节中的模板,并将它以 04_bootstrap.json 保存到集群的安装目录中。此模板描述了集群所需的 bootstrap 机器。
  2. 导出 bootstrap URL 变量:

    $ bootstrap_url_expiry=`date -u -d "10 hours" '+%Y-%m-%dT%H:%MZ'`
    $ export BOOTSTRAP_URL=`az storage blob generate-sas -c 'files' -n 'bootstrap.ign' --https-only --full-uri --permissions r --expiry $bootstrap_url_expiry --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -o tsv`
  3. 导出 bootstrap ignition 变量:

    $ export BOOTSTRAP_IGNITION=`jq -rcnM --arg v "3.2.0" --arg url ${BOOTSTRAP_URL} '{ignition:{version:$v,config:{replace:{source:$url}}}}' | base64 | tr -d '\n'`
  4. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/04_bootstrap.json" \
      --parameters bootstrapIgnition="${BOOTSTRAP_IGNITION}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameter bootstrapVMSize="Standard_D4s_v3" 3
    1
    bootstrap 集群的 bootstrap Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    可选:指定 bootstrap 虚拟机的大小。使用与指定架构兼容的虚拟机大小。如果未定义这个值,则会设置模板中的默认值。
4.2.13.1. bootstrap 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 bootstrap 机器:

例 4.25. 04_bootstrap.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "bootstrapIgnition" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Bootstrap ignition content for the bootstrap cluster"
      }
    },
    "sshKeyData" : {
      "type" : "securestring",
      "defaultValue" : "Unused",
      "metadata" : {
        "description" : "Unused"
      }
    },
    "bootstrapVMSize" : {
      "type" : "string",
      "defaultValue" : "Standard_D4s_v3",
      "metadata" : {
        "description" : "The size of the Bootstrap Virtual Machine"
      }
    },
    "hyperVGen": {
      "type": "string",
      "metadata": {
        "description": "VM generation image to use"
      },
      "defaultValue": "V2",
      "allowedValues": [
        "V1",
        "V2"
      ]
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "masterSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-master-subnet')]",
    "masterSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('masterSubnetName'))]",
    "masterLoadBalancerName" : "[parameters('baseName')]",
    "internalLoadBalancerName" : "[concat(parameters('baseName'), '-internal-lb')]",
    "sshKeyPath" : "/home/core/.ssh/authorized_keys",
    "identityName" : "[concat(parameters('baseName'), '-identity')]",
    "vmName" : "[concat(parameters('baseName'), '-bootstrap')]",
    "nicName" : "[concat(variables('vmName'), '-nic')]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName" : "[concat(parameters('baseName'), if(equals(parameters('hyperVGen'), 'V2'), '-gen2', ''))]",
    "clusterNsgName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-nsg')]",
    "sshPublicIpAddressName" : "[concat(variables('vmName'), '-ssh-pip')]"
  },
  "resources" : [
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/publicIPAddresses",
      "name" : "[variables('sshPublicIpAddressName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "Standard"
      },
      "properties" : {
        "publicIPAllocationMethod" : "Static",
        "dnsSettings" : {
          "domainNameLabel" : "[variables('sshPublicIpAddressName')]"
        }
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Network/networkInterfaces",
      "name" : "[variables('nicName')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('sshPublicIpAddressName'))]"
      ],
      "properties" : {
        "ipConfigurations" : [
          {
            "name" : "pipConfig",
            "properties" : {
              "privateIPAllocationMethod" : "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('sshPublicIpAddressName'))]"
              },
              "subnet" : {
                "id" : "[variables('masterSubnetRef')]"
              },
              "loadBalancerBackendAddressPools" : [
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('masterLoadBalancerName'), '/backendAddressPools/', variables('masterLoadBalancerName'))]"
                },
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'), '/backendAddressPools/internal-lb-backend')]"
                }
              ]
            }
          }
        ]
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Compute/virtualMachines",
      "name" : "[variables('vmName')]",
      "location" : "[variables('location')]",
      "identity" : {
        "type" : "userAssigned",
        "userAssignedIdentities" : {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('identityName'))]" : {}
        }
      },
      "dependsOn" : [
        "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
      ],
      "properties" : {
        "hardwareProfile" : {
          "vmSize" : "[parameters('bootstrapVMSize')]"
        },
        "osProfile" : {
          "computerName" : "[variables('vmName')]",
          "adminUsername" : "core",
          "adminPassword" : "NotActuallyApplied!",
          "customData" : "[parameters('bootstrapIgnition')]",
          "linuxConfiguration" : {
            "disablePasswordAuthentication" : false
          }
        },
        "storageProfile" : {
          "imageReference": {
            "id": "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('imageName'))]"
          },
          "osDisk" : {
            "name": "[concat(variables('vmName'),'_OSDisk')]",
            "osType" : "Linux",
            "createOption" : "FromImage",
            "managedDisk": {
              "storageAccountType": "Premium_LRS"
            },
            "diskSizeGB" : 100
          }
        },
        "networkProfile" : {
          "networkInterfaces" : [
            {
              "id" : "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
            }
          ]
        }
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type": "Microsoft.Network/networkSecurityGroups/securityRules",
      "name" : "[concat(variables('clusterNsgName'), '/bootstrap_ssh_in')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[resourceId('Microsoft.Compute/virtualMachines', variables('vmName'))]"
      ],
      "properties": {
        "protocol" : "Tcp",
        "sourcePortRange" : "*",
        "destinationPortRange" : "22",
        "sourceAddressPrefix" : "*",
        "destinationAddressPrefix" : "*",
        "access" : "Allow",
        "priority" : 100,
        "direction" : "Inbound"
      }
    }
  ]
}

4.2.14. 在 Azure 中创建 control plane 机器

您必须在 Microsoft Azure 中创建 control plane 机器,供您的集群使用。创建这些机器的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

默认情况下,Microsoft Azure 将 control plane 机器和计算机器放在预先设置的可用区中。您可以为计算节点或 control plane 节点手动设置可用区。要做到这一点,通过在虚拟机资源的 zones 参数中指定每个可用区来修改供应商的 Azure Resource Manager (ARM) 模板。

如果不使用提供的 ARM 模板来创建 control plane 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。

先决条件

  • 创建 bootstrap 机器。

流程

  1. 复制 control plane 机器的 ARM 模板 一节中的模板,并将它以 05_masters.json 保存到集群的安装目录中。此模板描述了集群所需的 control plane 机器。
  2. 导出 control plane 机器部署所需的以下变量:

    $ export MASTER_IGNITION=`cat <installation_directory>/master.ign | base64 | tr -d '\n'`
  3. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/05_masters.json" \
      --parameters masterIgnition="${MASTER_IGNITION}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameters masterVMSize="Standard_D8s_v3" 3
    1
    control plane 节点的 Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    可选:指定 Control Plane 虚拟机的大小。使用与指定架构兼容的虚拟机大小。如果未定义这个值,则会设置模板中的默认值。
4.2.14.1. control plane 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 control plane 机器:

例 4.26. 05_masters.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "masterIgnition" : {
      "type" : "string",
      "metadata" : {
        "description" : "Ignition content for the master nodes"
      }
    },
    "numberOfMasters" : {
      "type" : "int",
      "defaultValue" : 3,
      "minValue" : 2,
      "maxValue" : 30,
      "metadata" : {
        "description" : "Number of OpenShift masters to deploy"
      }
    },
    "sshKeyData" : {
      "type" : "securestring",
      "defaultValue" : "Unused",
      "metadata" : {
        "description" : "Unused"
      }
    },
    "privateDNSZoneName" : {
      "type" : "string",
      "defaultValue" : "",
      "metadata" : {
        "description" : "unused"
      }
    },
    "masterVMSize" : {
      "type" : "string",
      "defaultValue" : "Standard_D8s_v3",
      "metadata" : {
        "description" : "The size of the Master Virtual Machines"
      }
    },
    "diskSizeGB" : {
      "type" : "int",
      "defaultValue" : 1024,
      "metadata" : {
        "description" : "Size of the Master VM OS disk, in GB"
      }
    },
    "hyperVGen": {
      "type": "string",
      "metadata": {
        "description": "VM generation image to use"
      },
      "defaultValue": "V2",
      "allowedValues": [
        "V1",
        "V2"
      ]
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "masterSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-master-subnet')]",
    "masterSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('masterSubnetName'))]",
    "masterLoadBalancerName" : "[parameters('baseName')]",
    "internalLoadBalancerName" : "[concat(parameters('baseName'), '-internal-lb')]",
    "sshKeyPath" : "/home/core/.ssh/authorized_keys",
    "identityName" : "[concat(parameters('baseName'), '-identity')]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName" : "[concat(parameters('baseName'), if(equals(parameters('hyperVGen'), 'V2'), '-gen2', ''))]",
    "copy" : [
      {
        "name" : "vmNames",
        "count" :  "[parameters('numberOfMasters')]",
        "input" : "[concat(parameters('baseName'), '-master-', copyIndex('vmNames'))]"
      }
    ]
  },
  "resources" : [
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Network/networkInterfaces",
      "copy" : {
        "name" : "nicCopy",
        "count" : "[length(variables('vmNames'))]"
      },
      "name" : "[concat(variables('vmNames')[copyIndex()], '-nic')]",
      "location" : "[variables('location')]",
      "properties" : {
        "ipConfigurations" : [
          {
            "name" : "pipConfig",
            "properties" : {
              "privateIPAllocationMethod" : "Dynamic",
              "subnet" : {
                "id" : "[variables('masterSubnetRef')]"
              },
              "loadBalancerBackendAddressPools" : [
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('masterLoadBalancerName'), '/backendAddressPools/', variables('masterLoadBalancerName'))]"
                },
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'), '/backendAddressPools/internal-lb-backend')]"
                }
              ]
            }
          }
        ]
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Compute/virtualMachines",
      "copy" : {
        "name" : "vmCopy",
        "count" : "[length(variables('vmNames'))]"
      },
      "name" : "[variables('vmNames')[copyIndex()]]",
      "location" : "[variables('location')]",
      "identity" : {
        "type" : "userAssigned",
        "userAssignedIdentities" : {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('identityName'))]" : {}
        }
      },
      "dependsOn" : [
        "[concat('Microsoft.Network/networkInterfaces/', concat(variables('vmNames')[copyIndex()], '-nic'))]"
      ],
      "properties" : {
        "hardwareProfile" : {
          "vmSize" : "[parameters('masterVMSize')]"
        },
        "osProfile" : {
          "computerName" : "[variables('vmNames')[copyIndex()]]",
          "adminUsername" : "core",
          "adminPassword" : "NotActuallyApplied!",
          "customData" : "[parameters('masterIgnition')]",
          "linuxConfiguration" : {
            "disablePasswordAuthentication" : false
          }
        },
        "storageProfile" : {
          "imageReference": {
            "id": "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('imageName'))]"
          },
          "osDisk" : {
            "name": "[concat(variables('vmNames')[copyIndex()], '_OSDisk')]",
            "osType" : "Linux",
            "createOption" : "FromImage",
            "caching": "ReadOnly",
            "writeAcceleratorEnabled": false,
            "managedDisk": {
              "storageAccountType": "Premium_LRS"
            },
            "diskSizeGB" : "[parameters('diskSizeGB')]"
          }
        },
        "networkProfile" : {
          "networkInterfaces" : [
            {
              "id" : "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('vmNames')[copyIndex()], '-nic'))]",
              "properties": {
                "primary": false
              }
            }
          ]
        }
      }
    }
  ]
}

4.2.15. 等待 bootstrap 完成并删除 Azure 中的 bootstrap 资源

在 Microsoft Azure 中创建所有所需的基础架构后,请等待您通过安装程序生成的 Ignition 配置文件所置备的机器上完成 bootstrap 过程。

先决条件

  • 创建 control plane 机器。

流程

  1. 进入包含安装程序的目录并运行以下命令:

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

    如果命令退出时没有 FATAL 警告,则您的生产环境 control plane 已被初始化。

  2. 删除 bootstrap 资源:

    $ az network nsg rule delete -g ${RESOURCE_GROUP} --nsg-name ${INFRA_ID}-nsg --name bootstrap_ssh_in
    $ az vm stop -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap
    $ az vm deallocate -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap
    $ az vm delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap --yes
    $ az disk delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap_OSDisk --no-wait --yes
    $ az network nic delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-nic --no-wait
    $ az storage blob delete --account-key ${ACCOUNT_KEY} --account-name ${CLUSTER_NAME}sa --container-name files --name bootstrap.ign
    $ az network public-ip delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-ssh-pip
注意

如果没有删除 bootstrap 服务器,因为 API 流量会路由到 bootstrap 服务器,所以安装可能无法成功。

4.2.16. 在 Azure 中创建额外的 worker 机器

您可以通过分散启动各个实例或利用集群外自动化流程(如自动缩放组),在 Microsoft Azure 中为您的集群创建 worker 机器。您还可以利用 OpenShift Container Platform 中的内置集群扩展机制和机器 API。

在本例中,您要使用 Azure Resource Manager(ARM)模板手动启动一个实例。通过在 文件中包括类型为 06_workers.json 的其他资源,即可启动其他实例。

注意

默认情况下,Microsoft Azure 将 control plane 机器和计算机器放在预先设置的可用区中。您可以为计算节点或 control plane 节点手动设置可用区。要做到这一点,通过在虚拟机资源的 zones 参数中指定每个可用区来修改供应商的 ARM 模板。

如果不使用提供的 ARM 模板来创建 control plane 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。

流程

  1. 复制 worker 机器的 ARM 模板一节中的模板,并将它以 06_workers.json 保存到集群的安装目录中。此模板描述了集群所需的 worker 机器。
  2. 导出 worker 机器部署所需的以下变量:

    $ export WORKER_IGNITION=`cat <installation_directory>/worker.ign | base64 | tr -d '\n'`
  3. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/06_workers.json" \
      --parameters workerIgnition="${WORKER_IGNITION}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameters nodeVMSize="Standard_D4s_v3" 3
    1
    worker 节点的 Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    可选:指定计算节点虚拟机的大小。使用与指定架构兼容的虚拟机大小。如果未定义这个值,则会设置模板中的默认值。
4.2.16.1. worker 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 worker 机器:

例 4.27. 06_workers.json ARM template

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "workerIgnition" : {
      "type" : "string",
      "metadata" : {
        "description" : "Ignition content for the worker nodes"
      }
    },
    "numberOfNodes" : {
      "type" : "int",
      "defaultValue" : 3,
      "minValue" : 2,
      "maxValue" : 30,
      "metadata" : {
        "description" : "Number of OpenShift compute nodes to deploy"
      }
    },
    "sshKeyData" : {
      "type" : "securestring",
      "defaultValue" : "Unused",
      "metadata" : {
        "description" : "Unused"
      }
    },
    "nodeVMSize" : {
      "type" : "string",
      "defaultValue" : "Standard_D4s_v3",
      "metadata" : {
        "description" : "The size of the each Node Virtual Machine"
      }
    },
    "hyperVGen": {
      "type": "string",
      "metadata": {
        "description": "VM generation image to use"
      },
      "defaultValue": "V2",
      "allowedValues": [
        "V1",
        "V2"
      ]
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "nodeSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-worker-subnet')]",
    "nodeSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('nodeSubnetName'))]",
    "infraLoadBalancerName" : "[parameters('baseName')]",
    "sshKeyPath" : "/home/capi/.ssh/authorized_keys",
    "identityName" : "[concat(parameters('baseName'), '-identity')]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName" : "[concat(parameters('baseName'), if(equals(parameters('hyperVGen'), 'V2'), '-gen2', ''))]",
    "copy" : [
      {
        "name" : "vmNames",
        "count" :  "[parameters('numberOfNodes')]",
        "input" : "[concat(parameters('baseName'), '-worker-', variables('location'), '-', copyIndex('vmNames', 1))]"
      }
    ]
  },
  "resources" : [
    {
      "apiVersion" : "2019-05-01",
      "name" : "[concat('node', copyIndex())]",
      "type" : "Microsoft.Resources/deployments",
      "copy" : {
        "name" : "nodeCopy",
        "count" : "[length(variables('vmNames'))]"
      },
      "properties" : {
        "mode" : "Incremental",
        "template" : {
          "$schema" : "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion" : "1.0.0.0",
          "resources" : [
            {
              "apiVersion" : "2018-06-01",
              "type" : "Microsoft.Network/networkInterfaces",
              "name" : "[concat(variables('vmNames')[copyIndex()], '-nic')]",
              "location" : "[variables('location')]",
              "properties" : {
                "ipConfigurations" : [
                  {
                    "name" : "pipConfig",
                    "properties" : {
                      "privateIPAllocationMethod" : "Dynamic",
                      "subnet" : {
                        "id" : "[variables('nodeSubnetRef')]"
                      }
                    }
                  }
                ]
              }
            },
            {
              "apiVersion" : "2018-06-01",
              "type" : "Microsoft.Compute/virtualMachines",
              "name" : "[variables('vmNames')[copyIndex()]]",
              "location" : "[variables('location')]",
              "tags" : {
                "kubernetes.io-cluster-ffranzupi": "owned"
              },
              "identity" : {
                "type" : "userAssigned",
                "userAssignedIdentities" : {
                  "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('identityName'))]" : {}
                }
              },
              "dependsOn" : [
                "[concat('Microsoft.Network/networkInterfaces/', concat(variables('vmNames')[copyIndex()], '-nic'))]"
              ],
              "properties" : {
                "hardwareProfile" : {
                  "vmSize" : "[parameters('nodeVMSize')]"
                },
                "osProfile" : {
                  "computerName" : "[variables('vmNames')[copyIndex()]]",
                  "adminUsername" : "capi",
                  "adminPassword" : "NotActuallyApplied!",
                  "customData" : "[parameters('workerIgnition')]",
                  "linuxConfiguration" : {
                    "disablePasswordAuthentication" : false
                  }
                },
                "storageProfile" : {
                  "imageReference": {
                    "id": "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('imageName'))]"
                  },
                  "osDisk" : {
                    "name": "[concat(variables('vmNames')[copyIndex()],'_OSDisk')]",
                    "osType" : "Linux",
                    "createOption" : "FromImage",
                    "managedDisk": {
                      "storageAccountType": "Premium_LRS"
                    },
                    "diskSizeGB": 128
                  }
                },
                "networkProfile" : {
                  "networkInterfaces" : [
                    {
                      "id" : "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('vmNames')[copyIndex()], '-nic'))]",
                      "properties": {
                        "primary": true
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    }
  ]
}

4.2.17. 安装 OpenShift CLI

您可以安装 OpenShift CLI(oc)来使用命令行界面与 OpenShift Container Platform 进行交互。您可以在 Linux、Windows 或 macOS 上安装 oc

重要

如果安装了旧版本的 oc,则可能无法使用 OpenShift Container Platform 4.17 中的所有命令。下载并安装新版本的 oc

在 Linux 上安装 OpenShift CLI

您可以按照以下流程在 Linux 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 产品变体 下拉列表中选择架构。
  3. 版本 下拉列表中选择适当的版本。
  4. OpenShift v4.17 Linux Clients 条目旁的 Download Now 来保存文件。
  5. 解包存档:

    $ tar xvf <file>
  6. oc 二进制文件放到 PATH 中的目录中

    要查看您的 PATH,请执行以下命令:

    $ echo $PATH

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    $ oc <command>
在 Windows 上安装 OpenShift CLI

您可以按照以下流程在 Windows 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 Windows Client 条目旁的 Download Now 来保存文件。
  4. 使用 ZIP 程序解压存档。
  5. oc 二进制文件移到 PATH 中的目录中

    要查看您的 PATH,请打开命令提示并执行以下命令:

    C:\> path

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    C:\> oc <command>
在 macOS 上安装 OpenShift CLI

您可以按照以下流程在 macOS 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 macOS Clients 条目旁的 Download Now 来保存文件。

    注意

    对于 macOS arm64,请选择 OpenShift v4.17 macOS arm64 Client 条目。

  4. 解包和解压存档。
  5. oc 二进制文件移到 PATH 的目录中。

    要查看您的 PATH,请打开终端并执行以下命令:

    $ echo $PATH

验证

  • 使用 oc 命令验证安装:

    $ oc <command>

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

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

当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(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 被批准前,前面的输出可能不包括计算节点(也称为 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.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 状态

附加信息

4.2.20. 添加 Ingress DNS 记录

如果在创建 Kubernetes 清单并生成 Ignition 配置时删除了 DNS 区配置,您必须手动创建指向 Ingress 负载均衡器的 DNS 记录。您可以创建一个通配符 *.apps.{baseDomain}. 或特定的记录。您可以根据要求使用 A、CNAME 和其他记录。

先决条件

  • 已使用您置备的基础架构在 Microsoft Azure 上安装了 OpenShift Container Platform 集群。
  • 安装 OpenShift CLI(oc)。
  • 安装或更新 Azure CLI

流程

  1. 确认 Ingress 路由器已创建了负载均衡器并填充 EXTERNAL-IP 字段:

    $ oc -n openshift-ingress get service router-default

    输出示例

    NAME             TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
    router-default   LoadBalancer   172.30.20.10   35.130.120.110   80:32288/TCP,443:31215/TCP   20

  2. 将 Ingress 路由器 IP 导出作为变量:

    $ export PUBLIC_IP_ROUTER=`oc -n openshift-ingress get service router-default --no-headers | awk '{print $4}'`
  3. 在公共 DNS 区域中添加 *.apps 记录。

    1. 如果您要将此集群添加到新的公共区,请运行:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n *.apps -a ${PUBLIC_IP_ROUTER} --ttl 300
    2. 如果您要将此集群添加到已经存在的公共区中,请运行:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n *.apps.${CLUSTER_NAME} -a ${PUBLIC_IP_ROUTER} --ttl 300
  4. 在私有 DNS 区域中添加 *.apps 记录:

    1. 使用以下命令创建 *.apps 记录:

      $ az network private-dns record-set a create -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n *.apps --ttl 300
    2. 使用以下命令在专用 DNS 区域中添加 *.apps 记录:

      $ az network private-dns record-set a add-record -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n *.apps -a ${PUBLIC_IP_ROUTER}

如果需要添加特定域而不使用通配符,可以为集群的每个当前路由创建条目:

$ oc get --all-namespaces -o jsonpath='{range .items[*]}{range .status.ingress[*]}{.host}{"\n"}{end}{end}' routes

输出示例

oauth-openshift.apps.cluster.basedomain.com
console-openshift-console.apps.cluster.basedomain.com
downloads-openshift-console.apps.cluster.basedomain.com
alertmanager-main-openshift-monitoring.apps.cluster.basedomain.com
prometheus-k8s-openshift-monitoring.apps.cluster.basedomain.com

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

在 Microsoft Azure 用户置备的基础架构上启动 OpenShift Container Platform 安装后,您可以监控集群事件,直到集群就绪可用。

先决条件

  • 在用户置备的 Azure 基础架构上为 OpenShift Container Platform 集群部署 bootstrap 机器。
  • 安装 oc CLI 并登录。

流程

  • 完成集群安装:

    $ ./openshift-install --dir <installation_directory> wait-for install-complete 1

    输出示例

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

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

4.2.22. OpenShift Container Platform 的 Telemetry 访问

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

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

其他资源

4.3. 使用 ARM 模板在 Azure 上安装集群

在 OpenShift Container Platform 版本 4.17 中,您可以使用您提供的基础架构在 Microsoft Azure 上安装集群。

提供的几个 Azure Resource Manager(ARM) 模板可协助完成这些步骤,也可帮助您自行建模。

重要

进行用户置备的基础架构安装的步骤仅作为示例。使用您提供的基础架构安装集群需要了解云供应商和 OpenShift Container Platform 安装过程。提供的几个 ARM 模板可帮助完成这些步骤,或帮助您自行建模。您也可以自由选择通过其他方法创建所需的资源;模板仅作示例之用。

4.3.1. 先决条件

4.3.2. OpenShift Container Platform 互联网访问

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

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

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

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

4.3.3. 配置 Azure 项目

在安装 OpenShift Container Platform 之前,您必须配置 Azure 项目来托管它。

重要

所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语列表,请参阅 Azure 文档中的解决保留资源名称错误

4.3.3.1. Azure 帐户限值

OpenShift Container Platform 集群使用诸多 Microsoft Azure 组件,默认的 Azure 订阅和服务限值、配额和约束会影响您安装 OpenShift Container Platform 集群的能力。

重要

默认的限制因服务类别的不同(如 Free Trial 或 Pay-As-You-Go)以及系列的不同(如 Dv2 、F 或 G)而有所不同。例如,对于 Enterprise Agreement 订阅的默认限制是 350 个内核。

在 Azure 上安装默认集群前,请检查您的订阅类型的限制,如有必要,请提高帐户的配额限制。

下表总结了 Azure 组件,它们的限值会影响您安装和运行 OpenShift Container Platform 集群的能力。

组件默认所需的组件数默认 Azure 限值描述

vCPU

40

每个区域 20 个

默认集群需要 40 个 vCPU,因此您必须提高帐户限值。

默认情况下,每个集群创建以下实例:

  • 一台 Bootstrap 机器,在安装后删除
  • 三个 control plane 机器
  • 三个计算(compute)机器

由于 Bootstrap 机器使用 Standard_D4s_v3 机器(使用 4 个 vCPU),control plane 机器使用 Standard_D8s_v3 虚拟机(8 个 vCPU),并且 worker 机器使用 Standard_D4s_v3 虚拟机(4 个 vCPU),因此默认集群需要 40 个 vCPU。bootstrap 节点 VM(使用 4 个 vCPU)只在安装过程中使用。

若要部署更多 worker 节点、启用自动扩展、部署大型工作负载或使用不同的实例类型,您必须进一步提高帐户的 vCPU 限值,以确保集群可以部署您需要的机器。

OS Disk

7

 

每个集群机器必须至少有 100 GB 存储和 300 IOPS。虽然这些值是最低支持的值,但对于具有密集型工作负载的生产环境集群和集群,建议使用更快的存储。有关优化性能存储的更多信息,请参阅"扩展和性能"部分中的页面标题为"优化存储"。

VNet

1

每个区域 1000 个

每个默认集群都需要一个虚拟网络 (VNet),此网络包括两个子网。

网络接口

7

每个区域 65,536 个

每个默认集群都需要 7 个网络接口。如果您要创建更多机器或者您部署的工作负载要创建负载均衡器,则集群会使用更多的网络接口。

网络安全组

2

5000

每个集群为 VNet 中的每个子网创建网络安全组。默认集群为 control plane 和计算节点子网创建网络安全组:

controlplane

允许从任何位置通过端口 6443 访问 control plane 机器

node

允许从互联网通过端口 80 和 443 访问 worker 节点

网络负载均衡器

3

每个区域 1000 个

每个集群都会创建以下负载均衡器

default

用于在 worker 机器之间对端口 80 和 443 的请求进行负载均衡的公共 IP 地址

internal

用于在 control plane 机器之间对端口 6443 和 22623 的请求进行负载均衡的专用 IP 地址

external

用于在 control plane 机器之间对端口 6443 的请求进行负载均衡的公共 IP 地址

如果您的应用程序创建了更多的 Kubernetes LoadBalancer 服务对象,您的集群会使用更多的负载均衡器。

公共 IP 地址

3

 

两个公共负载均衡器各自使用一个公共 IP 地址。bootstrap 机器也使用一个公共 IP 地址,以便您可以在安装期间通过 SSH 连接到该机器来进行故障排除。bootstrap 节点的 IP 地址仅在安装过程中使用。

专用 IP 地址

7

 

内部负载均衡器、三台 control plane 机器中的每一台以及三台 worker 机器中的每一台各自使用一个专用 IP 地址。

Spot VM vCPU(可选)

0

如果配置 spot 虚拟机,您的集群必须为每个计算节点有两个 spot VM vCPU。

每个区域 20 个

这是可选组件。要使用 spot 虚拟机,您必须将 Azure 默认限值增加到集群中至少有两倍的计算节点数量。

注意

不建议将 spot 虚拟机用于 control plane 节点。

其他资源

4.3.3.2. 在 Azure 中配置公共 DNS 区

要安装 OpenShift Container Platform,您使用的 Microsoft Azure 帐户必须在帐户中具有一个专用的公共托管 DNS 区。此区域必须对域具有权威。此服务为集群外部连接提供集群 DNS 解析和名称查询。

流程

  1. 标识您的域或子域,以及注册商(registrar)。您可以转移现有的域和注册商,或通过 Azure 或其他来源获取新的域和注册商。

    注意

    如需通过 Azure 购买域的更多信息,请参阅 Azure 文档中的购买 Azure 应用服务的自定义域名

  2. 如果您使用现有的域和注册商,请将其 DNS 迁移到 Azure。请参阅 Azure 文档中的将活动 DNS 名称迁移到 Azure 应用服务
  3. 为您的域配置 DNS。按照 Azure 文档中教程:在 Azure DNS 中托管域部分里的步骤,为您的域或子域创建一个公共托管区,提取新的权威名称服务器,并更新您的域使用的名称服务器的注册商记录。

    使用合适的根域(如 openshiftcorp.com)或子域(如 clusters.openshiftcorp.com)。

  4. 如果您使用子域,请按照您公司的流程将其委派记录添加到父域。

您可以通过访问此 示例来创建 DNS 区域来查看 Azure 的 DNS 解决方案

4.3.3.3. 提高 Azure 帐户限值

要提高帐户限值,请在 Azure 门户上提交支持请求。

注意

每一支持请求只能提高一种类型的配额。

流程

  1. 从 Azure 门户,点击左下角的 Help + suport
  2. 点击 New support request,然后选择所需的值:

    1. Issue type 列表中,选择 Service and subscription limits (quotas)
    2. Subscription 列表中,选择要修改的订阅。
    3. Quota type 列表中,选择要提高的配额。例如,选择 Compute-VM (cores-vCPUs) subscription limit increases 以增加 vCPU 的数量,这是安装集群所必须的。
    4. 点击 Next: Solutions
  3. Problem Details 页面中,提供您要提高配额所需的信息:

    1. 点击 Provide details,然后在 Quota details 窗口中提供所需的详情。
    2. 在 SUPPORT METHOD 和 CONTACT INFO 部分中,提供问题严重性和您的联系详情。
  4. 点击 Next: Review + create,然后点击 Create
4.3.3.4. 证书签名请求管理

在使用您置备的基础架构时,集群只能有限地访问自动机器管理,因此您必须提供一种在安装后批准集群证书签名请求 (CSR) 的机制。kube-controller-manager 只能批准 kubelet 客户端 CSR。machine-approver 无法保证使用 kubelet 凭证请求的提供证书的有效性,因为它不能确认是正确的机器发出了该请求。您必须决定并实施一种方法,以验证 kubelet 提供证书请求的有效性并进行批准。

4.3.3.5. 记录下订阅和租户 ID

安装程序需要与 Azure 帐户关联的订阅和租户 ID。您可以使用 Azure CLI 收集此信息。

先决条件

流程

  1. 运行以下命令登录到 Azure CLI:

    $ az login
  2. 确保您使用正确的订阅:

    1. 运行以下命令,查看可用订阅列表:

      $ az account list --refresh

      输出示例

      [
        {
          "cloudName": "AzureCloud",
          "id": "8xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "isDefault": true,
          "name": "Subscription Name 1",
          "state": "Enabled",
          "tenantId": "6xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "user": {
            "name": "you@example.com",
            "type": "user"
          }
        },
        {
          "cloudName": "AzureCloud",
          "id": "9xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "isDefault": false,
          "name": "Subscription Name 2",
          "state": "Enabled",
          "tenantId": "7xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "user": {
            "name": "you2@example.com",
            "type": "user"
          }
        }
      ]

    2. 运行以下命令,查看活跃帐户的详情,并确认这是您要使用的订阅:

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "8xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "isDefault": true,
        "name": "Subscription Name 1",
        "state": "Enabled",
        "tenantId": "6xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "user": {
          "name": "you@example.com",
          "type": "user"
        }
      }

  3. 如果您没有使用正确的订阅:

    1. 运行以下命令来更改活跃订阅:

      $ az account set -s <subscription_id>
    2. 运行以下命令验证您是否正在使用所需的订阅:

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "9xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "isDefault": true,
        "name": "Subscription Name 2",
        "state": "Enabled",
        "tenantId": "7xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "user": {
          "name": "you2@example.com",
          "type": "user"
        }
      }

  4. 记录输出中的 idtenantId 参数值。您需要这些值来安装 OpenShift Container Platform 集群。
4.3.3.6. 支持访问 Azure 资源的身份

OpenShift Container Platform 集群需要一个 Azure 身份来创建和管理 Azure 资源。因此,您需要以下身份之一来完成安装:

  • 服务主体
  • 系统分配的管理身份
  • 用户分配的受管身份
4.3.3.7. 用户置备的基础架构所需的 Azure 权限

安装程序需要访问具有所需权限的 Azure 服务主体或受管身份,以部署集群并维护其每日操作。这些权限必须授予与身份关联的 Azure 订阅。

以下选项可供您使用:

  • 您可以为身份分配 ContributorUser Access Administrator 角色。分配这些角色是授予所有所需权限的最快速方法。

    有关分配角色的更多信息,请参阅 Azure 文档,使用 Azure 门户管理 Azure 资源的访问

  • 如果机构的安全策略需要更严格的权限集,您可以创建具有所需权限的自定义角色

在 Microsoft Azure 上创建 OpenShift Container Platform 集群需要以下权限。

例 4.28. 创建授权资源所需的权限

  • Microsoft.Authorization/policies/audit/action
  • Microsoft.Authorization/policies/auditIfNotExists/action
  • Microsoft.Authorization/roleAssignments/read
  • Microsoft.Authorization/roleAssignments/write

例 4.29. 创建计算资源所需的权限

  • Microsoft.Compute/images/read
  • Microsoft.Compute/images/write
  • Microsoft.Compute/images/delete
  • Microsoft.Compute/availabilitySets/read
  • Microsoft.Compute/disks/beginGetAccess/action
  • Microsoft.Compute/disks/delete
  • Microsoft.Compute/disks/read
  • Microsoft.Compute/disks/write
  • Microsoft.Compute/galleries/images/read
  • Microsoft.Compute/galleries/images/versions/read
  • Microsoft.Compute/galleries/images/versions/write
  • Microsoft.Compute/galleries/images/write
  • Microsoft.Compute/galleries/read
  • Microsoft.Compute/galleries/write
  • Microsoft.Compute/snapshots/read
  • Microsoft.Compute/snapshots/write
  • Microsoft.Compute/snapshots/delete
  • Microsoft.Compute/virtualMachines/delete
  • Microsoft.Compute/virtualMachines/powerOff/action
  • Microsoft.Compute/virtualMachines/read
  • Microsoft.Compute/virtualMachines/write
  • Microsoft.Compute/virtualMachines/deallocate/action

例 4.30. 创建身份管理资源所需的权限

  • Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
  • Microsoft.ManagedIdentity/userAssignedIdentities/read
  • Microsoft.ManagedIdentity/userAssignedIdentities/write

例 4.31. 创建网络资源所需的权限

  • Microsoft.Network/dnsZones/A/write
  • Microsoft.Network/dnsZones/CNAME/write
  • Microsoft.Network/dnszones/CNAME/read
  • Microsoft.Network/dnszones/read
  • Microsoft.Network/loadBalancers/backendAddressPools/join/action
  • Microsoft.Network/loadBalancers/backendAddressPools/read
  • Microsoft.Network/loadBalancers/backendAddressPools/write
  • Microsoft.Network/loadBalancers/read
  • Microsoft.Network/loadBalancers/write
  • Microsoft.Network/networkInterfaces/delete
  • Microsoft.Network/networkInterfaces/join/action
  • Microsoft.Network/networkInterfaces/read
  • Microsoft.Network/networkInterfaces/write
  • Microsoft.Network/networkSecurityGroups/join/action
  • Microsoft.Network/networkSecurityGroups/read
  • Microsoft.Network/networkSecurityGroups/securityRules/delete
  • Microsoft.Network/networkSecurityGroups/securityRules/read
  • Microsoft.Network/networkSecurityGroups/securityRules/write
  • Microsoft.Network/networkSecurityGroups/write
  • Microsoft.Network/privateDnsZones/A/read
  • Microsoft.Network/privateDnsZones/A/write
  • Microsoft.Network/privateDnsZones/A/delete
  • Microsoft.Network/privateDnsZones/SOA/read
  • Microsoft.Network/privateDnsZones/read
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/read
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/write
  • Microsoft.Network/privateDnsZones/write
  • Microsoft.Network/publicIPAddresses/delete
  • Microsoft.Network/publicIPAddresses/join/action
  • Microsoft.Network/publicIPAddresses/read
  • Microsoft.Network/publicIPAddresses/write
  • Microsoft.Network/virtualNetworks/join/action
  • Microsoft.Network/virtualNetworks/read
  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read
  • Microsoft.Network/virtualNetworks/subnets/write
  • Microsoft.Network/virtualNetworks/write

例 4.32. 检查资源健康状况所需的权限

  • Microsoft.Resourcehealth/healthevent/Activated/action
  • Microsoft.Resourcehealth/healthevent/InProgress/action
  • Microsoft.Resourcehealth/healthevent/Pending/action
  • Microsoft.Resourcehealth/healthevent/Resolved/action
  • Microsoft.Resourcehealth/healthevent/Updated/action

例 4.33. 创建资源组所需的权限

  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Resources/subscriptions/resourcegroups/write

例 4.34. 创建资源标签所需的权限

  • Microsoft.Resources/tags/write

例 4.35. 创建存储资源所需的权限

  • Microsoft.Storage/storageAccounts/blobServices/read
  • Microsoft.Storage/storageAccounts/blobServices/containers/write
  • Microsoft.Storage/storageAccounts/fileServices/read
  • Microsoft.Storage/storageAccounts/fileServices/shares/read
  • Microsoft.Storage/storageAccounts/fileServices/shares/write
  • Microsoft.Storage/storageAccounts/fileServices/shares/delete
  • Microsoft.Storage/storageAccounts/listKeys/action
  • Microsoft.Storage/storageAccounts/read
  • Microsoft.Storage/storageAccounts/write

例 4.36. 创建部署所需的权限

  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/validate/action
  • Microsoft.Resources/deployments/operationstatuses/read

例 4.37. 创建计算资源的可选权限

  • Microsoft.Compute/availabilitySets/delete
  • Microsoft.Compute/availabilitySets/write

例 4.38. 创建 marketplace 虚拟机资源的可选权限

  • Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read
  • Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write

例 4.39. 启用用户管理加密的可选权限

  • Microsoft.Compute/diskEncryptionSets/read
  • Microsoft.Compute/diskEncryptionSets/write
  • Microsoft.Compute/diskEncryptionSets/delete
  • Microsoft.KeyVault/vaults/read
  • Microsoft.KeyVault/vaults/write
  • Microsoft.KeyVault/vaults/delete
  • Microsoft.KeyVault/vaults/deploy/action
  • Microsoft.KeyVault/vaults/keys/read
  • Microsoft.KeyVault/vaults/keys/write
  • Microsoft.Features/providers/features/register/action

删除 Microsoft Azure 上的 OpenShift Container Platform 集群需要以下权限。

例 4.40. 删除授权资源所需的权限

  • Microsoft.Authorization/roleAssignments/delete

例 4.41. 删除计算资源所需的权限

  • Microsoft.Compute/disks/delete
  • Microsoft.Compute/galleries/delete
  • Microsoft.Compute/galleries/images/delete
  • Microsoft.Compute/galleries/images/versions/delete
  • Microsoft.Compute/virtualMachines/delete
  • Microsoft.Compute/images/delete

例 4.42. 删除身份管理资源所需的权限

  • Microsoft.ManagedIdentity/userAssignedIdentities/delete

例 4.43. 删除网络资源所需的权限

  • Microsoft.Network/dnszones/read
  • Microsoft.Network/dnsZones/A/read
  • Microsoft.Network/dnsZones/A/delete
  • Microsoft.Network/dnsZones/CNAME/read
  • Microsoft.Network/dnsZones/CNAME/delete
  • Microsoft.Network/loadBalancers/delete
  • Microsoft.Network/networkInterfaces/delete
  • Microsoft.Network/networkSecurityGroups/delete
  • Microsoft.Network/privateDnsZones/read
  • Microsoft.Network/privateDnsZones/A/read
  • Microsoft.Network/privateDnsZones/delete
  • Microsoft.Network/privateDnsZones/virtualNetworkLinks/delete
  • Microsoft.Network/publicIPAddresses/delete
  • Microsoft.Network/virtualNetworks/delete

例 4.44. 检查资源健康状况所需的权限

  • Microsoft.Resourcehealth/healthevent/Activated/action
  • Microsoft.Resourcehealth/healthevent/Resolved/action
  • Microsoft.Resourcehealth/healthevent/Updated/action

例 4.45. 删除资源组所需的权限

  • Microsoft.Resources/subscriptions/resourcegroups/delete

例 4.46. 删除存储资源所需的权限

  • Microsoft.Storage/storageAccounts/delete
  • Microsoft.Storage/storageAccounts/listKeys/action
注意

要在 Azure 上安装 OpenShift Container Platform,您必须将资源组创建的权限范围到您的订阅。创建资源组后,您可以将剩余权限的范围限定到所创建的资源组。如果其他资源组中存在公共 DNS 区域,则必须始终将网络 DNS 区域相关权限应用到您的订阅。

在删除 OpenShift Container Platform 集群时,您可以将订阅的所有权限限定到您的订阅。

4.3.3.8. 使用 Azure 管理的身份

安装程序需要一个 Azure 身份来完成安装。您可以使用系统分配或用户分配的受管身份。

如果无法使用受管身份,您可以使用服务主体。

流程

  1. 如果您使用系统分配的受管身份,请在您要从其运行安装程序的虚拟机上启用它。
  2. 如果您使用用户分配的受管身份:

    1. 将它分配给您要从中运行安装程序的虚拟机。
    2. 记录其客户端 ID。安装集群时需要这个值。

      有关查看用户分配受管身份的详情的更多信息,请参阅 Microsoft Azure 文档来列出用户分配的管理身份

  3. 验证是否为受管身份分配了所需的权限。
4.3.3.9. 创建服务主体

安装程序需要一个 Azure 身份来完成安装。您可以使用服务主体。

如果无法使用服务主体,您可以使用受管身份。

先决条件

  • 已安装或更新 Azure CLI
  • 您有一个 Azure 订阅 ID。
  • 如果您没有将 ContributorUser Administrator Access 角色分配给服务主体,您已创建了具有所需 Azure 权限的自定义角色。

流程

  1. 运行以下命令,为您的帐户创建服务主体:

    $ az ad sp create-for-rbac --role <role_name> \1
         --name <service_principal> \2
         --scopes /subscriptions/<subscription_id> 3
    1
    定义角色名称。您可以使用 Contributor 角色,或者指定包含所需权限的自定义角色。
    2
    定义服务主体名称。
    3
    指定订阅 ID。

    输出示例

    Creating 'Contributor' role assignment under scope '/subscriptions/<subscription_id>'
    The output includes credentials that you must protect. Be sure that you do not
    include these credentials in your code or check the credentials into your source
    control. For more information, see https://aka.ms/azadsp-cli
    {
      "appId": "axxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": <service_principal>",
      "password": "00000000-0000-0000-0000-000000000000",
      "tenantId": "8xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }

  2. 记录输出中的 appIdpassword 参数的值。安装集群时需要这些值。
  3. 如果您将 Contributor 角色应用到服务主体,请运行以下命令来分配 User Administrator Access 角色:

    $ az role assignment create --role "User Access Administrator" \
      --assignee-object-id $(az ad sp show --id <appId> --query id -o tsv) 1
      --scope /subscriptions/<subscription_id> 2
    1
    为您的服务主体指定 appId 参数值。
    2
    指定订阅 ID。

其他资源

4.3.3.10. 支持的 Azure 区域

安装程序会根据您的订阅动态地生成可用的 Microsoft Azure 区域列表。

支持的 Azure 公共区域
  • australiacentral (Australia Central)
  • australiaeast (Australia East)
  • australiasoutheast (Australia South East)
  • brazilsouth (Brazil South)
  • canadacentral (Canada Central)
  • canadaeast (Canada East)
  • centralindia (Central India)
  • centralus (Central US)
  • eastasia (East Asia)
  • eastus (East US)
  • eastus2 (East US 2)
  • francecentral (France Central)
  • germanywestcentral (Germany West Central)
  • israelcentral (Israel Central)
  • italynorth (Italy North)
  • japaneast (Japan East)
  • japanwest (Japan West)
  • koreacentral (Korea Central)
  • koreasouth (Korea South)
  • mexicocentral (Mexico Central)
  • northcentralus (North Central US)
  • northeurope (North Europe)
  • norwayeast (Norway East)
  • polandcentral (Poland Central)
  • qatarcentral (Qatar Central)
  • southafricanorth (South Africa North)
  • southcentralus (South Central US)
  • southeastasia (Southeast Asia)
  • southindia (South India)
  • spaincentral (Spain Central)
  • swedencentral (Sweden Central)
  • switzerlandnorth (Switzerland North)
  • uaenorth (UAE North)
  • uksouth (UK South)
  • ukwest (UK West)
  • westcentralus (West Central US)
  • westeurope (West Europe)
  • westindia (West India)
  • westus (West US)
  • westus2 (West US 2)
  • westus3 (West US 3)
支持的 Azure 政府区域

OpenShift Container Platform 4.6 添加了对以下 Microsoft Azure Government(MAG)区域的支持:

  • usgovtexas (US Gov Texas)
  • usgovvirginia (US Gov Virginia)

您可以参阅 Azure 文档来了解与所有可用 MAG 区域的信息。其他 MAG 区域应该可以与 OpenShift Container Platform 一起工作,但并没有经过测试。

4.3.4. 具有用户置备基础架构的集群的要求

对于包含用户置备的基础架构的集群,您必须部署所有所需的机器。

本节论述了在用户置备的基础架构上部署 OpenShift Container Platform 的要求。

4.3.4.1. 集群安装所需的机器

最小的 OpenShift Container Platform 集群需要以下主机:

表 4.6. 最低所需的主机
主机描述

一个临时 bootstrap 机器

集群需要 bootstrap 机器在三台 control plane 机器上部署 OpenShift Container Platform 集群。您可在安装集群后删除 bootstrap 机器。

三台 control plane 机器

control plane 机器运行组成 control plane 的 Kubernetes 和 OpenShift Container Platform 服务。

至少两台计算机器,也称为 worker 机器。

OpenShift Container Platform 用户请求的工作负载在计算机器上运行。

重要

要保持集群的高可用性,请将独立的物理主机用于这些集群机器。

bootstrap 和 control plane 机器必须使用 Red Hat Enterprise Linux CoreOS(RHCOS)作为操作系统。但是,计算机器可以在 Red Hat Enterprise Linux CoreOS(RHCOS)、Red Hat Enterprise Linux(RHEL) 8.6 和更高的版本。

请注意,RHCOS 基于 Red Hat Enterprise Linux(RHEL) 9.2,并继承其所有硬件认证和要求。查看 红帽企业 Linux 技术功能和限制

4.3.4.2. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 4.7. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。
注意

从 OpenShift Container Platform 版本 4.13 开始,RHCOS 基于 RHEL 版本 9.2,它更新了微架构要求。以下列表包含每个架构需要的最小指令集架构 (ISA):

  • x86-64 体系结构需要 x86-64-v2 ISA
  • ARM64 架构需要 ARMv8.0-A ISA
  • IBM Power 架构需要 Power 9 ISA
  • s390x 架构需要 z14 ISA

如需更多信息,请参阅 RHEL 架构

重要

您需要使用将 PremiumIO 参数设置为 true 的 Azure 虚拟机。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

其他资源

4.3.4.3. 为 Azure 测试的实例类型

以下 Microsoft Azure 实例类型已经 OpenShift Container Platform 测试。

例 4.47. 基于 64 位 x86 架构的机器类型

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • standardDLDSv5Family
  • standardDLSv5Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • standardEADSv5Family
  • standardEASv4Family
  • standardEASv5Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardECACCV5Family
  • standardECADCCV5Family
  • standardECADSv5Family
  • standardECASv5Family
  • standardEDSv4Family
  • standardEDSv5Family
  • standardEIADSv5Family
  • standardEIASv4Family
  • standardEIASv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEIDSv5Family
  • standardEISv3Family
  • standardEISv5Family
  • standardESv3Family
  • standardESv4Family
  • standardESv5Family
  • standardFXMDVSFamily
  • standardFSFamily
  • standardFSv2Family
  • standardGSFamily
  • standardHBrsv2Family
  • standardHBSFamily
  • standardHBv4Family
  • standardHCSFamily
  • standardHXFamily
  • standardLASv3Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • standardNVSv3Family
  • standardXEISv4Family
4.3.4.4. 在 64 位 ARM 基础架构上为 Azure 测试的实例类型

以下 Microsoft Azure ARM64 实例类型已使用 OpenShift Container Platform 测试。

例 4.48. 基于 64 位 ARM 架构的机器类型

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family

4.3.5. 使用 Azure Marketplace 产品

使用 Azure Marketplace 产品可让您部署 OpenShift Container Platform 集群,该集群按照使用付费(按小时、每个内核)进行计费,同时仍由红帽直接支持。

要使用 Azure Marketplace 产品部署 OpenShift Container Platform 集群,您必须首先获取 Azure Marketplace 镜像。安装程序使用这个镜像来部署 worker 或 control plane 节点。在获取您的镜像时,请考虑以下事项:

  • 虽然镜像相同,但 Azure Marketplace publisher 根据您的区域。如果您位于北美,请将 redhat 指定为发布者。如果您位于 EMEA,请将 redhat-limited 指定为发布者。
  • 此项优惠包括 rh-ocp-worker SKU 和 rh-ocp-worker-gen1 SKU。rh-ocp-worker SKU 代表 Hyper-V 生成版本 2 虚拟机镜像。OpenShift Container Platform 中使用的默认实例类型与版本 2 兼容。如果您计划使用与版本 1 兼容的实例类型,请使用与 rh-ocp-worker-gen1 SKU 关联的镜像。rh-ocp-worker-gen1 SKU 代表 Hyper-V 版本 1 虚拟机镜像。
重要

在使用 64 位 ARM 实例的集群上不支持使用 Azure marketplace 安装镜像。

先决条件

  • 已安装 Azure CLI 客户端 (az)
  • 您的 Azure 帐户为产品授权,您使用 Azure CLI 客户端登录到此帐户。

流程

  1. 运行以下命令之一,显示所有可用的 OpenShift Container Platform 镜像:

    • 北美:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  -----------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-ocp-worker:4.15.2024072409              4.15.2024072409
      rh-ocp-worker  RedHat          rh-ocp-worker-gen1  RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409         4.15.2024072409

    • 欧洲、中东和非洲地区:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                                     Version
      -------------  --------------  ------------------  --------------------------------------------------------------          -----------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.15.2024072409              4.15.2024072409
      rh-ocp-worker  redhat-limited  rh-ocp-worker-gen1  redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409         4.15.2024072409

    注意

    使用可用于 compute 和 control plane 节点的最新镜像。如果需要,您的虚拟机会在安装过程中自动升级。

  2. 运行以下命令之一检查您的所提供的镜像:

    • 北美:

      $ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  3. 运行以下命令之一查看提供的术语:

    • 北美:

      $ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  4. 运行以下命令之一接受产品条款:

    • 北美:

      $ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  5. 记录您的所提供的镜像详情。如果使用 Azure Resource Manager (ARM) 模板来部署计算节点:

    1. 您可以通过删除 id 参数,并使用您的值来添加 offer, publisher, sku, and version 参数来更新 storageProfile.imageReference
    2. 为虚拟机 (VM) 指定一个计划

      示例 06_workers.json ARM 模板带有一个更新的 storageProfile.imageReference 对象和一个特定的计划

      ...
        "plan" : {
          "name": "rh-ocp-worker",
          "product": "rh-ocp-worker",
          "publisher": "redhat"
        },
        "dependsOn" : [
          "[concat('Microsoft.Network/networkInterfaces/', concat(variables('vmNames')[copyIndex()], '-nic'))]"
        ],
        "properties" : {
      ...
        "storageProfile": {
          "imageReference": {
          "offer": "rh-ocp-worker",
          "publisher": "redhat",
          "sku": "rh-ocp-worker",
          "version": "413.92.2023101700"
          }
          ...
         }
      ...
        }

4.3.6. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,至少有 1.2 GB 本地磁盘空间。

流程

  1. 进入 Red Hat Hybrid Cloud Console 上的 Cluster Type 页。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 在页的 Run it yourself 部分中选择您的基础架构供应商。
  3. OpenShift 安装程序下的下拉菜单中选择您的主机操作系统和架构,然后点下载安装程序
  4. 将下载的文件保存在要存储安装配置文件的目录中。

    重要
    • 安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。删除集群需要这两个文件。
    • 删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。
  5. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

另外,您还可以从红帽客户门户网站检索安装程序,您可以在其中指定要下载的安装程序版本。但是,您需要有一个有效的订阅才能访问此页。

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

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

将密钥传递给节点后,您可以使用密钥对作为用户 核心 通过 SSH 连接到 RHCOS 节点。若要通过 SSH 访问节点,必须由 SSH 为您的本地用户管理私钥身份。

如果要通过 SSH 连接到集群节点来执行安装调试或灾难恢复,则必须在安装过程中提供 SSH 公钥。./openshift-install gather 命令还需要在集群节点上设置 SSH 公钥。

重要

不要在生产环境中跳过这个过程,在生产环境中需要灾难恢复和调试。

注意

您必须使用本地密钥,而不是使用特定平台方法配置 的密钥,如 AWS 密钥对

流程

  1. 如果您在本地计算机上没有可用于在集群节点上进行身份验证的现有 SSH 密钥对,请创建一个。例如,在使用 Linux 操作系统的计算机上运行以下命令:

    $ ssh-keygen -t ed25519 -N '' -f <path>/<file_name> 1
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

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

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub

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

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

    注意

    在某些发行版中,自动管理默认 SSH 私钥身份,如 ~/.ssh/id_rsa~/.ssh/id_dsa

    1. 如果 ssh-agent 进程尚未为您的本地用户运行,请将其作为后台任务启动:

      $ eval "$(ssh-agent -s)"

      输出示例

      Agent pid 31874

      注意

      如果集群处于 FIPS 模式,则只使用 FIPS 兼容算法来生成 SSH 密钥。密钥必须是 RSA 或 ECDSA。

  4. 将 SSH 私钥添加到 ssh-agent

    $ ssh-add <path>/<file_name> 1
    1
    指定 SSH 私钥的路径和文件名,如 ~/.ssh/id_ed25519.pub

    输出示例

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

后续步骤

  • 安装 OpenShift Container Platform 时,为安装程序提供 SSH 公钥。如果在您置备的基础架构上安装集群,则必须为安装程序提供密钥。

4.3.8. 创建用于 Azure 的安装文件

要使用用户置备的基础架构在 Microsoft Azure 上安装 OpenShift Container Platform,您必须生成并修改安装程序部署集群所需的文件,以便集群只创建要使用的机器。您要生成并自定义 install-config.yaml 文件、Kubernetes 清单和 Ignition 配置文件。您还可以选择在安装准备阶段首先设置独立 var 分区。

4.3.8.1. 可选:创建独立 /var 分区

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

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

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

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

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

重要

如果按照以下步骤在此流程中创建独立 /var 分区,则不需要再次创建 Kubernetes 清单和 Ignition 配置文件,如本节所述。

流程

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

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

    $ openshift-install create manifests --dir $HOME/clusterconfig

    输出示例

    ? SSH Public Key ...
    INFO Credentials loaded from the "myprofile" profile in file "/home/myuser/.aws/credentials"
    INFO Consuming Install Config from target directory
    INFO Manifests created in: $HOME/clusterconfig/manifests and $HOME/clusterconfig/openshift

  3. 可选:确认安装程序在 clusterconfig/openshift 目录中创建了清单:

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

  4. 创建用于配置额外分区的 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(Mebibytes)。root 文件系统会自动调整大小以填充所有可用空间(最多到指定的偏移值)。如果没有指定值,或者指定的值小于推荐的最小值,则生成的 root 文件系统会太小,而在以后进行的 RHCOS 重新安装可能会覆盖数据分区的开始部分。
    3
    以兆字节为单位的数据分区大小。
    4
    对于用于容器存储的文件系统,必须启用 prjquota 挂载选项。
    注意

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

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

    $ butane $HOME/clusterconfig/98-var-partition.bu -o $HOME/clusterconfig/openshift/98-var-partition.yaml
  6. 再次运行 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 配置文件作为安装程序的输入来安装 Red Hat Enterprise Linux CoreOS(RHCOS)系统。

4.3.8.2. 创建安装配置文件

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

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 您有一个 Azure 订阅 ID 和租户 ID。
  • 如果要使用服务主体安装集群,则有其应用程序 ID 和密码。
  • 如果您要使用系统分配的受管身份安装集群,需要在您要从其中运行安装程序的虚拟机上启用它。
  • 如果您要使用用户分配的受管身份安装集群,需要满足以下先决条件:

    • 您有它的客户端 ID。
    • 您已将其分配给您要从其运行安装程序的虚拟机。

流程

  1. 可选:如果您之前在这个计算机上运行安装程序,并希望使用替代的服务主体或受管身份,请进入 ~/.azure/ 目录并删除 osServicePrincipal.json 配置文件。

    删除此文件可防止安装程序自动重复使用之前安装中的订阅和验证值。

  2. 创建 install-config.yaml 文件。

    1. 进入包含安装程序的目录并运行以下命令:

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

      在指定目录时:

      • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
      • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
    2. 在提示符处,提供云的配置详情:

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

        注意

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

      2. 选择 azure 作为目标平台。

        如果安装程序无法找到之前安装中的 osServicePrincipal.json 配置文件,会提示您输入 Azure 订阅和验证值。

      3. 为您的订阅输入以下 Azure 参数值:

        • Azure subscription id :输入用于集群的订阅 ID。
        • Azure 租户 id :输入租户 ID。
      4. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 id 时执行以下操作之一:

        • 如果您使用服务主体,请输入其应用程序 ID。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请指定其客户端 ID。
      5. 根据您用来部署集群的 Azure 身份,在提示输入 azure 服务主体客户端 secret 时执行以下操作之一:

        • 如果您使用服务主体,请输入其密码。
        • 如果您使用系统分配的受管身份,请将此值设为空白。
        • 如果您使用用户分配的受管身份,请将此值设为空白。
      6. 选择要将集群部署到的区域。
      7. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      8. 为集群输入一个描述性名称。

        重要

        所有通过公共端点提供的 Azure 资源均存在资源名称的限制,您无法创建使用某些名称的资源。如需 Azure 限制词语的列表,请参阅 Azure 文档中的解决预留资源名称错误

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

    注意

    如果要安装三节点集群,请确保将 compute.replicas 参数设置为 0。这样可确保集群的 control plane 可以调度。如需更多信息,请参阅"在 Azure 上安装三节点集群"。

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

    重要

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

在以前的版本中,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这样可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置集。

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

生产环境可能会拒绝直接访问互联网,而是提供 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。使用 * 绕过所有目的地的代理。
    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 对象,且无法创建额外的代理。

4.3.8.4. 为 ARM 模板导出常用变量

您必须导出与提供的 Azure Resource Manager(ARM)模板搭配使用的一组常用变量,它们有助于在 Microsoft Azure 上完成用户提供基础架构安装。

注意

特定的 ARM 模板可能还需要其他导出变量,这些变量在相关的程序中详细介绍。

先决条件

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

流程

  1. 导出 install-config.yaml 中由提供的 ARM 模板使用的通用变量:

    $ export CLUSTER_NAME=<cluster_name>1
    $ export AZURE_REGION=<azure_region>2
    $ export SSH_KEY=<ssh_key>3
    $ export BASE_DOMAIN=<base_domain>4
    $ export BASE_DOMAIN_RESOURCE_GROUP=<base_domain_resource_group>5
    1
    install-config.yaml 文件中的.metadata.name 属性的值。
    2
    集群要部署到的区域,如 centralus 。这是来自 install-config.yaml 文件中的 .platform.azure.region 属性的值。
    3
    作为字符串的 SSH RSA 公钥文件。您必须使用引号包括 SSH 密钥,因为它包含空格。这是来自 install-config.yaml 文件中的 .sshKey 属性的值。
    4
    集群要部署到的基域。基域与您为集群创建的公共 DNS 区对应。这是来自 install-config.yaml 文件中的 .baseDomain 属性的值。
    5
    公共 DNS 区所在的资源组。这是来自 install-config.yaml 文件中的 .platform.azure.baseDomainResourceGroupName 属性的值。

    例如:

    $ export CLUSTER_NAME=test-cluster
    $ export AZURE_REGION=centralus
    $ export SSH_KEY="ssh-rsa xxx/xxx/xxx= user@email.com"
    $ export BASE_DOMAIN=example.com
    $ export BASE_DOMAIN_RESOURCE_GROUP=ocp-cluster
  2. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
4.3.8.5. 创建 Kubernetes 清单和 Ignition 配置文件

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

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

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

先决条件

  • 已获得 OpenShift Container Platform 安装程序。
  • 已创建 install-config.yaml 安装配置文件。

流程

  1. 进入包含 OpenShift Container Platform 安装程序的目录,并为集群生成 Kubernetes 清单:

    $ ./openshift-install create manifests --dir <installation_directory> 1
    1
    对于 <installation_directory>,请指定包含您创建的 install-config.yaml 文件的安装目录。
  2. 删除定义 control plane 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_master-machines-*.yaml

    通过删除这些文件,您可以防止集群自动生成 control plane 机器。

  3. 删除定义 control plane 机器集的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-machine-api_master-control-plane-machine-set.yaml
  4. 删除定义 worker 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-*.yaml
    重要

    如果在用户置备的基础架构上安装集群时禁用了 MachineAPI 功能,则必须删除定义 worker 机器的 Kubernetes 清单文件。否则,集群将无法安装。

    由于您要自行创建和管理 worker 机器,因此不需要初始化这些机器。

    警告

    如果您要安装一个三节点集群,请跳过以下步骤,以便可以调度 control plane 节点。

    重要

    当您将 control plane 节点从默认的不可调度配置为可以调度时,需要额外的订阅。这是因为 control plane 节点变为计算节点。

  5. 检查 <installation_directory>/manifests/cluster-scheduler-02-config.yml Kubernetes 清单文件中的 mastersSchedulable 参数是否已设置为 false。此设置可防止在 control plane 机器上调度 pod:

    1. 打开 <installation_directory>/manifests/cluster-scheduler-02-config.yml 文件。
    2. 找到 mastersSchedulable 参数,并确保它被设置为 false
    3. 保存并退出 文件。
  6. 可选:如果您不希望 Ingress Operator 代表您创建 DNS 记录,请删除 <installation_directory>/manifests/cluster-dns-02-config.yml DNS 配置文件中的 privateZone 和 publicZone 部分:

    apiVersion: config.openshift.io/v1
    kind: DNS
    metadata:
      creationTimestamp: null
      name: cluster
    spec:
      baseDomain: example.openshift.com
      privateZone: 1
        id: mycluster-100419-private-zone
      publicZone: 2
        id: example.openshift.com
    status: {}
    1 2
    完全删除此部分。

    如果您这样做,后续步骤中必须手动添加入口 DNS 记录。

  7. 在用户置备的基础架构上配置 Azure 时,您必须导出清单文件中定义的一些常见变量,以备稍后在 Azure Resource Manager(ARM)模板中使用:

    1. 使用以下命令导出基础架构 ID:

      $ export INFRA_ID=<infra_id> 1
      1
      OpenShift Container Platform 集群被分配了一个标识符(INFRA_ID),其格式为 <cluster_name>-<random_string>。这将作为使用提供的 ARM 模板创建的大部分资源的基本名称。这是来自 manifests/cluster-infrastructure-02-config.yml 文件中的 .status.infrastructureName 属性的值。
    2. 使用以下命令导出资源组:

      $ export RESOURCE_GROUP=<resource_group> 1
      1
      此 Azure 部署中创建的所有资源都作为资源组的一部分。资源组名称还基于 INFRA_ID,格式为 <cluster_name>-<random_string>-rg。这是来自 manifests/cluster-infrastructure-02-config.yml 文件中的 .status.platformStatus.azure.resourceGroupName 属性的值。
  8. 要创建 Ignition 配置文件,从包含安装程序的目录运行以下命令:

    $ ./openshift-install create ignition-configs --dir <installation_directory> 1
    1
    对于 <installation_directory>,请指定相同的安装目录。

    为安装目录中的 bootstrap、control plane 和计算节点创建 Ignition 配置文件。kubeadmin-passwordkubeconfig 文件是在 ./<installation_directory>/auth 目录中创建的:

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

4.3.9. 创建 Azure 资源组

您必须创建一个 Microsoft Azure 资源组以及该资源组的身份。它们都用于在 Azure 上安装 OpenShift Container Platform 集群。

流程

  1. 在受支持的 Azure 区域中创建资源组:

    $ az group create --name ${RESOURCE_GROUP} --location ${AZURE_REGION}
  2. 为资源组创建 Azure 身份:

    $ az identity create -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity

    这用于授予集群中 Operator 所需的访问权限。例如,这允许 Ingress Operator 创建公共 IP 及其负载均衡器。您必须将 Azure 身份分配给角色。

  3. 将 Contributor 角色授予 Azure 身份:

    1. 导出 Azure 角色分配所需的以下变量:

      $ export PRINCIPAL_ID=`az identity show -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity --query principalId --out tsv`
      $ export RESOURCE_GROUP_ID=`az group show -g ${RESOURCE_GROUP} --query id --out tsv`
    2. 将 Contributor 角色分配给身份:

      $ az role assignment create --assignee "${PRINCIPAL_ID}" --role 'Contributor' --scope "${RESOURCE_GROUP_ID}"
      注意

      如果要为身份分配具有所有所需权限的自定义角色,请运行以下命令:

      $ az role assignment create --assignee "${PRINCIPAL_ID}" --role <custom_role> \ 1
      --scope "${RESOURCE_GROUP_ID}"
      1
      指定自定义角色名称。

4.3.10. 上传 RHCOS 集群镜像和 bootstrap Ignition 配置文件

Azure 客户端不支持基于本地现有文件进行部署。您必须复制 RHCOS 虚拟硬盘(VHD)集群镜像,并将 bootstrap Ignition 配置文件存储在存储容器中,以便在部署过程中访问它们。

先决条件

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

流程

  1. 创建 Azure 存储帐户以存储 VHD 集群镜像:

    $ az storage account create -g ${RESOURCE_GROUP} --location ${AZURE_REGION} --name ${CLUSTER_NAME}sa --kind Storage --sku Standard_LRS
    警告

    Azure 存储帐户名称的长度必须在 3 到 24 个字符之,且只使用数字和小写字母。如果您的 CLUSTER_NAME 变量没有遵循这些限制,您必须手动定义 Azure 存储帐户名称。如需有关 Azure 存储帐户名称限制的更多信息,请参阅 Azure 文档中的解决存储帐户名称的错误

  2. 将存储帐户密钥导出为环境变量:

    $ export ACCOUNT_KEY=`az storage account keys list -g ${RESOURCE_GROUP} --account-name ${CLUSTER_NAME}sa --query "[0].value" -o tsv`
  3. 将 RHCOS VHD 的 URL 导出为环境变量:

    $ export VHD_URL=`openshift-install coreos print-stream-json | jq -r '.architectures.<architecture>."rhel-coreos-extensions"."azure-disk".url'`

    其中:

    <architecture>

    指定架构,有效值包括 x86_64aarch64

    重要

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

  4. 为 VHD 创建存储容器:

    $ az storage container create --name vhd --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY}
  5. 将本地 VHD 复制为一个 blob:

    $ az storage blob copy start --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} --destination-blob "rhcos.vhd" --destination-container vhd --source-uri "${VHD_URL}"
  6. 创建 blob 存储容器并上传生成的 bootstrap.ign 文件:

    $ az storage container create --name files --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY}
    $ az storage blob upload --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -f "<installation_directory>/bootstrap.ign" -n "bootstrap.ign"

4.3.11. 创建 DNS 区示例

使用用户置备的基础架构的集群需要 DNS 记录。您应该选择适合您的场景的 DNS 策略。

在本例中,使用了 Azure 的 DNS 解决方案,因此您将为外部(内部网络)可见性创建一个新的公共 DNS 区域,并为内部集群解析创建一个私有 DNS 区域。

注意

公共 DNS 区域不需要与集群部署位于同一个资源组中,且可能已在您的机构中为所需基域存在。如果情况如此,您可以跳过创建公共 DNS 区这一步 ; 请确定您之前生成的安装配置反映了这种情况。

流程

  1. BASE_DOMAIN_RESOURCE_GROUP 环境变量中导出的资源组中创建新的公共 DNS 区域:

    $ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n ${CLUSTER_NAME}.${BASE_DOMAIN}

    如果您使用的是公共 DNS 区域,可以跳过这一步。

  2. 在与这个部署的其余部分相同的资源组中创建私有 DNS 区域:

    $ az network private-dns zone create -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME}.${BASE_DOMAIN}

如需了解更多信息,请参阅在 Azure 中配置公共 DNS 的信息。

4.3.12. 在 Azure 中创建 VNet

您必须在 Microsoft Azure 中创建虚拟网络(VNet),供您的 OpenShift Container Platform 集群使用。您可以对 VNet 进行定制来满足您的要求。创建 VNet 的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 Azure 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

流程

  1. 复制 VNet 的 ARM 模板 一节中的模板,并将它以 01_vnet.json 保存到集群的安装目录中。此模板描述了集群所需的 VNet。
  2. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/01_vnet.json" \
      --parameters baseName="${INFRA_ID}"1
    1
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
  3. 将 VNet 模板链接到私有 DNS 区域:

    $ az network private-dns link vnet create -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n ${INFRA_ID}-network-link -v "${INFRA_ID}-vnet" -e false
4.3.12.1. VNet 的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 VPC:

例 4.49. 01_vnet.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(parameters('baseName'), '-vnet')]",
    "addressPrefix" : "10.0.0.0/16",
    "masterSubnetName" : "[concat(parameters('baseName'), '-master-subnet')]",
    "masterSubnetPrefix" : "10.0.0.0/24",
    "nodeSubnetName" : "[concat(parameters('baseName'), '-worker-subnet')]",
    "nodeSubnetPrefix" : "10.0.1.0/24",
    "clusterNsgName" : "[concat(parameters('baseName'), '-nsg')]"
  },
  "resources" : [
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/virtualNetworks",
      "name" : "[variables('virtualNetworkName')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[concat('Microsoft.Network/networkSecurityGroups/', variables('clusterNsgName'))]"
      ],
      "properties" : {
        "addressSpace" : {
          "addressPrefixes" : [
            "[variables('addressPrefix')]"
          ]
        },
        "subnets" : [
          {
            "name" : "[variables('masterSubnetName')]",
            "properties" : {
              "addressPrefix" : "[variables('masterSubnetPrefix')]",
              "serviceEndpoints": [],
              "networkSecurityGroup" : {
                "id" : "[resourceId('Microsoft.Network/networkSecurityGroups', variables('clusterNsgName'))]"
              }
            }
          },
          {
            "name" : "[variables('nodeSubnetName')]",
            "properties" : {
              "addressPrefix" : "[variables('nodeSubnetPrefix')]",
              "serviceEndpoints": [],
              "networkSecurityGroup" : {
                "id" : "[resourceId('Microsoft.Network/networkSecurityGroups', variables('clusterNsgName'))]"
              }
            }
          }
        ]
      }
    },
    {
      "type" : "Microsoft.Network/networkSecurityGroups",
      "name" : "[variables('clusterNsgName')]",
      "apiVersion" : "2018-10-01",
      "location" : "[variables('location')]",
      "properties" : {
        "securityRules" : [
          {
            "name" : "apiserver_in",
            "properties" : {
              "protocol" : "Tcp",
              "sourcePortRange" : "*",
              "destinationPortRange" : "6443",
              "sourceAddressPrefix" : "*",
              "destinationAddressPrefix" : "*",
              "access" : "Allow",
              "priority" : 101,
              "direction" : "Inbound"
            }
          }
        ]
      }
    }
  ]
}

4.3.13. 为 Azure 基础架构创建 RHCOS 集群镜像

您必须对 OpenShift Container Platform 节点的 Microsoft Azure 使用有效的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像。

先决条件

  • 将 RHCOS 虚拟硬盘(VHD)集群镜像存储在 Azure 存储容器中。
  • 在 Azure 存储容器中存储 bootstrap Ignition 配置文件。

流程

  1. 复制镜像存储的 ARM 模板 部分中的模板,并将它以 02_storage.json 保存到集群的安装目录中。此模板描述了集群所需的镜像存储。
  2. 以一个变量的形式将 RHCOS VHD blob URL 导出:

    $ export VHD_BLOB_URL=`az storage blob url --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c vhd -n "rhcos.vhd" -o tsv`
  3. 部署集群镜像

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/02_storage.json" \
      --parameters vhdBlobURL="${VHD_BLOB_URL}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameters storageAccount="${CLUSTER_NAME}sa" \ 3
      --parameters architecture="<architecture>" 4
    1
    用于创建 master 和 worker 机器的 RHCOS VHD 的 blob URL。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    Azure 存储帐户的名称。
    4
    指定系统架构。有效值为 x64 (默认)或 Arm64
4.3.13.1. 镜像存储的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的存储的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像:

例 4.50. 02_storage.json ARM 模板

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "architecture": {
      "type": "string",
      "metadata": {
        "description": "The architecture of the Virtual Machines"
      },
      "defaultValue": "x64",
      "allowedValues": [
        "Arm64",
        "x64"
      ]
    },
    "baseName": {
      "type": "string",
      "minLength": 1,
      "metadata": {
        "description": "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "storageAccount": {
      "type": "string",
      "metadata": {
        "description": "The Storage Account name"
      }
    },
    "vhdBlobURL": {
      "type": "string",
      "metadata": {
        "description": "URL pointing to the blob where the VHD to be used to create master and worker machines is located"
      }
    }
  },
  "variables": {
    "location": "[resourceGroup().location]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName": "[parameters('baseName')]",
    "imageNameGen2": "[concat(parameters('baseName'), '-gen2')]",
    "imageRelease": "1.0.0"
  },
  "resources": [
    {
      "apiVersion": "2021-10-01",
      "type": "Microsoft.Compute/galleries",
      "name": "[variables('galleryName')]",
      "location": "[variables('location')]",
      "resources": [
        {
          "apiVersion": "2021-10-01",
          "type": "images",
          "name": "[variables('imageName')]",
          "location": "[variables('location')]",
          "dependsOn": [
            "[variables('galleryName')]"
          ],
          "properties": {
            "architecture": "[parameters('architecture')]",
            "hyperVGeneration": "V1",
            "identifier": {
              "offer": "rhcos",
              "publisher": "RedHat",
              "sku": "basic"
            },
            "osState": "Generalized",
            "osType": "Linux"
          },
          "resources": [
            {
              "apiVersion": "2021-10-01",
              "type": "versions",
              "name": "[variables('imageRelease')]",
              "location": "[variables('location')]",
              "dependsOn": [
                "[variables('imageName')]"
              ],
              "properties": {
                "publishingProfile": {
                  "storageAccountType": "Standard_LRS",
                  "targetRegions": [
                    {
                      "name": "[variables('location')]",
                      "regionalReplicaCount": "1"
                    }
                  ]
                },
                "storageProfile": {
                  "osDiskImage": {
                    "source": {
                      "id": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccount'))]",
                      "uri": "[parameters('vhdBlobURL')]"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "apiVersion": "2021-10-01",
          "type": "images",
          "name": "[variables('imageNameGen2')]",
          "location": "[variables('location')]",
          "dependsOn": [
            "[variables('galleryName')]"
          ],
          "properties": {
            "architecture": "[parameters('architecture')]",
            "hyperVGeneration": "V2",
            "identifier": {
              "offer": "rhcos-gen2",
              "publisher": "RedHat-gen2",
              "sku": "gen2"
            },
            "osState": "Generalized",
            "osType": "Linux"
          },
          "resources": [
            {
              "apiVersion": "2021-10-01",
              "type": "versions",
              "name": "[variables('imageRelease')]",
              "location": "[variables('location')]",
              "dependsOn": [
                "[variables('imageNameGen2')]"
              ],
              "properties": {
                "publishingProfile": {
                  "storageAccountType": "Standard_LRS",
                  "targetRegions": [
                    {
                      "name": "[variables('location')]",
                      "regionalReplicaCount": "1"
                    }
                  ]
                },
                "storageProfile": {
                  "osDiskImage": {
                    "source": {
                      "id": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccount'))]",
                      "uri": "[parameters('vhdBlobURL')]"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    }
  ]
}

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

所有 Red Hat Enterprise Linux CoreOS(RHCOS)机器需要在启动过程中在 initramfs 中配置网络,以获取其 Ignition 配置文件。

4.3.14.1. 网络连接要求

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

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

重要

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

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

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

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

10250-10259

Kubernetes 保留的默认端口

UDP

4789

VXLAN

6081

Geneve

9000-9999

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

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

UDP 端口 123 上的网络时间协议 (NTP)

如果配置了外部 NTP 时间服务器,需要打开 UDP 端口 123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

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

TCP

6443

Kubernetes API

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

TCP

2379-2380

etcd 服务器和对等端口

4.3.15. 在 Azure 中创建网络和负载均衡组件

您必须在 Microsoft Azure 中配置网络和负载均衡,供您的 OpenShift Container Platform 集群使用。创建这些组件的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 Azure 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 在 Azure 中创建和配置 VNet 及相关子网。

流程

  1. 复制 网络和负载均衡器的 ARM 模板 一节中的模板,并将它以 03_infra.json 保存到集群的安装目录中。此模板描述了集群所需的网络和负载均衡对象。
  2. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/03_infra.json" \
      --parameters privateDNSZoneName="${CLUSTER_NAME}.${BASE_DOMAIN}" \ 1
      --parameters baseName="${INFRA_ID}"2
    1
    私有 DNS 区的名称。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
  3. 在公共区为 API 公共负载均衡器创建一个 api DNS 记录。${BASE_DOMAIN_RESOURCE_GROUP} 变量必须指向存在公共 DNS 区的资源组。

    1. 导出以下变量:

      $ export PUBLIC_IP=`az network public-ip list -g ${RESOURCE_GROUP} --query "[?name=='${INFRA_ID}-master-pip'] | [0].ipAddress" -o tsv`
    2. 在新的公共区中创建 api DNS 记录:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n api -a ${PUBLIC_IP} --ttl 60

      如果要将集群添加到现有的公共区,您可以在其中创建 api DNS 记录:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n api.${CLUSTER_NAME} -a ${PUBLIC_IP} --ttl 60
4.3.15.1. 网络和负载均衡器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的网络对象和负载均衡器:

例 4.51. 03_infra.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "privateDNSZoneName" : {
      "type" : "string",
      "metadata" : {
        "description" : "Name of the private DNS zone"
      }
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "masterSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-master-subnet')]",
    "masterSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('masterSubnetName'))]",
    "masterPublicIpAddressName" : "[concat(parameters('baseName'), '-master-pip')]",
    "masterPublicIpAddressID" : "[resourceId('Microsoft.Network/publicIPAddresses', variables('masterPublicIpAddressName'))]",
    "masterLoadBalancerName" : "[parameters('baseName')]",
    "masterLoadBalancerID" : "[resourceId('Microsoft.Network/loadBalancers', variables('masterLoadBalancerName'))]",
    "internalLoadBalancerName" : "[concat(parameters('baseName'), '-internal-lb')]",
    "internalLoadBalancerID" : "[resourceId('Microsoft.Network/loadBalancers', variables('internalLoadBalancerName'))]",
    "skuName": "Standard"
  },
  "resources" : [
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/publicIPAddresses",
      "name" : "[variables('masterPublicIpAddressName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "[variables('skuName')]"
      },
      "properties" : {
        "publicIPAllocationMethod" : "Static",
        "dnsSettings" : {
          "domainNameLabel" : "[variables('masterPublicIpAddressName')]"
        }
      }
    },
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/loadBalancers",
      "name" : "[variables('masterLoadBalancerName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "[variables('skuName')]"
      },
      "dependsOn" : [
        "[concat('Microsoft.Network/publicIPAddresses/', variables('masterPublicIpAddressName'))]"
      ],
      "properties" : {
        "frontendIPConfigurations" : [
          {
            "name" : "public-lb-ip-v4",
            "properties" : {
              "publicIPAddress" : {
                "id" : "[variables('masterPublicIpAddressID')]"
              }
            }
          }
        ],
        "backendAddressPools" : [
          {
            "name" : "[variables('masterLoadBalancerName')]"
          }
        ],
        "loadBalancingRules" : [
          {
            "name" : "api-internal",
            "properties" : {
              "frontendIPConfiguration" : {
                "id" :"[concat(variables('masterLoadBalancerID'), '/frontendIPConfigurations/public-lb-ip-v4')]"
              },
              "backendAddressPool" : {
                "id" : "[concat(variables('masterLoadBalancerID'), '/backendAddressPools/', variables('masterLoadBalancerName'))]"
              },
              "protocol" : "Tcp",
              "loadDistribution" : "Default",
              "idleTimeoutInMinutes" : 30,
              "frontendPort" : 6443,
              "backendPort" : 6443,
              "probe" : {
                "id" : "[concat(variables('masterLoadBalancerID'), '/probes/api-internal-probe')]"
              }
            }
          }
        ],
        "probes" : [
          {
            "name" : "api-internal-probe",
            "properties" : {
              "protocol" : "Https",
              "port" : 6443,
              "requestPath": "/readyz",
              "intervalInSeconds" : 10,
              "numberOfProbes" : 3
            }
          }
        ]
      }
    },
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/loadBalancers",
      "name" : "[variables('internalLoadBalancerName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "[variables('skuName')]"
      },
      "properties" : {
        "frontendIPConfigurations" : [
          {
            "name" : "internal-lb-ip",
            "properties" : {
              "privateIPAllocationMethod" : "Dynamic",
              "subnet" : {
                "id" : "[variables('masterSubnetRef')]"
              },
              "privateIPAddressVersion" : "IPv4"
            }
          }
        ],
        "backendAddressPools" : [
          {
            "name" : "internal-lb-backend"
          }
        ],
        "loadBalancingRules" : [
          {
            "name" : "api-internal",
            "properties" : {
              "frontendIPConfiguration" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/frontendIPConfigurations/internal-lb-ip')]"
              },
              "frontendPort" : 6443,
              "backendPort" : 6443,
              "enableFloatingIP" : false,
              "idleTimeoutInMinutes" : 30,
              "protocol" : "Tcp",
              "enableTcpReset" : false,
              "loadDistribution" : "Default",
              "backendAddressPool" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/backendAddressPools/internal-lb-backend')]"
              },
              "probe" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/probes/api-internal-probe')]"
              }
            }
          },
          {
            "name" : "sint",
            "properties" : {
              "frontendIPConfiguration" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/frontendIPConfigurations/internal-lb-ip')]"
              },
              "frontendPort" : 22623,
              "backendPort" : 22623,
              "enableFloatingIP" : false,
              "idleTimeoutInMinutes" : 30,
              "protocol" : "Tcp",
              "enableTcpReset" : false,
              "loadDistribution" : "Default",
              "backendAddressPool" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/backendAddressPools/internal-lb-backend')]"
              },
              "probe" : {
                "id" : "[concat(variables('internalLoadBalancerID'), '/probes/sint-probe')]"
              }
            }
          }
        ],
        "probes" : [
          {
            "name" : "api-internal-probe",
            "properties" : {
              "protocol" : "Https",
              "port" : 6443,
              "requestPath": "/readyz",
              "intervalInSeconds" : 10,
              "numberOfProbes" : 3
            }
          },
          {
            "name" : "sint-probe",
            "properties" : {
              "protocol" : "Https",
              "port" : 22623,
              "requestPath": "/healthz",
              "intervalInSeconds" : 10,
              "numberOfProbes" : 3
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2018-09-01",
      "type": "Microsoft.Network/privateDnsZones/A",
      "name": "[concat(parameters('privateDNSZoneName'), '/api')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[concat('Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'))]"
      ],
      "properties": {
        "ttl": 60,
        "aRecords": [
          {
            "ipv4Address": "[reference(variables('internalLoadBalancerName')).frontendIPConfigurations[0].properties.privateIPAddress]"
          }
        ]
      }
    },
    {
      "apiVersion": "2018-09-01",
      "type": "Microsoft.Network/privateDnsZones/A",
      "name": "[concat(parameters('privateDNSZoneName'), '/api-int')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[concat('Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'))]"
      ],
      "properties": {
        "ttl": 60,
        "aRecords": [
          {
            "ipv4Address": "[reference(variables('internalLoadBalancerName')).frontendIPConfigurations[0].properties.privateIPAddress]"
          }
        ]
      }
    }
  ]
}

4.3.16. 在 Azure 中创建 bootstrap 机器

您必须在 Microsoft Azure 中创建 bootstrap 机器,以便在 OpenShift Container Platform 集群初始化过程中使用。创建此机器的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 bootstrap 机器,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 在 Azure 中创建和配置联网及负载均衡器。
  • 创建 Azure 身份并授予适当的角色。

流程

  1. 复制 bootstrap 机器的 ARM 模板一节中的模板,并将它以 04_bootstrap.json 保存到集群的安装目录中。此模板描述了集群所需的 bootstrap 机器。
  2. 导出 bootstrap URL 变量:

    $ bootstrap_url_expiry=`date -u -d "10 hours" '+%Y-%m-%dT%H:%MZ'`
    $ export BOOTSTRAP_URL=`az storage blob generate-sas -c 'files' -n 'bootstrap.ign' --https-only --full-uri --permissions r --expiry $bootstrap_url_expiry --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -o tsv`
  3. 导出 bootstrap ignition 变量:

    $ export BOOTSTRAP_IGNITION=`jq -rcnM --arg v "3.2.0" --arg url ${BOOTSTRAP_URL} '{ignition:{version:$v,config:{replace:{source:$url}}}}' | base64 | tr -d '\n'`
  4. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/04_bootstrap.json" \
      --parameters bootstrapIgnition="${BOOTSTRAP_IGNITION}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameter bootstrapVMSize="Standard_D4s_v3" 3
    1
    bootstrap 集群的 bootstrap Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    可选:指定 bootstrap 虚拟机的大小。使用与指定架构兼容的虚拟机大小。如果未定义这个值,则会设置模板中的默认值。
4.3.16.1. bootstrap 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 bootstrap 机器:

例 4.52. 04_bootstrap.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "bootstrapIgnition" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Bootstrap ignition content for the bootstrap cluster"
      }
    },
    "sshKeyData" : {
      "type" : "securestring",
      "defaultValue" : "Unused",
      "metadata" : {
        "description" : "Unused"
      }
    },
    "bootstrapVMSize" : {
      "type" : "string",
      "defaultValue" : "Standard_D4s_v3",
      "metadata" : {
        "description" : "The size of the Bootstrap Virtual Machine"
      }
    },
    "hyperVGen": {
      "type": "string",
      "metadata": {
        "description": "VM generation image to use"
      },
      "defaultValue": "V2",
      "allowedValues": [
        "V1",
        "V2"
      ]
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "masterSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-master-subnet')]",
    "masterSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('masterSubnetName'))]",
    "masterLoadBalancerName" : "[parameters('baseName')]",
    "internalLoadBalancerName" : "[concat(parameters('baseName'), '-internal-lb')]",
    "sshKeyPath" : "/home/core/.ssh/authorized_keys",
    "identityName" : "[concat(parameters('baseName'), '-identity')]",
    "vmName" : "[concat(parameters('baseName'), '-bootstrap')]",
    "nicName" : "[concat(variables('vmName'), '-nic')]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName" : "[concat(parameters('baseName'), if(equals(parameters('hyperVGen'), 'V2'), '-gen2', ''))]",
    "clusterNsgName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-nsg')]",
    "sshPublicIpAddressName" : "[concat(variables('vmName'), '-ssh-pip')]"
  },
  "resources" : [
    {
      "apiVersion" : "2018-12-01",
      "type" : "Microsoft.Network/publicIPAddresses",
      "name" : "[variables('sshPublicIpAddressName')]",
      "location" : "[variables('location')]",
      "sku": {
        "name": "Standard"
      },
      "properties" : {
        "publicIPAllocationMethod" : "Static",
        "dnsSettings" : {
          "domainNameLabel" : "[variables('sshPublicIpAddressName')]"
        }
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Network/networkInterfaces",
      "name" : "[variables('nicName')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[resourceId('Microsoft.Network/publicIPAddresses', variables('sshPublicIpAddressName'))]"
      ],
      "properties" : {
        "ipConfigurations" : [
          {
            "name" : "pipConfig",
            "properties" : {
              "privateIPAllocationMethod" : "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('sshPublicIpAddressName'))]"
              },
              "subnet" : {
                "id" : "[variables('masterSubnetRef')]"
              },
              "loadBalancerBackendAddressPools" : [
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('masterLoadBalancerName'), '/backendAddressPools/', variables('masterLoadBalancerName'))]"
                },
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'), '/backendAddressPools/internal-lb-backend')]"
                }
              ]
            }
          }
        ]
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Compute/virtualMachines",
      "name" : "[variables('vmName')]",
      "location" : "[variables('location')]",
      "identity" : {
        "type" : "userAssigned",
        "userAssignedIdentities" : {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('identityName'))]" : {}
        }
      },
      "dependsOn" : [
        "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
      ],
      "properties" : {
        "hardwareProfile" : {
          "vmSize" : "[parameters('bootstrapVMSize')]"
        },
        "osProfile" : {
          "computerName" : "[variables('vmName')]",
          "adminUsername" : "core",
          "adminPassword" : "NotActuallyApplied!",
          "customData" : "[parameters('bootstrapIgnition')]",
          "linuxConfiguration" : {
            "disablePasswordAuthentication" : false
          }
        },
        "storageProfile" : {
          "imageReference": {
            "id": "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('imageName'))]"
          },
          "osDisk" : {
            "name": "[concat(variables('vmName'),'_OSDisk')]",
            "osType" : "Linux",
            "createOption" : "FromImage",
            "managedDisk": {
              "storageAccountType": "Premium_LRS"
            },
            "diskSizeGB" : 100
          }
        },
        "networkProfile" : {
          "networkInterfaces" : [
            {
              "id" : "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
            }
          ]
        }
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type": "Microsoft.Network/networkSecurityGroups/securityRules",
      "name" : "[concat(variables('clusterNsgName'), '/bootstrap_ssh_in')]",
      "location" : "[variables('location')]",
      "dependsOn" : [
        "[resourceId('Microsoft.Compute/virtualMachines', variables('vmName'))]"
      ],
      "properties": {
        "protocol" : "Tcp",
        "sourcePortRange" : "*",
        "destinationPortRange" : "22",
        "sourceAddressPrefix" : "*",
        "destinationAddressPrefix" : "*",
        "access" : "Allow",
        "priority" : 100,
        "direction" : "Inbound"
      }
    }
  ]
}

4.3.17. 在 Azure 中创建 control plane 机器

您必须在 Microsoft Azure 中创建 control plane 机器,供您的集群使用。创建这些机器的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

默认情况下,Microsoft Azure 将 control plane 机器和计算机器放在预先设置的可用区中。您可以为计算节点或 control plane 节点手动设置可用区。要做到这一点,通过在虚拟机资源的 zones 参数中指定每个可用区来修改供应商的 Azure Resource Manager (ARM) 模板。

如果不使用提供的 ARM 模板来创建 control plane 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。

先决条件

  • 创建 bootstrap 机器。

流程

  1. 复制 control plane 机器的 ARM 模板 一节中的模板,并将它以 05_masters.json 保存到集群的安装目录中。此模板描述了集群所需的 control plane 机器。
  2. 导出 control plane 机器部署所需的以下变量:

    $ export MASTER_IGNITION=`cat <installation_directory>/master.ign | base64 | tr -d '\n'`
  3. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/05_masters.json" \
      --parameters masterIgnition="${MASTER_IGNITION}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameters masterVMSize="Standard_D8s_v3" 3
    1
    control plane 节点的 Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    可选:指定 Control Plane 虚拟机的大小。使用与指定架构兼容的虚拟机大小。如果未定义这个值,则会设置模板中的默认值。
4.3.17.1. control plane 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 control plane 机器:

例 4.53. 05_masters.json ARM 模板

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "masterIgnition" : {
      "type" : "string",
      "metadata" : {
        "description" : "Ignition content for the master nodes"
      }
    },
    "numberOfMasters" : {
      "type" : "int",
      "defaultValue" : 3,
      "minValue" : 2,
      "maxValue" : 30,
      "metadata" : {
        "description" : "Number of OpenShift masters to deploy"
      }
    },
    "sshKeyData" : {
      "type" : "securestring",
      "defaultValue" : "Unused",
      "metadata" : {
        "description" : "Unused"
      }
    },
    "privateDNSZoneName" : {
      "type" : "string",
      "defaultValue" : "",
      "metadata" : {
        "description" : "unused"
      }
    },
    "masterVMSize" : {
      "type" : "string",
      "defaultValue" : "Standard_D8s_v3",
      "metadata" : {
        "description" : "The size of the Master Virtual Machines"
      }
    },
    "diskSizeGB" : {
      "type" : "int",
      "defaultValue" : 1024,
      "metadata" : {
        "description" : "Size of the Master VM OS disk, in GB"
      }
    },
    "hyperVGen": {
      "type": "string",
      "metadata": {
        "description": "VM generation image to use"
      },
      "defaultValue": "V2",
      "allowedValues": [
        "V1",
        "V2"
      ]
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "masterSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-master-subnet')]",
    "masterSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('masterSubnetName'))]",
    "masterLoadBalancerName" : "[parameters('baseName')]",
    "internalLoadBalancerName" : "[concat(parameters('baseName'), '-internal-lb')]",
    "sshKeyPath" : "/home/core/.ssh/authorized_keys",
    "identityName" : "[concat(parameters('baseName'), '-identity')]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName" : "[concat(parameters('baseName'), if(equals(parameters('hyperVGen'), 'V2'), '-gen2', ''))]",
    "copy" : [
      {
        "name" : "vmNames",
        "count" :  "[parameters('numberOfMasters')]",
        "input" : "[concat(parameters('baseName'), '-master-', copyIndex('vmNames'))]"
      }
    ]
  },
  "resources" : [
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Network/networkInterfaces",
      "copy" : {
        "name" : "nicCopy",
        "count" : "[length(variables('vmNames'))]"
      },
      "name" : "[concat(variables('vmNames')[copyIndex()], '-nic')]",
      "location" : "[variables('location')]",
      "properties" : {
        "ipConfigurations" : [
          {
            "name" : "pipConfig",
            "properties" : {
              "privateIPAllocationMethod" : "Dynamic",
              "subnet" : {
                "id" : "[variables('masterSubnetRef')]"
              },
              "loadBalancerBackendAddressPools" : [
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('masterLoadBalancerName'), '/backendAddressPools/', variables('masterLoadBalancerName'))]"
                },
                {
                  "id" : "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('internalLoadBalancerName'), '/backendAddressPools/internal-lb-backend')]"
                }
              ]
            }
          }
        ]
      }
    },
    {
      "apiVersion" : "2018-06-01",
      "type" : "Microsoft.Compute/virtualMachines",
      "copy" : {
        "name" : "vmCopy",
        "count" : "[length(variables('vmNames'))]"
      },
      "name" : "[variables('vmNames')[copyIndex()]]",
      "location" : "[variables('location')]",
      "identity" : {
        "type" : "userAssigned",
        "userAssignedIdentities" : {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('identityName'))]" : {}
        }
      },
      "dependsOn" : [
        "[concat('Microsoft.Network/networkInterfaces/', concat(variables('vmNames')[copyIndex()], '-nic'))]"
      ],
      "properties" : {
        "hardwareProfile" : {
          "vmSize" : "[parameters('masterVMSize')]"
        },
        "osProfile" : {
          "computerName" : "[variables('vmNames')[copyIndex()]]",
          "adminUsername" : "core",
          "adminPassword" : "NotActuallyApplied!",
          "customData" : "[parameters('masterIgnition')]",
          "linuxConfiguration" : {
            "disablePasswordAuthentication" : false
          }
        },
        "storageProfile" : {
          "imageReference": {
            "id": "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('imageName'))]"
          },
          "osDisk" : {
            "name": "[concat(variables('vmNames')[copyIndex()], '_OSDisk')]",
            "osType" : "Linux",
            "createOption" : "FromImage",
            "caching": "ReadOnly",
            "writeAcceleratorEnabled": false,
            "managedDisk": {
              "storageAccountType": "Premium_LRS"
            },
            "diskSizeGB" : "[parameters('diskSizeGB')]"
          }
        },
        "networkProfile" : {
          "networkInterfaces" : [
            {
              "id" : "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('vmNames')[copyIndex()], '-nic'))]",
              "properties": {
                "primary": false
              }
            }
          ]
        }
      }
    }
  ]
}

4.3.18. 等待 bootstrap 完成并删除 Azure 中的 bootstrap 资源

在 Microsoft Azure 中创建所有所需的基础架构后,请等待您通过安装程序生成的 Ignition 配置文件所置备的机器上完成 bootstrap 过程。

先决条件

  • 创建 control plane 机器。

流程

  1. 进入包含安装程序的目录并运行以下命令:

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

    如果命令退出时没有 FATAL 警告,则您的生产环境 control plane 已被初始化。

  2. 删除 bootstrap 资源:

    $ az network nsg rule delete -g ${RESOURCE_GROUP} --nsg-name ${INFRA_ID}-nsg --name bootstrap_ssh_in
    $ az vm stop -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap
    $ az vm deallocate -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap
    $ az vm delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap --yes
    $ az disk delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap_OSDisk --no-wait --yes
    $ az network nic delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-nic --no-wait
    $ az storage blob delete --account-key ${ACCOUNT_KEY} --account-name ${CLUSTER_NAME}sa --container-name files --name bootstrap.ign
    $ az network public-ip delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-ssh-pip
注意

如果没有删除 bootstrap 服务器,因为 API 流量会路由到 bootstrap 服务器,所以安装可能无法成功。

4.3.19. 在 Azure 中创建额外的 worker 机器

您可以通过分散启动各个实例或利用集群外自动化流程(如自动缩放组),在 Microsoft Azure 中为您的集群创建 worker 机器。您还可以利用 OpenShift Container Platform 中的内置集群扩展机制和机器 API。

注意

如果您要安装三节点集群,请跳过这一步。三节点集群包含三个 control plane 机器,它们也可以充当计算机器。

在本例中,您要使用 Azure Resource Manager(ARM)模板手动启动一个实例。通过在 文件中包括类型为 06_workers.json 的其他资源,即可启动其他实例。

注意

默认情况下,Microsoft Azure 将 control plane 机器和计算机器放在预先设置的可用区中。您可以为计算节点或 control plane 节点手动设置可用区。要做到这一点,通过在虚拟机资源的 zones 参数中指定每个可用区来修改供应商的 ARM 模板。

如果不使用提供的 ARM 模板来创建 control plane 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。

流程

  1. 复制 worker 机器的 ARM 模板一节中的模板,并将它以 06_workers.json 保存到集群的安装目录中。此模板描述了集群所需的 worker 机器。
  2. 导出 worker 机器部署所需的以下变量:

    $ export WORKER_IGNITION=`cat <installation_directory>/worker.ign | base64 | tr -d '\n'`
  3. 使用 az CLI 创建部署:

    $ az deployment group create -g ${RESOURCE_GROUP} \
      --template-file "<installation_directory>/06_workers.json" \
      --parameters workerIgnition="${WORKER_IGNITION}" \ 1
      --parameters baseName="${INFRA_ID}" \ 2
      --parameters nodeVMSize="Standard_D4s_v3" 3
    1
    worker 节点的 Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。
    3
    可选:指定计算节点虚拟机的大小。使用与指定架构兼容的虚拟机大小。如果未定义这个值,则会设置模板中的默认值。
4.3.19.1. worker 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 worker 机器:

例 4.54. 06_workers.json ARM template

{
  "$schema" : "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion" : "1.0.0.0",
  "parameters" : {
    "baseName" : {
      "type" : "string",
      "minLength" : 1,
      "metadata" : {
        "description" : "Base name to be used in resource names (usually the cluster's Infra ID)"
      }
    },
    "vnetBaseName": {
      "type": "string",
      "defaultValue": "",
      "metadata" : {
        "description" : "The specific customer vnet's base name (optional)"
      }
    },
    "workerIgnition" : {
      "type" : "string",
      "metadata" : {
        "description" : "Ignition content for the worker nodes"
      }
    },
    "numberOfNodes" : {
      "type" : "int",
      "defaultValue" : 3,
      "minValue" : 2,
      "maxValue" : 30,
      "metadata" : {
        "description" : "Number of OpenShift compute nodes to deploy"
      }
    },
    "sshKeyData" : {
      "type" : "securestring",
      "defaultValue" : "Unused",
      "metadata" : {
        "description" : "Unused"
      }
    },
    "nodeVMSize" : {
      "type" : "string",
      "defaultValue" : "Standard_D4s_v3",
      "metadata" : {
        "description" : "The size of the each Node Virtual Machine"
      }
    },
    "hyperVGen": {
      "type": "string",
      "metadata": {
        "description": "VM generation image to use"
      },
      "defaultValue": "V2",
      "allowedValues": [
        "V1",
        "V2"
      ]
    }
  },
  "variables" : {
    "location" : "[resourceGroup().location]",
    "virtualNetworkName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-vnet')]",
    "virtualNetworkID" : "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]",
    "nodeSubnetName" : "[concat(if(not(empty(parameters('vnetBaseName'))), parameters('vnetBaseName'), parameters('baseName')), '-worker-subnet')]",
    "nodeSubnetRef" : "[concat(variables('virtualNetworkID'), '/subnets/', variables('nodeSubnetName'))]",
    "infraLoadBalancerName" : "[parameters('baseName')]",
    "sshKeyPath" : "/home/capi/.ssh/authorized_keys",
    "identityName" : "[concat(parameters('baseName'), '-identity')]",
    "galleryName": "[concat('gallery_', replace(parameters('baseName'), '-', '_'))]",
    "imageName" : "[concat(parameters('baseName'), if(equals(parameters('hyperVGen'), 'V2'), '-gen2', ''))]",
    "copy" : [
      {
        "name" : "vmNames",
        "count" :  "[parameters('numberOfNodes')]",
        "input" : "[concat(parameters('baseName'), '-worker-', variables('location'), '-', copyIndex('vmNames', 1))]"
      }
    ]
  },
  "resources" : [
    {
      "apiVersion" : "2019-05-01",
      "name" : "[concat('node', copyIndex())]",
      "type" : "Microsoft.Resources/deployments",
      "copy" : {
        "name" : "nodeCopy",
        "count" : "[length(variables('vmNames'))]"
      },
      "properties" : {
        "mode" : "Incremental",
        "template" : {
          "$schema" : "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion" : "1.0.0.0",
          "resources" : [
            {
              "apiVersion" : "2018-06-01",
              "type" : "Microsoft.Network/networkInterfaces",
              "name" : "[concat(variables('vmNames')[copyIndex()], '-nic')]",
              "location" : "[variables('location')]",
              "properties" : {
                "ipConfigurations" : [
                  {
                    "name" : "pipConfig",
                    "properties" : {
                      "privateIPAllocationMethod" : "Dynamic",
                      "subnet" : {
                        "id" : "[variables('nodeSubnetRef')]"
                      }
                    }
                  }
                ]
              }
            },
            {
              "apiVersion" : "2018-06-01",
              "type" : "Microsoft.Compute/virtualMachines",
              "name" : "[variables('vmNames')[copyIndex()]]",
              "location" : "[variables('location')]",
              "tags" : {
                "kubernetes.io-cluster-ffranzupi": "owned"
              },
              "identity" : {
                "type" : "userAssigned",
                "userAssignedIdentities" : {
                  "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', variables('identityName'))]" : {}
                }
              },
              "dependsOn" : [
                "[concat('Microsoft.Network/networkInterfaces/', concat(variables('vmNames')[copyIndex()], '-nic'))]"
              ],
              "properties" : {
                "hardwareProfile" : {
                  "vmSize" : "[parameters('nodeVMSize')]"
                },
                "osProfile" : {
                  "computerName" : "[variables('vmNames')[copyIndex()]]",
                  "adminUsername" : "capi",
                  "adminPassword" : "NotActuallyApplied!",
                  "customData" : "[parameters('workerIgnition')]",
                  "linuxConfiguration" : {
                    "disablePasswordAuthentication" : false
                  }
                },
                "storageProfile" : {
                  "imageReference": {
                    "id": "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('imageName'))]"
                  },
                  "osDisk" : {
                    "name": "[concat(variables('vmNames')[copyIndex()],'_OSDisk')]",
                    "osType" : "Linux",
                    "createOption" : "FromImage",
                    "managedDisk": {
                      "storageAccountType": "Premium_LRS"
                    },
                    "diskSizeGB": 128
                  }
                },
                "networkProfile" : {
                  "networkInterfaces" : [
                    {
                      "id" : "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('vmNames')[copyIndex()], '-nic'))]",
                      "properties": {
                        "primary": true
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    }
  ]
}

4.3.20. 安装 OpenShift CLI

您可以安装 OpenShift CLI(oc)来使用命令行界面与 OpenShift Container Platform 进行交互。您可以在 Linux、Windows 或 macOS 上安装 oc

重要

如果安装了旧版本的 oc,则可能无法使用 OpenShift Container Platform 4.17 中的所有命令。下载并安装新版本的 oc

在 Linux 上安装 OpenShift CLI

您可以按照以下流程在 Linux 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 产品变体 下拉列表中选择架构。
  3. 版本 下拉列表中选择适当的版本。
  4. OpenShift v4.17 Linux Clients 条目旁的 Download Now 来保存文件。
  5. 解包存档:

    $ tar xvf <file>
  6. oc 二进制文件放到 PATH 中的目录中

    要查看您的 PATH,请执行以下命令:

    $ echo $PATH

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    $ oc <command>
在 Windows 上安装 OpenShift CLI

您可以按照以下流程在 Windows 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 Windows Client 条目旁的 Download Now 来保存文件。
  4. 使用 ZIP 程序解压存档。
  5. oc 二进制文件移到 PATH 中的目录中

    要查看您的 PATH,请打开命令提示并执行以下命令:

    C:\> path

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    C:\> oc <command>
在 macOS 上安装 OpenShift CLI

您可以按照以下流程在 macOS 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.17 macOS Clients 条目旁的 Download Now 来保存文件。

    注意

    对于 macOS arm64,请选择 OpenShift v4.17 macOS arm64 Client 条目。

  4. 解包和解压存档。
  5. oc 二进制文件移到 PATH 的目录中。

    要查看您的 PATH,请打开终端并执行以下命令:

    $ echo $PATH

验证

  • 使用 oc 命令验证安装:

    $ oc <command>

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

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

当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(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 被批准前,前面的输出可能不包括计算节点(也称为 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.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 状态

附加信息

4.3.23. 添加 Ingress DNS 记录

如果在创建 Kubernetes 清单并生成 Ignition 配置时删除了 DNS 区配置,您必须手动创建指向 Ingress 负载均衡器的 DNS 记录。您可以创建一个通配符 *.apps.{baseDomain}. 或特定的记录。您可以根据要求使用 A、CNAME 和其他记录。

先决条件

  • 已使用您置备的基础架构在 Microsoft Azure 上安装了 OpenShift Container Platform 集群。
  • 安装 OpenShift CLI(oc)。
  • 安装或更新 Azure CLI

流程

  1. 确认 Ingress 路由器已创建了负载均衡器并填充 EXTERNAL-IP 字段:

    $ oc -n openshift-ingress get service router-default

    输出示例

    NAME             TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
    router-default   LoadBalancer   172.30.20.10   35.130.120.110   80:32288/TCP,443:31215/TCP   20

  2. 将 Ingress 路由器 IP 导出作为变量:

    $ export PUBLIC_IP_ROUTER=`oc -n openshift-ingress get service router-default --no-headers | awk '{print $4}'`
  3. 在公共 DNS 区域中添加 *.apps 记录。

    1. 如果您要将此集群添加到新的公共区,请运行:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n *.apps -a ${PUBLIC_IP_ROUTER} --ttl 300
    2. 如果您要将此集群添加到已经存在的公共区中,请运行:

      $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n *.apps.${CLUSTER_NAME} -a ${PUBLIC_IP_ROUTER} --ttl 300
  4. 在私有 DNS 区域中添加 *.apps 记录:

    1. 使用以下命令创建 *.apps 记录:

      $ az network private-dns record-set a create -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n *.apps --ttl 300
    2. 使用以下命令在专用 DNS 区域中添加 *.apps 记录:

      $ az network private-dns record-set a add-record -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n *.apps -a ${PUBLIC_IP_ROUTER}

如果需要添加特定域而不使用通配符,可以为集群的每个当前路由创建条目:

$ oc get --all-namespaces -o jsonpath='{range .items[*]}{range .status.ingress[*]}{.host}{"\n"}{end}{end}' routes

输出示例

oauth-openshift.apps.cluster.basedomain.com
console-openshift-console.apps.cluster.basedomain.com
downloads-openshift-console.apps.cluster.basedomain.com
alertmanager-main-openshift-monitoring.apps.cluster.basedomain.com
prometheus-k8s-openshift-monitoring.apps.cluster.basedomain.com

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

在 Microsoft Azure 用户置备的基础架构上启动 OpenShift Container Platform 安装后,您可以监控集群事件,直到集群就绪可用。

先决条件

  • 在用户置备的 Azure 基础架构上为 OpenShift Container Platform 集群部署 bootstrap 机器。
  • 安装 oc CLI 并登录。

流程

  • 完成集群安装:

    $ ./openshift-install --dir <installation_directory> wait-for install-complete 1

    输出示例

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

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

4.3.25. OpenShift Container Platform 的 Telemetry 访问

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

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

其他资源

第 5 章 在 Azure 上安装三节点集群

在 OpenShift Container Platform 版本 4.17 中,您可以在 Microsoft Azure 上安装三节点集群。三节点集群包含三个 control plane 机器,它们也可以充当计算机器。这种类型的集群提供了一个较小的、效率更高的集群,供集群管理员和开发人员用于测试、开发和生产。

您可以使用安装程序置备或用户置备的基础架构安装三节点集群。

注意

不支持使用 Azure Marketplace 镜像部署三节点集群。

5.1. 配置三节点集群

在部署集群前,您可以通过将 install-config.yaml 文件中的 worker 节点数量设置为 0 来配置三节点集群。将 worker 节点数量设置为 0 可确保 control plane 机器可以调度。这允许调度应用程序工作负载从 control plane 节点运行。

注意

因为应用程序工作负载从 control plane 节点运行,所以需要额外的订阅,因为 control plane 节点被视为计算节点。

先决条件

  • 您有一个现有的 install-config.yaml 文件。

流程

  1. install-config.yaml 文件中的计算副本数量设置为 0,如以下 compute 小节中所示:

    三节点集群的 install-config.yaml 文件示例

    apiVersion: v1
    baseDomain: example.com
    compute:
    - name: worker
      platform: {}
      replicas: 0
    # ...

  2. 如果您使用用户置备的基础架构部署集群:

    • 创建 Kubernetes 清单文件后,请确保在 cluster-scheduler-02-config.yml 文件中将 spec.mastersSchedulable 参数设置为 true。您可以在 <installation_directory>/manifests 中找到此文件。如需更多信息,请参阅"使用 ARM 模板在 Azure 上安装集群"中的"创建 Kubernetes 清单和 Ignition 配置文件"。
    • 不要创建额外的 worker 节点。

三节点集群的 cluster-scheduler-02-config.yml 文件示例

apiVersion: config.openshift.io/v1
kind: Scheduler
metadata:
  creationTimestamp: null
  name: cluster
spec:
  mastersSchedulable: true
  policy:
    name: ""
status: {}

5.2. 后续步骤

第 6 章 在 Azure 上卸载集群

您可以删除部署到 Microsoft Azure 的集群。

6.1. 删除使用安装程序置备的基础架构的集群

您可以从云中删除使用安装程序置备的基础架构的集群。

注意

卸载后,检查云供应商是否有未正确删除的资源,特别是在用户置备基础架构(UPI)集群中。可能存在安装程序未创建或安装程序无法访问的资源。

先决条件

  • 有用于部署集群的安装程序副本。
  • 有创建集群时安装程序生成的文件。

流程

  1. 在用来安装集群的计算机中包含安装程序的目录中,运行以下命令:

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

    您必须为集群指定包含集群定义文件的目录。安装程序需要此目录中的 metadata.json 文件来删除集群。

  2. 可选:删除 <installation_directory> 目录和 OpenShift Container Platform 安装程序。

6.2. 使用 Cloud Credential Operator 实用程序删除 Microsoft Azure 资源

卸载使用在集群外管理的短期凭证的 OpenShift Container Platform 集群后,您可以使用 CCO 实用程序 (ccoctl) 删除 ccoctl 在安装过程中创建的 Microsoft Azure (Azure)资源。

先决条件

  • 提取并准备 ccoctl 二进制文件。
  • 在 Azure 上卸载使用短期凭证的 OpenShift Container Platform 集群。

流程

  • 运行以下命令,删除 ccoctl 创建的 Azure 资源:

    $ ccoctl azure delete \
      --name=<name> \1
      --region=<azure_region> \2
      --subscription-id=<azure_subscription_id> \3
      --delete-oidc-resource-group
    1
    <name> 与最初用于创建和标记云资源的名称匹配。
    2
    <azure_region> 是要删除云资源的 Azure 区域。
    3
    <azure_subscription_id> 是要删除云资源的 Azure 订阅 ID。

验证

  • 要验证资源是否已删除,请查询 Azure。如需更多信息,请参阅 Azure 文档。

第 7 章 Azure 的安装配置参数

在 Microsoft Azure 上部署 OpenShift Container Platform 集群前,您可以提供参数来自定义集群以及托管它的平台。在创建 install-config.yaml 文件时,您可以通过命令行为所需参数提供值。然后,您可以修改 install-config.yaml 文件以进一步自定义集群。

7.1. Azure 可用的安装配置参数

下表指定您可以在安装过程中设置所需的、可选和特定于 Azure 的安装配置参数。

注意

安装后,您无法在 install-config.yaml 文件中修改这些参数。

7.1.1. 所需的配置参数

下表描述了所需的安装配置参数:

表 7.1. 所需的参数
参数描述
apiVersion:

install-config.yaml 内容的 API 版本。当前版本为 v1。安装程序可能还支持旧的 API 版本。

字符串

baseDomain:

云供应商的基域。基域用于创建到 OpenShift Container Platform 集群组件的路由。集群的完整 DNS 名称是 baseDomainmetadata.name 参数值的组合,其格式为 <metadata.name>.<baseDomain>

完全限定域名或子域名,如 example.com

metadata:

Kubernetes 资源 ObjectMeta,其中只消耗 name 参数。

对象

metadata:
  name:

集群的名称。集群的 DNS 记录是 {{.metadata.name}}.{{.baseDomain}} 的子域。

小写字母、连字符(-)和句点(.)字符串,如 dev

platform:

对于特定平台的配置取决于执行安装的环境: aws, baremetal, azure, gcp, ibmcloud, nutanix, openstack, powervs, vsphere, 或 {}.有关 platform.<platform> 参数的更多信息,请参考下表中您的特定平台。

对象

pullSecret:

从 Red Hat OpenShift Cluster Manager 获取 pull secret,验证从 Quay.io 等服务中下载 OpenShift Container Platform 组件的容器镜像。

{
   "auths":{
      "cloud.openshift.com":{
         "auth":"b3Blb=",
         "email":"you@example.com"
      },
      "quay.io":{
         "auth":"b3Blb=",
         "email":"you@example.com"
      }
   }
}

7.1.2. 网络配置参数

您可以根据现有网络基础架构的要求自定义安装配置。例如,您可以扩展集群网络的 IP 地址块,或者提供不同于默认值的不同 IP 地址块。

仅支持 IPv4 地址。

表 7.2. 网络参数
参数描述
networking:

集群网络的配置。

对象

注意

您无法在安装后修改 网络 对象指定的参数。

networking:
  networkType:

要安装的 Red Hat OpenShift Networking 网络插件。

OVNKubernetesOVNKubernetes 是 Linux 网络和包含 Linux 和 Windows 服务器的混合网络的 CNI 插件。默认值为 OVNKubernetes

networking:
  clusterNetwork:

pod 的 IP 地址块。

默认值为 10.128.0.0/14,主机前缀为 /23

如果您指定了多个 IP 地址块,块不得重叠。

对象数组。例如:

networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
networking:
  clusterNetwork:
    cidr:

使用 networking.clusterNetwork 时需要此项。IP 地址块。

IPv4 网络。

无类别域间路由(CIDR)表示法中的 IP 地址块。IPv4 块的前缀长度介于 0 到 32 之间

networking:
  clusterNetwork:
    hostPrefix:

分配给每个节点的子网前缀长度。例如,如果 hostPrefix 设为 23,则每个节点从 given cidr 中分配 a /23 子网。hostPrefix23 提供 510(2^(32 - 23)- 2)pod IP 地址。

子网前缀。

默认值为 23

networking:
  serviceNetwork:

服务的 IP 地址块。默认值为 172.30.0.0/16

OVN-Kubernetes 网络插件只支持服务网络的一个 IP 地址块。

CIDR 格式具有 IP 地址块的数组。例如:

networking:
  serviceNetwork:
   - 172.30.0.0/16
networking:
  machineNetwork:

机器的 IP 地址块。

如果您指定了多个 IP 地址块,块不得重叠。

对象数组。例如:

networking:
  machineNetwork:
  - cidr: 10.0.0.0/16
networking:
  machineNetwork:
    cidr:

使用 networking.machineNetwork 时需要此项。IP 地址块。对于 libvirt 和 IBM Power® Virtual Server 以外的所有平台,默认值为 10.0.0.0/16。对于 libvirt,默认值 为 192.168.126.0/24。对于 IBM Power® Virtual Server,默认值为 192.168.0.0/24

CIDR 表示法中的 IP 网络块。

例如: 10.0.0.0/16

注意

networking.machineNetwork 设置为与首选 NIC 所在的 CIDR 匹配。

7.1.3. 可选的配置参数

下表描述了可选的安装配置参数:

表 7.3. 可选参数
参数描述
additionalTrustBundle:

添加到节点可信证书存储中的 PEM 编码 X.509 证书捆绑包。配置了代理时,也可以使用此信任捆绑包。

字符串

capabilities:

控制可选核心组件的安装。您可以通过禁用可选组件来减少 OpenShift Container Platform 集群的空间。如需更多信息,请参阅安装中的"集群功能"页面。

字符串数组

capabilities:
  baselineCapabilitySet:

选择要启用的一组初始可选功能。有效值为 Nonev4.11v4.12vCurrent。默认值为 vCurrent

字符串

capabilities:
  additionalEnabledCapabilities:

将可选功能集合扩展到您在 baselineCapabilitySet 中指定的范围。您可以在此参数中指定多个功能。

字符串数组

cpuPartitioningMode:

启用工作负载分区,它会隔离 OpenShift Container Platform 服务、集群管理工作负载和基础架构 pod,以便在保留的一组 CPU 上运行。工作负载分区只能在安装过程中启用,且在安装后无法禁用。虽然此字段启用工作负载分区,但它不会将工作负载配置为使用特定的 CPU。如需更多信息,请参阅 Scalability and Performance 部分中的 Workload partitioning 页面。

NoneAllNodes.None 是默认值。

compute:

组成计算节点的机器的配置。

MachinePool 对象的数组。

compute:
  architecture:

决定池中机器的指令集合架构。目前,不支持具有不同架构的集群。所有池都必须指定相同的架构。有效值为 amd64arm64。并非所有安装选项都支持 64 位 ARM 架构。要验证您的平台上是否支持您的安装选项,请参阅 选择集群安装方法并为用户准备它中的不同平台支持的安装方法

字符串

compute:
  hyperthreading:

是否在计算机器上启用或禁用并发多 线程或超线程。默认情况下,启用并发多线程以提高机器内核的性能。

重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。

enabledDisabled

compute:
  name:

使用 compute 时需要此项。机器池的名称。

worker

compute:
  platform:

使用 compute 时需要此项。使用此参数指定托管 worker 机器的云供应商。此参数值必须与 controlPlane.platform 参数值匹配。

aws, azure, gcp, ibmcloud, nutanix, openstack, powervs, vsphere, 或 {}

compute:
  replicas:

要置备的计算机器数量,也称为 worker 机器。

大于或等于 2 的正整数。默认值为 3

featureSet:

为功能集启用集群。功能集是 OpenShift Container Platform 功能的集合,默认情况下不启用。有关在安装过程中启用功能集的更多信息,请参阅"使用功能门启用功能"。

字符串.要启用的功能集的名称,如 TechPreviewNoUpgrade

controlPlane:

组成 control plane 的机器的配置。

MachinePool 对象的数组。

controlPlane:
  architecture:

决定池中机器的指令集合架构。目前,不支持具有不同架构的集群。所有池都必须指定相同的架构。有效值为 amd64arm64。并非所有安装选项都支持 64 位 ARM 架构。要验证您的平台上是否支持您的安装选项,请参阅 选择集群安装方法并为用户准备它中的不同平台支持的安装方法

字符串

controlPlane:
  hyperthreading:

是否在 control plane 机器上启用或禁用并发多 线程或超线程。默认情况下,启用并发多线程以提高机器内核的性能。

重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。

enabledDisabled

controlPlane:
  name:

使用 controlPlane 时需要此项。机器池的名称。

master

controlPlane:
  platform:

使用 controlPlane 时需要此项。使用此参数指定托管 control plane 机器的云供应商。此参数值必须与 compute.platform 参数值匹配。

aws, azure, gcp, ibmcloud, nutanix, openstack, powervs, vsphere, 或 {}

controlPlane:
  replicas:

要置备的 control plane 机器数量。

部署单节点 OpenShift 时支持的值为 31

credentialsMode:

Cloud Credential Operator(CCO)模式。如果没有指定模式,CCO 会动态尝试决定提供的凭证的功能,在支持多个模式的平台上首选 mint 模式。

注意

不是所有 CCO 模式都支持所有云供应商。有关 CCO 模式的更多信息,请参阅身份验证和授权内容中的"管理云供应商凭证"条目。

MintPassthroughManual 或空字符串("")。

fips:

启用或禁用 FIPS 模式。默认值为 false (禁用)。如果启用了 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。

注意

如果使用 Azure File 存储,则无法启用 FIPS 模式。

falsetrue

imageContentSources:

release-image 内容的源和存储库。

对象数组。包括一个 source 以及可选的 mirrors,如本表的以下行所述。

imageContentSources:
  source:

使用 imageContentSources 时需要此项。指定用户在镜像拉取规格中引用的存储库。

字符串

imageContentSources:
  mirrors:

指定可能还包含同一镜像的一个或多个仓库。

字符串数组

publish:

如何发布或公开集群的面向用户的端点,如 Kubernetes API、OpenShift 路由。

Internal, External, 或 Mixed.要部署无法从互联网访问的私有集群,请将 publish 设置为 Internal。默认值为 External。要部署 API 和 ingress 服务器具有不同的发布策略的集群,请将 publish 设置为 Mixed,并使用 operatorPublishingStrategy 参数。

sshKey:

用于验证对集群机器的访问的 SSH 密钥。

注意

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

例如,sshKey: ssh-ed25519 AAAA..

+

重要

将此参数设置为 Manual 可启用在 kube-system 项目中存储管理员级别的 secret 的替代方案,这需要额外的配置步骤。如需更多信息,请参阅"在 kube-system 项目中存储管理员级别的 secret"。

7.1.4. 其他 Azure 配置参数

下表描述了其他 Azure 配置参数。

注意

默认情况下,如果您在 install-config.yaml 文件中指定可用区,安装程序会在一个区(region)内的这些可用区间分发 control plane 机器和计算机器。要确保集群的高可用性,请选择至少含有三个可用区的区域。如果您的区域包含的可用区少于三个,安装程序将在可用区中放置多台 control plane 机器。

表 7.4. 其他 Azure 参数
参数描述
compute:
  platform:
    azure:
      encryptionAtHost:

为计算机器启用主机级别的加密。您可以启用这个加密,以及用户管理的服务器端加密。此功能加密虚拟机主机上的临时、临时、缓存和未管理的磁盘。这不是用户管理的服务器端加密的先决条件。

truefalse。默认值为 false

compute:
  platform:
    azure:
      osDisk:
        diskSizeGB:

虚拟机的 Azure 磁盘大小。

以 GB 为单位表示磁盘大小的整数。默认值为 128

compute:
  platform:
    azure:
      osDisk:
        diskType:

定义磁盘的类型。

standard_LRS, premium_LRS, 或 standardSSD_LRS。默认值为 Premium_LRS

compute:
  platform:
    azure:
      ultraSSDCapability:

启用 Azureultra 磁盘用于计算节点上的持久性存储。这需要您的 Azure 区域和区有可用的 ultra 磁盘。

Enabled, Disabled.默认值为 Disabled

compute:
  platform:
    azure:
      osDisk:
        diskEncryptionSet:
          resourceGroup:

包含安装先决条件集中磁盘加密的 Azure 资源组名称。此资源组应和安装集群的资源组不同,以避免在集群销毁时删除 Azure 加密密钥。只有在打算使用用户管理的磁盘加密安装集群时才需要这个值。

字符串,如 production_encryption_resource_group

compute:
  platform:
    azure:
      osDisk:
        diskEncryptionSet:
          name:

包含安装先决条件中加密密钥的磁盘加密集名称。

字符串,如 production_disk_encryption_set

compute:
  platform:
    azure:
      osDisk:
        diskEncryptionSet:
          subscriptionId:

定义磁盘加密集所在的磁盘加密集的 Azure 订阅。此辅助磁盘加密集用于加密计算机器。

字符串,格式为 00000000-0000-0000-0000-000000000000

compute:
  platform:
    azure:
      osImage:
        publisher:

可选。默认情况下,安装程序会下载并安装用于引导计算机器的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。您可以使用 Azure Marketplace 中提供的自定义 RHCOS 镜像来覆盖默认行为。安装程序仅将此镜像用于计算机器。

字符串.镜像发布者的名称。

compute:
  platform:
    azure:
      osImage:
        offer:

与自定义 RHCOS 镜像关联的 Azure Marketplace 提供的名称。如果使用 compute.platform.azure.osImage.publisher,则需要此字段。

字符串.镜像提供的名称。

compute:
  platform:
    azure:
      osImage:
        sku:

Azure Marketplace 提供的实例。如果使用 compute.platform.azure.osImage.publisher,则需要此字段。

字符串.镜像提供的 SKU。

compute:
  platform:
    azure:
      osImage:
        version:

镜像 SKU 的版本号。如果使用 compute.platform.azure.osImage.publisher,则需要此字段。

字符串.要使用的镜像版本。

compute:
  platform:
    azure:
      vmNetworkingType:

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。如果计算机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated 网络,否则默认网络类型为 Basic

AcceleratedBasic

compute:
  platform:
    azure:
      type:

为计算机器定义 Azure 实例类型。

字符串

compute:
  platform:
    azure:
      zones:

安装程序在其中创建计算机器的可用区。

字符串列表

compute:
  platform:
    azure:
      settings:
        securityType:

为计算节点启用机密虚拟机或可信启动。默认情况下不启用这个选项。

ConfidentialVMTrustedLaunch.

compute:
  platform:
    azure:
      settings:
        confidentialVM:
          uefiSettings:
            secureBoot:

如果使用机密虚拟机,则在计算节点上启用安全引导。

EnabledDisabled。默认值为 Disabled

compute:
  platform:
    azure:
      settings:
        confidentialVM:
          uefiSettings:
            virtualizedTrustedPlatformModule:

如果使用机密虚拟机,请在计算节点上启用虚拟化受信任的平台模块 (vTPM) 功能。

EnabledDisabled。默认值为 Disabled

compute:
  platform:
    azure:
      settings:
        trustedLaunch:
          uefiSettings:
            secureBoot:

如果使用可信启动,则在计算节点上启用安全引导。

EnabledDisabled。默认值为 Disabled

compute:
  platform:
    azure:
      settings:
        trustedLaunch:
          uefiSettings:
            virtualizedTrustedPlatformModule:

如果使用可信启动,则在计算节点上启用 vTPM 功能。

EnabledDisabled。默认值为 Disabled

compute:
  platform:
    azure:
      osDisk:
        securityProfile:
          securityEncryptionType:

为计算节点启用虚拟机客户机状态加密。只有在使用机密虚拟机时,才可以使用此参数。

VMGuestStateOnly 是唯一支持的值。

controlPlane:
  platform:
    azure:
      settings:
        securityType:

为 control plane 节点启用机密虚拟机或可信启动。默认情况下不启用这个选项。

ConfidentialVMTrustedLaunch.

controlPlane:
  platform:
    azure:
      settings:
        confidentialVM:
          uefiSettings:
            secureBoot:

如果使用机密虚拟机,请在 control plane 节点上启用安全引导。

EnabledDisabled。默认值为 Disabled

controlPlane:
  platform:
    azure:
      settings:
        confidentialVM:
          uefiSettings:
            virtualizedTrustedPlatformModule:

如果使用机密虚拟机,请在 control plane 节点上启用 vTPM 功能。

EnabledDisabled。默认值为 Disabled

controlPlane:
  platform:
    azure:
      settings:
        trustedLaunch:
          uefiSettings:
            secureBoot:

如果使用可信启动,则在 control plane 节点上启用安全引导。

EnabledDisabled。默认值为 Disabled

controlPlane:
  platform:
    azure:
      settings:
        trustedLaunch:
          uefiSettings:
            virtualizedTrustedPlatformModule:

如果使用可信启动,请在 control plane 节点上启用 vTPM 功能。

EnabledDisabled。默认值为 Disabled

controlPlane:
  platform:
    azure:
      osDisk:
        securityProfile:
          securityEncryptionType:

为 control plane 节点启用虚拟机客户机状态加密。只有在使用机密虚拟机时,才可以使用此参数。

VMGuestStateOnly 是唯一支持的值。

controlPlane:
  platform:
    azure:
      type:

为 control plane 机器定义 Azure 实例类型。

字符串

controlPlane:
  platform:
    azure:
      zones:

安装程序在其中创建 control plane 机器的可用区。

字符串列表

platform:
  azure:
    defaultMachinePlatform:
      settings:
        securityType:

为所有节点启用机密虚拟机或可信启动。默认情况下不启用这个选项。

ConfidentialVMTrustedLaunch.

platform:
  azure:
    defaultMachinePlatform:
      settings:
        confidentialVM:
          uefiSettings:
            secureBoot:

如果使用机密虚拟机,请在所有节点上启用安全引导。

EnabledDisabled。默认值为 Disabled

platform:
  azure:
    defaultMachinePlatform:
      settings:
        confidentialVM:
          uefiSettings:
            virtualizedTrustedPlatformModule:

如果您使用机密虚拟机,在所有节点上启用虚拟化受信任的平台模块 (vTPM) 功能。

EnabledDisabled。默认值为 Disabled

platform:
  azure:
    defaultMachinePlatform:
      settings:
        trustedLaunch:
          uefiSettings:
            secureBoot:

如果使用可信启动,则在所有节点上启用安全引导。

EnabledDisabled。默认值为 Disabled

platform:
  azure:
    defaultMachinePlatform:
      settings:
        trustedLaunch:
          uefiSettings:
            virtualizedTrustedPlatformModule:

如果使用可信启动,则在所有节点上启用 vTPM 功能。

EnabledDisabled。默认值为 Disabled

platform:
  azure:
    defaultMachinePlatform:
      osDisk:
        securityProfile:
          securityEncryptionType:

为所有节点启用虚拟机客户机状态加密。只有在使用机密虚拟机时,才可以使用此参数。

VMGuestStateOnly 是唯一支持的值。

platform:
  azure:
    defaultMachinePlatform:
      encryptionAtHost:

为计算机器启用主机级别的加密。您可以启用这个加密,以及用户管理的服务器端加密。此功能加密虚拟机主机上的临时、临时、缓存和未管理的磁盘。这个参数不是用户管理的服务器端加密的先决条件。

truefalse。默认值为 false

platform:
  azure:
    defaultMachinePlatform:
      osDisk:
        diskEncryptionSet:
          name:

包含安装先决条件中加密密钥的磁盘加密集名称。

字符串,如 production_disk_encryption_set

platform:
  azure:
    defaultMachinePlatform:
      osDisk:
        diskEncryptionSet:
          resourceGroup:

包含安装先决条件集中磁盘加密的 Azure 资源组名称。为了避免在集群销毁时删除 Azure 加密密钥,此资源组必须与安装集群的资源组不同。只有在打算使用用户管理的磁盘加密安装集群时才需要这个值。

字符串,如 production_encryption_resource_group

platform:
  azure:
    defaultMachinePlatform:
      osDisk:
        diskEncryptionSet:
          subscriptionId:

定义磁盘加密集所在的磁盘加密集的 Azure 订阅。此辅助磁盘加密集用于加密计算机器。

字符串,格式为 00000000-0000-0000-0000-000000000000

platform:
  azure:
    defaultMachinePlatform:
      osDisk:
        diskSizeGB:

虚拟机的 Azure 磁盘大小。

以 GB 为单位表示磁盘大小的整数。默认值为 128

platform:
  azure:
    defaultMachinePlatform:
      osDisk:
        diskType:

定义磁盘的类型。

premium_LRSstandardSSD_LRS。默认值为 Premium_LRS

platform:
  azure:
    defaultMachinePlatform:
      osImage:
        publisher:

可选。默认情况下,安装程序会下载并安装用于引导 control plane 和计算机器的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。您可以使用 Azure Marketplace 中提供的自定义 RHCOS 镜像来覆盖默认行为。安装程序将此镜像用于两种类型的机器。

字符串.镜像发布者的名称。

platform:
  azure:
    defaultMachinePlatform:
      osImage:
        offer:

与自定义 RHCOS 镜像关联的 Azure Marketplace 提供的名称。如果您使用 platform.azure.defaultMachinePlatform.osImage.publisher,则需要此字段。

字符串.镜像提供的名称。

platform:
  azure:
    defaultMachinePlatform:
      osImage:
        sku:

Azure Marketplace 提供的实例。如果您使用 platform.azure.defaultMachinePlatform.osImage.publisher,则需要此字段。

字符串.镜像提供的 SKU。

platform:
  azure:
    defaultMachinePlatform:
      osImage:
        version:

镜像 SKU 的版本号。如果您使用 platform.azure.defaultMachinePlatform.osImage.publisher,则需要此字段。

字符串.要使用的镜像版本。

platform:
  azure:
    defaultMachinePlatform:
      type:

control plane 和计算机器的 Azure 实例类型。

Azure 实例类型。

platform:
  azure:
    defaultMachinePlatform:
      zones:

安装程序在其中创建计算和 control plane 机器的可用区。

字符串列表。

controlPlane:
  platform:
    azure:
      encryptionAtHost:

为 control plane 机器启用主机级别的加密。您可以启用这个加密,以及用户管理的服务器端加密。此功能加密虚拟机主机上的临时、临时、缓存和未管理的磁盘。这不是用户管理的服务器端加密的先决条件。

truefalse。默认值为 false

controlPlane:
  platform:
    azure:
      osDisk:
        diskEncryptionSet:
          resourceGroup:

包含安装先决条件集中磁盘加密的 Azure 资源组名称。此资源组应和安装集群的资源组不同,以避免在集群销毁时删除 Azure 加密密钥。只有在打算使用用户管理的磁盘加密安装集群时才需要这个值。

字符串,如 production_encryption_resource_group

controlPlane:
  platform:
    azure:
      osDisk:
        diskEncryptionSet:
          name:

包含安装先决条件中加密密钥的磁盘加密集名称。

字符串,如 production_disk_encryption_set

controlPlane:
  platform:
    azure:
      osDisk:
        diskEncryptionSet:
          subscriptionId:

定义磁盘加密集所在的磁盘加密集的 Azure 订阅。这个辅助磁盘加密集用于加密 control plane 机器。

字符串,格式为 00000000-0000-0000-0000-000000000000

controlPlane:
  platform:
    azure:
      osDisk:
        diskSizeGB:

虚拟机的 Azure 磁盘大小。

以 GB 为单位表示磁盘大小的整数。默认值为 1024

controlPlane:
  platform:
    azure:
      osDisk:
        diskType:

定义磁盘的类型。

premium_LRSstandardSSD_LRS。默认值为 Premium_LRS

controlPlane:
  platform:
    azure:
      osImage:
        publisher:

可选。默认情况下,安装程序会下载并安装用于引导 control plane 机器的 Red Hat Enterprise Linux CoreOS (RHCOS)镜像。您可以使用 Azure Marketplace 中提供的自定义 RHCOS 镜像来覆盖默认行为。安装程序仅将此镜像用于 control plane 机器。

字符串.镜像发布者的名称。

controlPlane:
  platform:
    azure:
      osImage:
        offer:

与自定义 RHCOS 镜像关联的 Azure Marketplace 提供的名称。如果使用 controlPlane.platform.azure.osImage.publisher,则需要此字段。

字符串.镜像提供的名称。

controlPlane:
  platform:
    azure:
      osImage:
        sku:

Azure Marketplace 提供的实例。如果使用 controlPlane.platform.azure.osImage.publisher,则需要此字段。

字符串.镜像提供的 SKU。

controlPlane:
  platform:
    azure:
      osImage:
        version:

镜像 SKU 的版本号。如果使用 controlPlane.platform.azure.osImage.publisher,则需要此字段。

字符串.要使用的镜像版本。

controlPlane:
  platform:
    azure:
      ultraSSDCapability:

为 control plane 机器上的持久性存储启用 Azureultra 磁盘使用。这需要您的 Azure 区域和区有可用的 ultra 磁盘。

Enabled, Disabled.默认值为 Disabled

controlPlane:
  platform:
    azure:
      vmNetworkingType:

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。如果 control plane 机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated 网络,否则默认网络类型为 Basic

AcceleratedBasic

platform:
  azure:
    baseDomainResourceGroupName:

包含基域的 DNS 区的资源组的名称。

字符串,如 production_cluster

platform:
  azure:
    resourceGroupName:

集群要安装到的已有资源组的名称。此资源组必须为空,并且仅用于此特定群集;群集组件假定资源组中所有资源的所有权。如果您将安装程序的服务主体范围限制到这个资源组,您必须确保您的环境中安装程序使用的所有其他资源都有必要的权限,如公共 DNS 区和虚拟网络。使用安装程序销毁集群会删除此资源组。

字符串,如 existing_resource_group

platform:
  azure:
    outboundType:

用于将集群连接到互联网的出站路由策略。如果您使用用户定义的路由,则必须在安装集群前配置出站路由。安装程序不负责配置用户定义的路由。如果您指定了 NatGateway 路由策略,安装程序将只创建一个 NAT 网关。如果指定了 NatGateway 路由策略,您的帐户必须具有 Microsoft.Network/natGateways/readMicrosoft.Network/natGateways/write 权限。

重要

NatGateway 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

LoadBalancerUserDefinedRoutingNatGateway。默认值为 LoadBalancer

platform:
  azure:
    region:

托管集群的 Azure 区域的名称。

任何有效的区域名称,如 centralus

platform:
  azure:
    zone:

要放入机器的可用区列表。如需高可用性,请至少指定两个区域。

区域列表,如 ["1", "2", "3"]

platform:
  azure:
    customerManagedKey:
      keyVault:
        name:

指定包含用于加密 Azure 存储的加密密钥的密钥 vault 名称。

字符串.

platform:
  azure:
    customerManagedKey:
      keyVault:
        keyName:

指定用于加密 Azure 存储的用户管理的加密密钥名称。

字符串.

platform:
  azure:
    customerManagedKey:
      keyVault:
        resourceGroup:

指定包含密钥 vault 和受管身份的资源组的名称。

字符串.

platform:
  azure:
    customerManagedKey:
      keyVault:
        subscriptionId:

指定与密钥 vault 关联的订阅 ID。

字符串,格式为 00000000-0000-0000-0000-000000000000

platform:
  azure:
    customerManagedKey:
      userAssignedIdentityKey:

指定位于带有密钥 vault 资源组中的用户分配的受管身份的名称,并可访问用户管理的密钥。

字符串.

platform:
  azure:
    defaultMachinePlatform:
      ultraSSDCapability:

为 control plane 和计算机器上的持久性存储启用 Azureultra 磁盘使用。这需要您的 Azure 区域和区有可用的 ultra 磁盘。

Enabled, Disabled.默认值为 Disabled

platform:
  azure:
    networkResourceGroupName:

包含您要将集群部署到的现有 VNet 的资源组的名称。这个名称不能与 platform. azure.baseDomainResourceGroupName 相同。

字符串.

platform:
  azure:
    virtualNetwork:

要将集群部署到的现有 VNet 的名称。

字符串.

platform:
  azure:
    controlPlaneSubnet:

要将 control plane 机器部署到的 VNet 中现有子网的名称。

有效的 CIDR,如 10.0.0.0/16

platform:
  azure:
    computeSubnet:

要将计算机器部署到的 VNet 中现有子网的名称。

有效的 CIDR,如 10.0.0.0/16

platform:
  azure:
    cloudName:

用于使用适当的 Azure API 端点配置 Azure SDK 的 Azure 云环境名称。如果为空,则使用默认值 AzurePublicCloud

任何有效的云环境,如 AzurePublicCloud 或 AzureUSrianCloud

platform:
  azure:
    defaultMachinePlatform:
      vmNetworkingType:

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。

AcceleratedBasic。如果 control plane 和计算机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated网络,否则默认网络类型为 Basic

operatorPublishingStrategy:
  apiserver:

决定服务 API 的负载均衡器是公共还是私有的。将此参数设置为 Internal,以防止 API 服务器在 VNet 外部访问。将此参数设置为 External,使 API 服务器可以在 VNet 之外访问。如果设置此参数,您必须将 publish 参数设置为 Mixed

ExternalInternal.默认值为 External

operatorPublishingStrategy:
  ingress:

决定集群为入口流量创建的 DNS 资源是否公开可见。将此参数设置为 Internal,以防止公开访问入口 VIP。将此参数设置为 External,使入口 VIP 可被公开访问。如果设置此参数,您必须将 publish 参数设置为 Mixed

ExternalInternal.默认值为 External

注意

您无法自定义 Azure 可用区,也不能使用 标签来整理 Azure 集群的 Azure 资源

Legal Notice

Copyright © 2024 Red Hat, Inc.

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.