在 Azure 上安装


OpenShift Container Platform 4.12

在 Azure 上安装 OpenShift Container Platform

Red Hat OpenShift Documentation Team

摘要

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

第 1 章 准备在 Azure 上安装

1.1. 先决条件

在 Microsoft Azure 上安装 OpenShift Container Platform 前,您必须配置 Azure 帐户。如需了解有关帐户配置、帐户限值、公共 DNS 区配置、所需角色、创建服务主体和支持的 Azure 区域的详细信息,请参阅配置 Azure 帐户

如果环境中无法访问云身份和访问管理(IAM)API,或者不想将管理员级别的凭证 secret 存储在 kube-system 命名空间中,请参阅为 Azure 手动创建 IAM 以获取其他选项。

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

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

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

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

  • 在 Azure 上快速安装集群:您可以在由 OpenShift Container Platform 安装程序置备的 Azure 基础架构上安装 OpenShift Container Platform。您可以使用默认配置选项快速安装集群。
  • 在 Azure 上安装自定义集群:您可以在安装程序置备的 Azure 基础架构上安装自定义集群。安装程序允许在安装阶段应用一些自定义。其它自定义选项可在安装后使用。
  • 使用自定义网络在 Azure 上安装集群:您可以在安装过程中自定义 OpenShift Container Platform 网络配置,以便集群可以与现有的 IP 地址分配共存,并遵循您的网络要求。
  • 在 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.3.2. 在用户置备的基础架构上安装集群

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

  • 使用 ARM 模板在 Azure 上安装集群:您可以使用您提供的基础架构在 Azure 上安装 OpenShift Container Platform。您可以使用提供的 Azure Resource Manager(ARM)模板来协助安装。

1.4. 后续步骤

第 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 集群的能力。

Expand
组件默认所需的组件数默认 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. 所需的 Azure 角色

OpenShift Container Platform 需要一个服务主体,以便可以管理 Microsoft Azure 资源。在创建服务主体前,请查看以下信息:

您的 Azure 帐户订阅必须具有以下角色:

  • User Access Administrator
  • 贡献者

您的 Azure Active Directory (AD)必须具有以下权限:

  • "microsoft.directory/servicePrincipals/createAsOwner"

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

当您为服务主体分配 ContributorUser Access Administrator 角色时,会自动授予所有所需的权限。

如果机构的安全策略需要更严格的权限集,您可以创建具有所需权限的自定义角色。在 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/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. 创建 marketplace 虚拟机资源的可选权限

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

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

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

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

  • 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.12. 使用 Azure 网络地址转换 (NAT) 安装私有集群的可选权限

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

例 2.13. 使用 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.14. 运行收集 bootstrap 的可选权限

  • Microsoft.Compute/virtualMachines/instanceView/read

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

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

  • Microsoft.Authorization/roleAssignments/delete

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

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

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

  • Microsoft.ManagedIdentity/userAssignedIdentities/delete

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

  • 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.19. 检查资源健康状况所需的权限

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

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

  • Microsoft.Resources/subscriptions/resourcegroups/delete

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

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

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

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

2.6. 创建服务主体

由于 OpenShift Container Platform 及其安装程序使用 Azure Resource Manager 创建 Microsoft Azure 资源,因此您必须创建一个服务主体来代表它。

先决条件

  • 安装或更新 Azure CLI
  • 您的 Azure 帐户具有您所用订阅所需的角色。
  • 如果要使用自定义角色,您已创建了带有在 使用安装程序置备的基础架构所需的 Azure 权限中列出的所需权限的一个自定义角色

流程

  1. 登录 Azure CLI:

    $ az login
    Copy to Clipboard Toggle word wrap
  2. 如果您的 Azure 帐户使用订阅,请确定您使用正确的订阅:

    1. 查看可用帐户列表并记录您要用于集群的订阅的 tenantId 值:

      $ az account list --refresh
      Copy to Clipboard Toggle word wrap

      输出示例

      [
        {
          "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"
          }
        }
      ]
      Copy to Clipboard Toggle word wrap

    2. 查看您的活跃帐户详情,确认 tenantId 值与您要使用的订阅匹配:

      $ az account show
      Copy to Clipboard Toggle word wrap

      输出示例

      {
        "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"
        }
      }
      Copy to Clipboard Toggle word wrap

      1
      确保 tenantId 参数的值是正确的订阅 ID。
    3. 如果您使用的订阅不正确,请更改活跃的订阅:

      $ az account set -s <subscription_id> 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定订阅 ID。
    4. 验证订阅 ID 更新:

      $ az account show
      Copy to Clipboard Toggle word wrap

      输出示例

      {
        "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"
        }
      }
      Copy to Clipboard Toggle word wrap

  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
    Copy to Clipboard Toggle word wrap
    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"
    }
    Copy to Clipboard Toggle word wrap

  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
    Copy to Clipboard Toggle word wrap
    1
    为您的服务主体指定 appId 参数值。

2.7. 支持的 Azure Marketplace 区域

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

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

注意

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

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)
  • 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.9. 后续步骤

第 3 章 为 Azure 手动创建 IAM

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

Cloud Credential Operator(CCO)将云供应商凭证作为 Kubernetes 自定义资源定义(CRD)进行管理。您可以通过在 install-config.yaml 文件中为 credentialsMode 参数设置不同的值,来配置 CCO 来满足机构的安全要求。

如果您不希望在集群 kube-system 项目中存储管理员级别的凭证 secret,您可以在安装 OpenShift Container Platform 时把 CCO 的 credentialsMode 参数设置为 Manual,并手动管理您的云凭证。

使用手动模式可允许每个集群组件只拥有所需的权限,而无需在集群中存储管理员级别的凭证。如果您的环境没有连接到云供应商公共 IAM 端点,您还可以使用此模式。但是,每次升级都必须手动将权限与新发行镜像协调。您还必须手动为每个请求它们的组件提供凭证。

3.2. 手动创建 IAM

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

流程

  1. 运行以下命令,切换到包含安装程序的目录并创建 install-config.yaml 文件:

    $ openshift-install create install-config --dir <installation_directory>
    Copy to Clipboard Toggle word wrap

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

  2. 编辑 install-config.yaml 配置文件,使其包含将 credentialsMode 参数设置为 Manual

    install-config.yaml 配置文件示例

    apiVersion: v1
    baseDomain: cluster1.example.com
    credentialsMode: Manual 
    1
    
    compute:
    - architecture: amd64
      hyperthreading: Enabled
    ...
    Copy to Clipboard Toggle word wrap

    1
    添加这一行将 credentialsMode 参数设置为 Manual
  3. 从包含安装程序的目录中运行以下命令来生成清单:

    $ openshift-install create manifests --dir <installation_directory>
    Copy to Clipboard Toggle word wrap

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

  4. 在包含安装程序的目录中,运行以下命令来获取构建 openshift-install 二进制文件的 OpenShift Container Platform 发行镜像的详情:

    $ openshift-install version
    Copy to Clipboard Toggle word wrap

    输出示例

    release image quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64
    Copy to Clipboard Toggle word wrap

  5. 运行以下命令,找到此发行版本镜像中的所有 CredentialsRequest 对象:

    $ oc adm release extract quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64 \
      --credentials-requests \
      --cloud=azure
    Copy to Clipboard Toggle word wrap

    此命令为每个 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
      ...
    Copy to Clipboard Toggle word wrap

  6. 在之前生成的 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>
      ...
    Copy to Clipboard Toggle word wrap

    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>
    Copy to Clipboard Toggle word wrap

    重要

    发行镜像包含通过 TechPreviewNoUpgrade 功能集启用的技术预览功能的 CredentialsRequest 对象。您可以使用 release.openshift.io/feature-set: TechPreviewNoUpgrade 注解来识别这些对象。

    • 如果不使用这些功能,请不要为这些对象创建 secret。为不使用的技术预览功能创建 secret 可能会导致安装失败。
    • 如果使用这些功能,必须为对应的对象创建 secret。
    • 要使用 TechPreviewNoUpgrade 注解查找 CredentialsRequest 对象,请运行以下命令:

      $ grep "release.openshift.io/feature-set" *
      Copy to Clipboard Toggle word wrap

      输出示例

      0000_30_capi-operator_00_credentials-request.yaml:  release.openshift.io/feature-set: TechPreviewNoUpgrade
      Copy to Clipboard Toggle word wrap

  7. 从包含安装程序的目录中,开始创建集群:

    $ openshift-install create cluster --dir <installation_directory>
    Copy to Clipboard Toggle word wrap
    重要

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

3.3. 后续步骤

第 4 章 为 Azure 启用用户管理的加密

在 OpenShift Container Platform 版本 4.12 中,您可以在 Azure 中使用用户管理的加密密钥安装集群。要启用此功能,您可以在安装后准备 Azure DiskEncryptionSet,修改 install-config.yaml 文件,然后执行安装后的步骤。

4.1. 准备 Azure 磁盘加密集

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

流程

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

    $ export RESOURCEGROUP="<resource_group>" \
    1
    
        LOCATION="<location>" 
    2
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
    1
    指定您要创建的 Azure Key Vault 的名称。
    2
    指定您要创建的加密密钥名称。
    3
    指定您要创建的磁盘加密集的名称。
  3. 运行以下命令,为您的 Azure Service Principal 设置环境变量:

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

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

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

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

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

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

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

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

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

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

4.2. 后续步骤

第 5 章 在 Azure 上快速安装集群

在 OpenShift Container Platform 版本 4.12 中,您可以使用默认配置选项在 Microsoft Azure 上安装集群。

5.1. 先决条件

5.2. OpenShift Container Platform 互联网访问

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

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

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

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

5.3. 为集群节点 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
    Copy to Clipboard Toggle word wrap
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 FIPS 验证或 Modules In Process 加密库的 OpenShift Container Platform 集群。请不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub
    Copy to Clipboard Toggle word wrap

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

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

    注意

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

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

      $ eval "$(ssh-agent -s)"
      Copy to Clipboard Toggle word wrap

      输出示例

      Agent pid 31874
      Copy to Clipboard Toggle word wrap

      注意

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

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

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

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
    Copy to Clipboard Toggle word wrap

后续步骤

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

5.4. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,本地磁盘空间为 500 MB。

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

    安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。这两个文件都需要删除集群。

    重要

    删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。

  4. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

5.5. 部署集群

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

重要

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

先决条件

  • 使用托管集群的云平台配置帐户。
  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 验证主机上的云供应商帐户是否有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示包括缺失权限的错误消息。

流程

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

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

    在指定目录时:

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

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

      注意

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

    2. 选择 azure 作为目标平台。
    3. 如果安装程序无法找到包含 Microsoft Azure 配置集信息的 osServicePrincipal.json 配置文件,位于计算机上的 ~/.azure/ 目录中,安装程序会提示您输入订阅和服务主体的以下 Azure 参数值。

      • azure subscription id:要用于集群的订阅 ID。指定帐户输出中的 id 值。
      • azure tenant id:租户 ID。指定帐户输出中的 tenantId 值。
      • azure service principal client id:服务主体的 appId 参数值。
      • azure service principal client secret:服务主体的 password 参数值。

        重要

        为之前列出的参数输入值后,安装程序会创建一个 osServicePrincipal.json 配置文件,并将此文件存储在计算机上的 ~/.azure/ 目录中。这些操作可确保安装程序在目标平台上创建 OpenShift Container Platform 集群时加载配置集。

    4. 选择要将集群部署到的区域。
    5. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
    6. 为集群输入一个描述性名称。

      重要

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

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

    如果您在主机上配置的云供应商帐户没有足够的权限来部署集群,安装过程将停止,并显示缺少的权限。

验证

当集群部署成功完成时:

  • 终端会显示用于访问集群的说明,包括指向 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
Copy to Clipboard Toggle word wrap

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

5.6. 通过下载二进制文件安装 OpenShift CLI

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

重要

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

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap

5.7. 使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件,以默认系统用户身份登录集群。kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。

先决条件

  • 已部署 OpenShift Container Platform 集群。
  • 已安装 oc CLI。

流程

  1. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令:

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    输出示例

    system:admin
    Copy to Clipboard Toggle word wrap

5.8. OpenShift Container Platform 的 Telemetry 访问

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

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

5.9. 后续步骤

第 6 章 使用自定义在 Azure 上安装集群

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

6.1. 先决条件

6.2. OpenShift Container Platform 互联网访问

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

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

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

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

6.3. 为集群节点 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
    Copy to Clipboard Toggle word wrap
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 FIPS 验证或 Modules In Process 加密库的 OpenShift Container Platform 集群。请不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub
    Copy to Clipboard Toggle word wrap

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

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

    注意

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

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

      $ eval "$(ssh-agent -s)"
      Copy to Clipboard Toggle word wrap

      输出示例

      Agent pid 31874
      Copy to Clipboard Toggle word wrap

      注意

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

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

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

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
    Copy to Clipboard Toggle word wrap

后续步骤

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

6.4. 选择 Azure Marketplace 镜像

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

  • 虽然镜像相同,但 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 安装镜像。

您应该只修改计算机器的 RHCOS 镜像以使用 Azure Marketplace 镜像。control plane 机器和基础架构节点不需要 OpenShift Container Platform 订阅,且默认使用公共 RHCOS 默认镜像,这不会对 Azure bill 造成订阅成本。因此,您不应该修改集群默认引导镜像或 control plane 引导镜像。将 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
      Copy to Clipboard Toggle word wrap

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-ocpworker:4.8.2021122100               4.8.2021122100
      rh-ocp-worker  RedHat          rh-ocp-worker-gen1  RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100         4.8.2021122100
      Copy to Clipboard Toggle word wrap

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

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table
      Copy to Clipboard Toggle word wrap

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.8.2021122100       4.8.2021122100
      rh-ocp-worker  redhat-limited  rh-ocp-worker-gen1  redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100  4.8.2021122100
      Copy to Clipboard Toggle word wrap

    注意

    无论您安装的 OpenShift Container Platform 版本是什么,要使用的 Azure Marketplace 镜像的正确版本都是 4.8。如果需要,您的虚拟机会在安装过程中自动升级。

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

    • 北美:

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

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

    • 北美:

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

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

    • 北美:

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

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
      Copy to Clipboard Toggle word wrap
  5. 记录您的所提供的镜像详情。在部署集群前,您必须使用 publisher, offer, sku, 和 version 的值来更新 install-config.yaml 文件中的 compute 部分。

使用 Azure Marketplace worker 节点的 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: 4.8.2021122100
  replicas: 3
Copy to Clipboard Toggle word wrap

6.5. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,本地磁盘空间为 500 MB。

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

    安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。这两个文件都需要删除集群。

    重要

    删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。

  4. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

6.6. 创建安装配置文件

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

先决条件

  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 在订阅级别获取服务主体权限。

流程

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

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

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

      在指定目录时:

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

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

        注意

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

      2. 选择 azure 作为目标平台。
      3. 如果计算机上没有 Microsoft Azure 配置集,请为您的订阅和服务主体指定以下 Azure 参数值:

        • azure subscription id:要用于集群的订阅 ID。指定帐户输出中的 id 值。
        • azure tenant id:租户 ID。指定帐户输出中的 tenantId 值。
        • azure service principal client id:服务主体的 appId 参数值。
        • azure service principal client secret:服务主体的 password 参数值。
      4. 选择要在其中部署集群的区域。
      5. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      6. 为集群输入一个描述性名称。

        重要

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

      7. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret
  2. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  3. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

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

6.6.1. 安装配置参数

在部署 OpenShift Container Platform 集群前,您可以提供参数值来描述托管集群的云平台中的帐户,并选择性地自定义集群平台。在创建 install-config.yaml 安装配置文件时,您可以通过命令行为所需参数提供值。如果自定义集群,您可以修改 install-config.yaml 文件以提供有关平台的更多详情。

注意

安装后,您无法在 install-config.yaml 文件中修改这些参数。

6.6.1.1. 所需的配置参数

下表描述了所需的安装配置参数:

Expand
表 6.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

要执行安装的具体平台配置: alibabacloudawsbaremetalazuregcpibmcloudnutanixopenstackovirtvsphere{}。有关 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"
      }
   }
}
Copy to Clipboard Toggle word wrap
6.6.1.2. 网络配置参数

您可以根据现有网络基础架构的要求自定义安装配置。例如,您可以扩展集群网络的 IP 地址块,或者提供不同于默认值的不同 IP 地址块。

仅支持 IPv4 地址。

注意

Red Hat OpenShift Data Foundation 灾难恢复解决方案不支持 Globalnet。对于区域灾难恢复场景,请确保为每个集群中的集群和服务网络使用非重叠的专用 IP 地址。

Expand
表 6.2. 网络参数
参数描述

networking

集群网络的配置。

对象

注意

您无法在安装后修改 网络 对象指定的参数。

networking.networkType

要安装的 Red Hat OpenShift Networking 网络插件。

OpenShiftSDNOVNKubernetesOpenShiftSDN 是 all-Linux 网络的 CNI 插件。OVNKubernetes 是 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
Copy to Clipboard Toggle word wrap

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

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

CIDR 格式具有 IP 地址块的数组。例如:

networking:
  serviceNetwork:
   - 172.30.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork

机器的 IP 地址块。

如果您指定了多个 IP 地址块,块不得重叠。

对象数组。例如:

networking:
  machineNetwork:
  - cidr: 10.0.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork.cidr

使用 networking.machineNetwork 时需要此项。IP 地址块。libvirt 之外的所有平台的默认值为 10.0.0.0/16。对于 libvirt,默认值 为 192.168.126.0/24

CIDR 表示法中的 IP 网络块。

例如: 10.0.0.0/16

注意

networking.machineNetwork 设置为与首选 NIC 所在的 CIDR 匹配。

6.6.1.3. 可选的配置参数

下表描述了可选的安装配置参数:

Expand
表 6.3. 可选参数
参数描述

additionalTrustBundle

添加到节点可信证书存储中的 PEM 编码 X.509 证书捆绑包。配置了代理时,也可以使用此信任捆绑包。

字符串

功能

控制可选核心组件的安装。您可以通过禁用可选组件来减少 OpenShift Container Platform 集群的空间。如需更多信息,请参阅安装中的"集群功能"页面。

字符串数组

capabilities.baselineCapabilitySet

选择要启用的一组初始可选功能。有效值为 Nonev4.11v4.12vCurrent。默认值为 vCurrent

字符串

capabilities.additionalEnabledCapabilities

将可选功能集合扩展到您在 baselineCapabilitySet 中指定的范围。您可以在此参数中指定多个功能。

字符串数组

Compute

组成计算节点的机器的配置。

MachinePool 对象的数组。

compute.architecture

决定池中机器的指令集合架构。目前,不支持具有不同架构的集群。所有池都必须指定相同的架构。有效值为 amd64arm64。并非所有安装选项都支持 64 位 ARM 架构。要验证您的平台上是否支持您的安装选项,请参阅 选择集群安装方法并为用户准备它中的不同平台支持的安装方法

字符串

compute.hyperthreading

是否在计算机器上启用或禁用并发多 线程或超线程。默认情况下,启用并发多线程以提高机器内核的性能。

重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。

enabledDisabled

compute.name

使用 compute 时需要此项。机器池的名称。

worker

compute.platform

使用 compute 时需要此项。使用此参数指定托管 worker 机器的云供应商。此参数值必须与 controlPlane.platform 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, 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 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, vsphere, 或 {}

controlPlane.replicas

要置备的 control plane 机器数量。

唯一支持的值是 3,这是默认值。

credentialsMode

Cloud Credential Operator(CCO)模式。如果没有指定模式,CCO 会动态尝试决定提供的凭证的功能,在支持多个模式的平台上首选 mint 模式。

注意

不是所有 CCO 模式都支持所有云供应商。如需有关 CCO 模式的更多信息,请参阅集群 Operator 参考内容中的 Cloud Credential Operator 条目。

注意

如果您的 AWS 帐户启用了服务控制策略 (SCP),您必须将 credentialsMode 参数配置为 MintPassthroughManual

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 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

注意

如果使用 Azure File 存储,则无法启用 FIPS 模式。

falsetrue

imageContentSources

release-image 内容的源和存储库。

对象数组。包括一个 source 以及可选的 mirrors,如本表的以下行所述。

imageContentSources.source

使用 imageContentSources 时需要此项。指定用户在镜像拉取规格中引用的存储库。

字符串

imageContentSources.mirrors

指定可能还包含同一镜像的一个或多个仓库。

字符串数组

publish

如何发布或公开集群的面向用户的端点,如 Kubernetes API、OpenShift 路由。

内部或外部 .要部署无法从互联网访问的私有集群,请将 publish 设置为 Internal。默认值为 External

sshKey

用于验证对集群机器的访问的 SSH 密钥。

注意

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

例如,sshKey: ssh-ed25519 AAAA..

6.6.1.4. 其他 Azure 配置参数

下表描述了其他 Azure 配置参数。

注意

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

Expand
表 6.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.vmNetworkingType

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。如果计算机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated 网络,否则默认网络类型为 Basic

AcceleratedBasic

compute.platform.azure.type

为计算机器定义 Azure 实例类型。

字符串

compute.platform.azure.zones

安装程序在其中创建计算机器的可用区。

字符串列表

controlPlane.platform.azure.type

为 control plane 机器定义 Azure 实例类型。

字符串

controlPlane.platform.azure.zones

安装程序在其中创建 control plane 机器的可用区。

字符串列表

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

用于将集群连接到互联网的出站路由策略。如果您使用用户定义的路由,则必须在安装集群前配置出站路由。安装程序不负责配置用户定义的路由。

LoadBalancerUserDefinedRouting。默认值为 LoadBalancer

platform.azure.region

托管集群的 Azure 区域的名称。

任何有效的区域名称,如 centralus

platform.azure.zone

要放入机器的可用区列表。如需高可用性,请至少指定两个区域。

区域列表,如 ["1", "2", "3"]

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

注意

您无法自定义 Azure 可用区,也不能使用 标签来整理 Azure 集群的 Azure 资源

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

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

Expand
表 6.5. 最低资源要求
机器操作系统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 及更新的版本中删除。
重要

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

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

6.6.3. 为 Azure 测试的实例类型

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

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

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • StandardDdsv6Family
  • standardDLDSv5Family
  • StandardDldsv6Family
  • standardDLSv5Family
  • StandardDlsv6Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • StandardDsv6Family
  • 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
  • standardLasv4Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardLsv4Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • StandardNVadsV710v5Family
  • Standard NDASv4_A100 Family
  • standardNVSv3Family
  • standardXEISv4Family

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

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

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
  • StandardDpdsv6Family
  • StandardDpldsv6Famil
  • StandardDplsv6Family
  • StandardDpsv6Family
  • StandardEpdsv6Family
  • StandardEpsv6Family

6.6.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
      type: Standard_D8s_v3
  replicas: 3
compute: 
6

- hyperthreading: Enabled 
7

  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 
8

        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      zones: 
9

      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 
10

networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 
11

  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 
12

    region: centralus 
13

    resourceGroupName: existing_resource_group 
14

    outboundType: Loadbalancer
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 
15

fips: false 
16

sshKey: ssh-ed25519 AAAA... 
17
Copy to Clipboard Toggle word wrap
1 10 13 15
必需。安装程序会提示您输入这个值。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

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

5 8
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
9
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
11
要安装的集群网络插件。支持的值有 OVNKubernetesOpenShiftSDN。默认值为 OVNKubernetes
12
指定包含基域的 DNS 区的资源组的名称。
14
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
16
是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。
重要

要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

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

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

6.6.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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

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

注意

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

6.7. 部署集群

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

重要

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

先决条件

  • 使用托管集群的云平台配置帐户。
  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 验证主机上的云供应商帐户是否有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示包括缺失权限的错误消息。

流程

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

    $ ./openshift-install create cluster --dir <installation_directory> \ 
    1
    
        --log-level=info 
    2
    Copy to Clipboard Toggle word wrap
    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
Copy to Clipboard Toggle word wrap

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

6.8. 安装后最终调整用户管理的加密

如果使用用户管理的加密密钥安装 OpenShift Container Platform,您可以通过创建新存储类并授予 Azure 集群资源组写入权限来完成安装。

流程

  1. 获取安装程序使用的集群资源组的身份:

    1. 如果在 install-config.yaml 中指定了现有资源组,请运行以下命令获取其 Azure 身份:

      $ az identity list --resource-group "<existing_resource_group>"
      Copy to Clipboard Toggle word wrap
    2. 如果您没有在 install-config.yaml 中指定现有资源组,请找到安装程序创建的资源组,然后运行以下命令来获取其 Azure 身份:

      $ az group list
      Copy to Clipboard Toggle word wrap
      $ az identity list --resource-group "<installer_created_resource_group>"
      Copy to Clipboard Toggle word wrap
  2. 运行以下命令,为集群资源组授予角色分配,使其可以写入 Disk Encryption Set:

    $ az role assignment create --role "<privileged_role>" \
    1
    
        --assignee "<resource_group_identity>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定对磁盘加密集具有读/写权限的 Azure 角色。您可以使用 Owner 角色或具有所需权限的自定义角色。
    2
    指定集群资源组的身份。
  3. 运行以下命令,获取在安装前创建的磁盘加密集的 id

    $ az disk-encryption-set show -n <disk_encryption_set_name> \
    1
    
         --resource-group <resource_group_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定磁盘加密集的名称。
    2
    指定包含磁盘加密集的资源组。id 的格式是 "/subscriptions/…​/resourceGroups/…​/providers/Microsoft.Compute/diskEncryptionSets/…​"
  4. 运行以下命令,获取集群服务主体的身份:

    $ az identity show -g <cluster_resource_group> \
    1
    
         -n <cluster_service_principal_name> \
    2
    
         --query principalId --out tsv
    Copy to Clipboard Toggle word wrap
    1
    指定安装程序创建的集群资源组的名称。
    2
    指定安装程序创建的集群服务主体的名称。身份的格式是 12345678-1234-1234-1234-1234567890
  5. 运行以下命令,创建一个角色分配,为磁盘加密集授予集群服务主体必要的权限:

    $ az role assignment create --assignee <cluster_service_principal_id> \
    1
    
         --role <privileged_role> \
    2
    
         --scope <disk_encryption_set_id> \
    3
    Copy to Clipboard Toggle word wrap
    1
    指定上一步中获得的集群服务主体的 ID。
    2
    指定 Azure 角色名称。您可以使用 Contributor 角色或具有所需权限的自定义角色。
    3
    指定磁盘加密集的 ID。
  6. 创建使用用户管理的磁盘加密集的存储类:

    1. 将以下存储类定义保存到文件中,如 storage-class-definition.yaml

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: managed-premium
      provisioner: kubernetes.io/azure-disk
      parameters:
        skuname: Premium_LRS
        kind: Managed
        diskEncryptionSetID: "<disk_encryption_set_ID>" 
      1
      
        resourceGroup: "<resource_group_name>" 
      2
      
      reclaimPolicy: Delete
      allowVolumeExpansion: true
      volumeBindingMode: WaitForFirstConsumer
      Copy to Clipboard Toggle word wrap
      1
      指定您在先决条件步骤中创建的磁盘加密集的 ID,例如 "/subscriptions/xxxxxx-xxxxx-xxxxx/resourceGroups/test-encryption/providers/Microsoft.Compute/diskEncryptionSets/disk-encryption-set-xxxxxx"
      2
      指定安装程序使用的资源组的名称。这是第一步中的资源组。
    2. 从您创建的文件创建存储类 managed-premium

      $ oc create -f storage-class-definition.yaml
      Copy to Clipboard Toggle word wrap
  7. 在创建持久性卷以使用加密存储时,选择 managed-premium 存储类。

6.9. 通过下载二进制文件安装 OpenShift CLI

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

重要

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

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap

6.10. 使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件,以默认系统用户身份登录集群。kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。

先决条件

  • 已部署 OpenShift Container Platform 集群。
  • 已安装 oc CLI。

流程

  1. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令:

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    输出示例

    system:admin
    Copy to Clipboard Toggle word wrap

6.11. OpenShift Container Platform 的 Telemetry 访问

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

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

6.12. 后续步骤

第 7 章 使用网络自定义在 Azure 上安装集群

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

大部分网络配置参数必须在安装过程中设置,只有 kubeProxy 配置参数可以在运行的集群中修改。

7.1. 先决条件

7.2. OpenShift Container Platform 互联网访问

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

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

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

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

7.3. 为集群节点 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
    Copy to Clipboard Toggle word wrap
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 FIPS 验证或 Modules In Process 加密库的 OpenShift Container Platform 集群。请不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub
    Copy to Clipboard Toggle word wrap

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

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

    注意

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

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

      $ eval "$(ssh-agent -s)"
      Copy to Clipboard Toggle word wrap

      输出示例

      Agent pid 31874
      Copy to Clipboard Toggle word wrap

      注意

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

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

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

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
    Copy to Clipboard Toggle word wrap

后续步骤

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

7.4. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,本地磁盘空间为 500 MB。

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

    安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。这两个文件都需要删除集群。

    重要

    删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。

  4. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

7.5. 创建安装配置文件

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

先决条件

  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 在订阅级别获取服务主体权限。

流程

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

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

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

      在指定目录时:

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

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

        注意

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

      2. 选择 azure 作为目标平台。
      3. 如果计算机上没有 Microsoft Azure 配置集,请为您的订阅和服务主体指定以下 Azure 参数值:

        • azure subscription id:要用于集群的订阅 ID。指定帐户输出中的 id 值。
        • azure tenant id:租户 ID。指定帐户输出中的 tenantId 值。
        • azure service principal client id:服务主体的 appId 参数值。
        • azure service principal client secret:服务主体的 password 参数值。
      4. 选择要在其中部署集群的区域。
      5. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      6. 为集群输入一个描述性名称。

        重要

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

      7. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret
  2. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  3. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

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

7.5.1. 安装配置参数

在部署 OpenShift Container Platform 集群前,您可以提供参数值来描述托管集群的云平台中的帐户,并选择性地自定义集群平台。在创建 install-config.yaml 安装配置文件时,您可以通过命令行为所需参数提供值。如果自定义集群,您可以修改 install-config.yaml 文件以提供有关平台的更多详情。

注意

安装后,您无法在 install-config.yaml 文件中修改这些参数。

7.5.1.1. 所需的配置参数

下表描述了所需的安装配置参数:

Expand
表 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

要执行安装的具体平台配置: alibabacloudawsbaremetalazuregcpibmcloudnutanixopenstackovirtvsphere{}。有关 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"
      }
   }
}
Copy to Clipboard Toggle word wrap
7.5.1.2. 网络配置参数

您可以根据现有网络基础架构的要求自定义安装配置。例如,您可以扩展集群网络的 IP 地址块,或者提供不同于默认值的不同 IP 地址块。

仅支持 IPv4 地址。

注意

Red Hat OpenShift Data Foundation 灾难恢复解决方案不支持 Globalnet。对于区域灾难恢复场景,请确保为每个集群中的集群和服务网络使用非重叠的专用 IP 地址。

Expand
表 7.2. 网络参数
参数描述

networking

集群网络的配置。

对象

注意

您无法在安装后修改 网络 对象指定的参数。

networking.networkType

要安装的 Red Hat OpenShift Networking 网络插件。

OpenShiftSDNOVNKubernetesOpenShiftSDN 是 all-Linux 网络的 CNI 插件。OVNKubernetes 是 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
Copy to Clipboard Toggle word wrap

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

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

CIDR 格式具有 IP 地址块的数组。例如:

networking:
  serviceNetwork:
   - 172.30.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork

机器的 IP 地址块。

如果您指定了多个 IP 地址块,块不得重叠。

对象数组。例如:

networking:
  machineNetwork:
  - cidr: 10.0.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork.cidr

使用 networking.machineNetwork 时需要此项。IP 地址块。libvirt 之外的所有平台的默认值为 10.0.0.0/16。对于 libvirt,默认值 为 192.168.126.0/24

CIDR 表示法中的 IP 网络块。

例如: 10.0.0.0/16

注意

networking.machineNetwork 设置为与首选 NIC 所在的 CIDR 匹配。

7.5.1.3. 可选的配置参数

下表描述了可选的安装配置参数:

Expand
表 7.3. 可选参数
参数描述

additionalTrustBundle

添加到节点可信证书存储中的 PEM 编码 X.509 证书捆绑包。配置了代理时,也可以使用此信任捆绑包。

字符串

功能

控制可选核心组件的安装。您可以通过禁用可选组件来减少 OpenShift Container Platform 集群的空间。如需更多信息,请参阅安装中的"集群功能"页面。

字符串数组

capabilities.baselineCapabilitySet

选择要启用的一组初始可选功能。有效值为 Nonev4.11v4.12vCurrent。默认值为 vCurrent

字符串

capabilities.additionalEnabledCapabilities

将可选功能集合扩展到您在 baselineCapabilitySet 中指定的范围。您可以在此参数中指定多个功能。

字符串数组

Compute

组成计算节点的机器的配置。

MachinePool 对象的数组。

compute.architecture

决定池中机器的指令集合架构。目前,不支持具有不同架构的集群。所有池都必须指定相同的架构。有效值为 amd64arm64。并非所有安装选项都支持 64 位 ARM 架构。要验证您的平台上是否支持您的安装选项,请参阅 选择集群安装方法并为用户准备它中的不同平台支持的安装方法

字符串

compute.hyperthreading

是否在计算机器上启用或禁用并发多 线程或超线程。默认情况下,启用并发多线程以提高机器内核的性能。

重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。

enabledDisabled

compute.name

使用 compute 时需要此项。机器池的名称。

worker

compute.platform

使用 compute 时需要此项。使用此参数指定托管 worker 机器的云供应商。此参数值必须与 controlPlane.platform 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, 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 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, vsphere, 或 {}

controlPlane.replicas

要置备的 control plane 机器数量。

唯一支持的值是 3,这是默认值。

credentialsMode

Cloud Credential Operator(CCO)模式。如果没有指定模式,CCO 会动态尝试决定提供的凭证的功能,在支持多个模式的平台上首选 mint 模式。

注意

不是所有 CCO 模式都支持所有云供应商。如需有关 CCO 模式的更多信息,请参阅集群 Operator 参考内容中的 Cloud Credential Operator 条目。

注意

如果您的 AWS 帐户启用了服务控制策略 (SCP),您必须将 credentialsMode 参数配置为 MintPassthroughManual

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 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

注意

如果使用 Azure File 存储,则无法启用 FIPS 模式。

falsetrue

imageContentSources

release-image 内容的源和存储库。

对象数组。包括一个 source 以及可选的 mirrors,如本表的以下行所述。

imageContentSources.source

使用 imageContentSources 时需要此项。指定用户在镜像拉取规格中引用的存储库。

字符串

imageContentSources.mirrors

指定可能还包含同一镜像的一个或多个仓库。

字符串数组

publish

如何发布或公开集群的面向用户的端点,如 Kubernetes API、OpenShift 路由。

内部或外部 .要部署无法从互联网访问的私有集群,请将 publish 设置为 Internal。默认值为 External

sshKey

用于验证对集群机器的访问的 SSH 密钥。

注意

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

例如,sshKey: ssh-ed25519 AAAA..

7.5.1.4. 其他 Azure 配置参数

下表描述了其他 Azure 配置参数。

注意

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

Expand
表 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.vmNetworkingType

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。如果计算机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated 网络,否则默认网络类型为 Basic

AcceleratedBasic

compute.platform.azure.type

为计算机器定义 Azure 实例类型。

字符串

compute.platform.azure.zones

安装程序在其中创建计算机器的可用区。

字符串列表

controlPlane.platform.azure.type

为 control plane 机器定义 Azure 实例类型。

字符串

controlPlane.platform.azure.zones

安装程序在其中创建 control plane 机器的可用区。

字符串列表

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

用于将集群连接到互联网的出站路由策略。如果您使用用户定义的路由,则必须在安装集群前配置出站路由。安装程序不负责配置用户定义的路由。

LoadBalancerUserDefinedRouting。默认值为 LoadBalancer

platform.azure.region

托管集群的 Azure 区域的名称。

任何有效的区域名称,如 centralus

platform.azure.zone

要放入机器的可用区列表。如需高可用性,请至少指定两个区域。

区域列表,如 ["1", "2", "3"]

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

注意

您无法自定义 Azure 可用区,也不能使用 标签来整理 Azure 集群的 Azure 资源

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

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

Expand
表 7.5. 最低资源要求
机器操作系统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 及更新的版本中删除。
重要

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

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

7.5.3. 为 Azure 测试的实例类型

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

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

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • StandardDdsv6Family
  • standardDLDSv5Family
  • StandardDldsv6Family
  • standardDLSv5Family
  • StandardDlsv6Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • StandardDsv6Family
  • 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
  • standardLasv4Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardLsv4Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • StandardNVadsV710v5Family
  • Standard NDASv4_A100 Family
  • standardNVSv3Family
  • standardXEISv4Family

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

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

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
  • StandardDpdsv6Family
  • StandardDpldsv6Famil
  • StandardDplsv6Family
  • StandardDpsv6Family
  • StandardEpdsv6Family
  • StandardEpsv6Family

7.5.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
      type: Standard_D8s_v3
  replicas: 3
compute: 
6

- hyperthreading: Enabled 
7

  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 
8

        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      zones: 
9

      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 
10

networking: 
11

  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:
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 
13

    region: centralus 
14

    resourceGroupName: existing_resource_group 
15

    outboundType: Loadbalancer
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 
16

fips: false 
17

sshKey: ssh-ed25519 AAAA... 
18
Copy to Clipboard Toggle word wrap
1 10 14 16
必需。安装程序会提示您输入这个值。
2 6 11
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

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

5 8
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
9
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
12
要安装的集群网络插件。支持的值有 OVNKubernetesOpenShiftSDN。默认值为 OVNKubernetes
13
指定包含基域的 DNS 区的资源组的名称。
15
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
17
是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。
重要

要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

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

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

7.5.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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

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

注意

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

7.6. 网络配置阶段

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

第 1 阶段

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

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

    有关这些字段的更多信息,请参阅 安装配置参数

    注意

    networking.machineNetwork 设置为与首选 NIC 所在的 CIDR 匹配。

    重要

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

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

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

7.7. 指定高级网络配置

您可以使用网络插件的高级网络配置将集群集成到现有网络环境中。您只能在安装集群前指定高级网络配置。

重要

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

先决条件

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

流程

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

    $ ./openshift-install create manifests --dir <installation_directory> 
    1
    Copy to Clipboard Toggle word wrap
    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:
    Copy to Clipboard Toggle word wrap
  3. cluster-network-03-config.yml 文件中指定集群的高级网络配置,如下例所示:

    为 OpenShift SDN 网络供应商指定不同的 VXLAN 端口

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      defaultNetwork:
        openshiftSDNConfig:
          vxlanPort: 4800
    Copy to Clipboard Toggle word wrap

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

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      defaultNetwork:
        ovnKubernetesConfig:
          ipsecConfig: {}
    Copy to Clipboard Toggle word wrap

  4. 可选:备份 manifests/cluster-network-03-config.yml 文件。创建 Ignition 配置文件时,安装程序会使用 manifests/ 目录。

7.8. 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
集群网络插件,如 OpenShift SDN 或 OVN-Kubernetes。

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

7.8.1. Cluster Network Operator 配置对象

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

Expand
表 7.6. 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
Copy to Clipboard Toggle word wrap

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

spec.serviceNetwork

array

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

spec:
  serviceNetwork:
  - 172.30.0.0/14
Copy to Clipboard Toggle word wrap

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

spec.defaultNetwork

object

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

spec.kubeProxyConfig

object

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

重要

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

defaultNetwork 对象配置

下表列出了 defaultNetwork 对象的值:

Expand
表 7.7. defaultNetwork 对象
字段类型描述

type

字符串

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

注意

OpenShift Container Platform 默认使用 OVN-Kubernetes 网络插件。

openshiftSDNConfig

object

此对象仅对 OpenShift SDN 网络插件有效。

ovnKubernetesConfig

object

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

配置 OpenShift SDN 网络插件

下表描述了 OpenShift SDN 网络插件的配置字段:

Expand
表 7.8. openshiftSDNConfig object
字段类型描述

模式

字符串

配置 OpenShift SDN 的网络隔离模式。默认值为 NetworkPolicy

MultitenantSubnet 值可用于向后兼容 OpenShift Container Platform 3.x,但不建议使用。此值在集群安装后无法更改。

mtu

integer

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

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

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

您可以在集群安装过程中或安装后任务设置值。如需更多信息,请参阅 OpenShift Container Platform 网络文档中的"删除集群网络 MTU"。

vxlanPort

integer

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

如果您在虚拟环境中运行,且现有节点是另一个 VXLAN 网络的一部分,则可能需要更改此设置。例如,在 VMware NSX-T 上运行 OpenShift SDN 覆盖时,您必须为 VXLAN 选择一个备用端口,因为两个 SDN 都使用相同的默认 VXLAN 端口号。

在 Amazon Web Services(AWS)上,您可以在端口 9000 和端口 9999 之间为 VXLAN 选择一个备用端口。

配置 OVN-Kubernetes 网络插件

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

Expand
表 7.9. 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 加密。

policyAuditConfig

object

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

gatewayConfig

object

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

注意

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

v4InternalSubnet

如果您的现有网络基础架构与 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

v6InternalSubnet

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

在安装后无法更改此字段。

默认值为 fd98::/48

Expand
表 7.10. policyAuditConfig object
字段类型描述

rateLimit

整数

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

maxFileSize

整数

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

目的地

字符串

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

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

syslogFacility

字符串

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

Expand
表 7.11. gatewayConfig object
字段类型描述

routingViaHost

布尔值

将此字段设置为 true,将来自 pod 的出口流量发送到主机网络堆栈。

注意

在 OpenShift Container Platform 4.12 中,出口 IP 仅分配给主接口。因此,将 routingViaHost 设置为 true 将无法用于 OpenShift Container Platform 4.12 中的出口 IP。

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

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

启用 IPSec 的 OVN-Kubernetes 配置示例

defaultNetwork:
  type: OVNKubernetes
  ovnKubernetesConfig:
    mtu: 1400
    genevePort: 6081
    ipsecConfig: {}
Copy to Clipboard Toggle word wrap

kubeProxyConfig object configuration

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

Expand
表 7.12. kubeProxyConfig object
字段类型描述

iptablesSyncPeriod

字符串

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

注意

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

proxyArguments.iptables-min-sync-period

array

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

kubeProxyConfig:
  proxyArguments:
    iptables-min-sync-period:
    - 0s
Copy to Clipboard Toggle word wrap

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

您可以将集群配置为使用 OVN-Kubernetes 的混合网络。这允许支持不同节点网络配置的混合集群。例如:集群中运行 Linux 和 Windows 节点时需要这样做。

重要

您必须在安装集群过程中使用 OVN-Kubernetes 配置混合网络。您不能在安装过程中切换到混合网络。

先决条件

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

流程

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

    $ ./openshift-install create manifests --dir <installation_directory>
    Copy to Clipboard Toggle word wrap

    其中:

    <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
    Copy to Clipboard Toggle word wrap

    其中:

    <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
    Copy to Clipboard Toggle word wrap

    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 容器工作负载

7.10. 部署集群

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

重要

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

先决条件

  • 使用托管集群的云平台配置帐户。
  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 验证主机上的云供应商帐户是否有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示包括缺失权限的错误消息。

流程

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

    $ ./openshift-install create cluster --dir <installation_directory> \ 
    1
    
        --log-level=info 
    2
    Copy to Clipboard Toggle word wrap
    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
Copy to Clipboard Toggle word wrap

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

7.11. 安装后最终调整用户管理的加密

如果使用用户管理的加密密钥安装 OpenShift Container Platform,您可以通过创建新存储类并授予 Azure 集群资源组写入权限来完成安装。

流程

  1. 获取安装程序使用的集群资源组的身份:

    1. 如果在 install-config.yaml 中指定了现有资源组,请运行以下命令获取其 Azure 身份:

      $ az identity list --resource-group "<existing_resource_group>"
      Copy to Clipboard Toggle word wrap
    2. 如果您没有在 install-config.yaml 中指定现有资源组,请找到安装程序创建的资源组,然后运行以下命令来获取其 Azure 身份:

      $ az group list
      Copy to Clipboard Toggle word wrap
      $ az identity list --resource-group "<installer_created_resource_group>"
      Copy to Clipboard Toggle word wrap
  2. 运行以下命令,为集群资源组授予角色分配,使其可以写入 Disk Encryption Set:

    $ az role assignment create --role "<privileged_role>" \
    1
    
        --assignee "<resource_group_identity>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定对磁盘加密集具有读/写权限的 Azure 角色。您可以使用 Owner 角色或具有所需权限的自定义角色。
    2
    指定集群资源组的身份。
  3. 运行以下命令,获取在安装前创建的磁盘加密集的 id

    $ az disk-encryption-set show -n <disk_encryption_set_name> \
    1
    
         --resource-group <resource_group_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定磁盘加密集的名称。
    2
    指定包含磁盘加密集的资源组。id 的格式是 "/subscriptions/…​/resourceGroups/…​/providers/Microsoft.Compute/diskEncryptionSets/…​"
  4. 运行以下命令,获取集群服务主体的身份:

    $ az identity show -g <cluster_resource_group> \
    1
    
         -n <cluster_service_principal_name> \
    2
    
         --query principalId --out tsv
    Copy to Clipboard Toggle word wrap
    1
    指定安装程序创建的集群资源组的名称。
    2
    指定安装程序创建的集群服务主体的名称。身份的格式是 12345678-1234-1234-1234-1234567890
  5. 运行以下命令,创建一个角色分配,为磁盘加密集授予集群服务主体必要的权限:

    $ az role assignment create --assignee <cluster_service_principal_id> \
    1
    
         --role <privileged_role> \
    2
    
         --scope <disk_encryption_set_id> \
    3
    Copy to Clipboard Toggle word wrap
    1
    指定上一步中获得的集群服务主体的 ID。
    2
    指定 Azure 角色名称。您可以使用 Contributor 角色或具有所需权限的自定义角色。
    3
    指定磁盘加密集的 ID。
  6. 创建使用用户管理的磁盘加密集的存储类:

    1. 将以下存储类定义保存到文件中,如 storage-class-definition.yaml

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: managed-premium
      provisioner: kubernetes.io/azure-disk
      parameters:
        skuname: Premium_LRS
        kind: Managed
        diskEncryptionSetID: "<disk_encryption_set_ID>" 
      1
      
        resourceGroup: "<resource_group_name>" 
      2
      
      reclaimPolicy: Delete
      allowVolumeExpansion: true
      volumeBindingMode: WaitForFirstConsumer
      Copy to Clipboard Toggle word wrap
      1
      指定您在先决条件步骤中创建的磁盘加密集的 ID,例如 "/subscriptions/xxxxxx-xxxxx-xxxxx/resourceGroups/test-encryption/providers/Microsoft.Compute/diskEncryptionSets/disk-encryption-set-xxxxxx"
      2
      指定安装程序使用的资源组的名称。这是第一步中的资源组。
    2. 从您创建的文件创建存储类 managed-premium

      $ oc create -f storage-class-definition.yaml
      Copy to Clipboard Toggle word wrap
  7. 在创建持久性卷以使用加密存储时,选择 managed-premium 存储类。

7.12. 通过下载二进制文件安装 OpenShift CLI

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

重要

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

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap

7.13. 使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件,以默认系统用户身份登录集群。kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。

先决条件

  • 已部署 OpenShift Container Platform 集群。
  • 已安装 oc CLI。

流程

  1. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令:

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    输出示例

    system:admin
    Copy to Clipboard Toggle word wrap

7.14. OpenShift Container Platform 的 Telemetry 访问

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

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

7.15. 后续步骤

第 8 章 将 Azure 上的集群安装到现有的 VNet

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

8.1. 先决条件

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

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

8.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。机器不会在您不为其提供私有子网的可用区中置备。如果需要,安装程序会创建管理 control plane 和 worker 节点的公共负载均衡器,Azure 会为其分配一个公共 IP 地址。
注意

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

8.2.1.1. 网络安全组要求

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

重要

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

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

80

允许 HTTP 流量

 

x

443

允许 HTTPS 流量

 

x

6443

允许与 control plane 机器通信

x

 

22623

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

x

 
重要

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

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

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

8.2.2. 权限划分

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

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

8.2.3. 集群间隔离

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

8.3. OpenShift Container Platform 互联网访问

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

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

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

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

8.4. 为集群节点 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
    Copy to Clipboard Toggle word wrap
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 FIPS 验证或 Modules In Process 加密库的 OpenShift Container Platform 集群。请不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub
    Copy to Clipboard Toggle word wrap

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

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

    注意

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

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

      $ eval "$(ssh-agent -s)"
      Copy to Clipboard Toggle word wrap

      输出示例

      Agent pid 31874
      Copy to Clipboard Toggle word wrap

      注意

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

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

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

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
    Copy to Clipboard Toggle word wrap

后续步骤

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

8.5. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,本地磁盘空间为 500 MB。

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

    安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。这两个文件都需要删除集群。

    重要

    删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。

  4. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

8.6. 创建安装配置文件

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

先决条件

  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 在订阅级别获取服务主体权限。

流程

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

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

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

      在指定目录时:

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

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

        注意

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

      2. 选择 azure 作为目标平台。
      3. 如果计算机上没有 Microsoft Azure 配置集,请为您的订阅和服务主体指定以下 Azure 参数值:

        • azure subscription id:要用于集群的订阅 ID。指定帐户输出中的 id 值。
        • azure tenant id:租户 ID。指定帐户输出中的 tenantId 值。
        • azure service principal client id:服务主体的 appId 参数值。
        • azure service principal client secret:服务主体的 password 参数值。
      4. 选择要在其中部署集群的区域。
      5. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      6. 为集群输入一个描述性名称。

        重要

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

      7. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret
  2. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  3. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

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

8.6.1. 安装配置参数

在部署 OpenShift Container Platform 集群前,您可以提供参数值来描述托管集群的云平台中的帐户,并选择性地自定义集群平台。在创建 install-config.yaml 安装配置文件时,您可以通过命令行为所需参数提供值。如果自定义集群,您可以修改 install-config.yaml 文件以提供有关平台的更多详情。

注意

安装后,您无法在 install-config.yaml 文件中修改这些参数。

8.6.1.1. 所需的配置参数

下表描述了所需的安装配置参数:

Expand
表 8.2. 所需的参数
参数描述

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

要执行安装的具体平台配置: alibabacloudawsbaremetalazuregcpibmcloudnutanixopenstackovirtvsphere{}。有关 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"
      }
   }
}
Copy to Clipboard Toggle word wrap
8.6.1.2. 网络配置参数

您可以根据现有网络基础架构的要求自定义安装配置。例如,您可以扩展集群网络的 IP 地址块,或者提供不同于默认值的不同 IP 地址块。

仅支持 IPv4 地址。

注意

Red Hat OpenShift Data Foundation 灾难恢复解决方案不支持 Globalnet。对于区域灾难恢复场景,请确保为每个集群中的集群和服务网络使用非重叠的专用 IP 地址。

Expand
表 8.3. 网络参数
参数描述

networking

集群网络的配置。

对象

注意

您无法在安装后修改 网络 对象指定的参数。

networking.networkType

要安装的 Red Hat OpenShift Networking 网络插件。

OpenShiftSDNOVNKubernetesOpenShiftSDN 是 all-Linux 网络的 CNI 插件。OVNKubernetes 是 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
Copy to Clipboard Toggle word wrap

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

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

CIDR 格式具有 IP 地址块的数组。例如:

networking:
  serviceNetwork:
   - 172.30.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork

机器的 IP 地址块。

如果您指定了多个 IP 地址块,块不得重叠。

对象数组。例如:

networking:
  machineNetwork:
  - cidr: 10.0.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork.cidr

使用 networking.machineNetwork 时需要此项。IP 地址块。libvirt 之外的所有平台的默认值为 10.0.0.0/16。对于 libvirt,默认值 为 192.168.126.0/24

CIDR 表示法中的 IP 网络块。

例如: 10.0.0.0/16

注意

networking.machineNetwork 设置为与首选 NIC 所在的 CIDR 匹配。

8.6.1.3. 可选的配置参数

下表描述了可选的安装配置参数:

Expand
表 8.4. 可选参数
参数描述

additionalTrustBundle

添加到节点可信证书存储中的 PEM 编码 X.509 证书捆绑包。配置了代理时,也可以使用此信任捆绑包。

字符串

功能

控制可选核心组件的安装。您可以通过禁用可选组件来减少 OpenShift Container Platform 集群的空间。如需更多信息,请参阅安装中的"集群功能"页面。

字符串数组

capabilities.baselineCapabilitySet

选择要启用的一组初始可选功能。有效值为 Nonev4.11v4.12vCurrent。默认值为 vCurrent

字符串

capabilities.additionalEnabledCapabilities

将可选功能集合扩展到您在 baselineCapabilitySet 中指定的范围。您可以在此参数中指定多个功能。

字符串数组

Compute

组成计算节点的机器的配置。

MachinePool 对象的数组。

compute.architecture

决定池中机器的指令集合架构。目前,不支持具有不同架构的集群。所有池都必须指定相同的架构。有效值为 amd64arm64。并非所有安装选项都支持 64 位 ARM 架构。要验证您的平台上是否支持您的安装选项,请参阅 选择集群安装方法并为用户准备它中的不同平台支持的安装方法

字符串

compute.hyperthreading

是否在计算机器上启用或禁用并发多 线程或超线程。默认情况下,启用并发多线程以提高机器内核的性能。

重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。

enabledDisabled

compute.name

使用 compute 时需要此项。机器池的名称。

worker

compute.platform

使用 compute 时需要此项。使用此参数指定托管 worker 机器的云供应商。此参数值必须与 controlPlane.platform 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, 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 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, vsphere, 或 {}

controlPlane.replicas

要置备的 control plane 机器数量。

唯一支持的值是 3,这是默认值。

credentialsMode

Cloud Credential Operator(CCO)模式。如果没有指定模式,CCO 会动态尝试决定提供的凭证的功能,在支持多个模式的平台上首选 mint 模式。

注意

不是所有 CCO 模式都支持所有云供应商。如需有关 CCO 模式的更多信息,请参阅集群 Operator 参考内容中的 Cloud Credential Operator 条目。

注意

如果您的 AWS 帐户启用了服务控制策略 (SCP),您必须将 credentialsMode 参数配置为 MintPassthroughManual

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 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

注意

如果使用 Azure File 存储,则无法启用 FIPS 模式。

falsetrue

imageContentSources

release-image 内容的源和存储库。

对象数组。包括一个 source 以及可选的 mirrors,如本表的以下行所述。

imageContentSources.source

使用 imageContentSources 时需要此项。指定用户在镜像拉取规格中引用的存储库。

字符串

imageContentSources.mirrors

指定可能还包含同一镜像的一个或多个仓库。

字符串数组

publish

如何发布或公开集群的面向用户的端点,如 Kubernetes API、OpenShift 路由。

内部或外部 .要部署无法从互联网访问的私有集群,请将 publish 设置为 Internal。默认值为 External

sshKey

用于验证对集群机器的访问的 SSH 密钥。

注意

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

例如,sshKey: ssh-ed25519 AAAA..

8.6.1.4. 其他 Azure 配置参数

下表描述了其他 Azure 配置参数。

注意

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

Expand
表 8.5. 其他 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.vmNetworkingType

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。如果计算机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated 网络,否则默认网络类型为 Basic

AcceleratedBasic

compute.platform.azure.type

为计算机器定义 Azure 实例类型。

字符串

compute.platform.azure.zones

安装程序在其中创建计算机器的可用区。

字符串列表

controlPlane.platform.azure.type

为 control plane 机器定义 Azure 实例类型。

字符串

controlPlane.platform.azure.zones

安装程序在其中创建 control plane 机器的可用区。

字符串列表

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

用于将集群连接到互联网的出站路由策略。如果您使用用户定义的路由,则必须在安装集群前配置出站路由。安装程序不负责配置用户定义的路由。

LoadBalancerUserDefinedRouting。默认值为 LoadBalancer

platform.azure.region

托管集群的 Azure 区域的名称。

任何有效的区域名称,如 centralus

platform.azure.zone

要放入机器的可用区列表。如需高可用性,请至少指定两个区域。

区域列表,如 ["1", "2", "3"]

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

注意

您无法自定义 Azure 可用区,也不能使用 标签来整理 Azure 集群的 Azure 资源

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

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

Expand
表 8.6. 最低资源要求
机器操作系统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 及更新的版本中删除。
重要

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

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

8.6.3. 为 Azure 测试的实例类型

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

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

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • StandardDdsv6Family
  • standardDLDSv5Family
  • StandardDldsv6Family
  • standardDLSv5Family
  • StandardDlsv6Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • StandardDsv6Family
  • 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
  • standardLasv4Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardLsv4Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • StandardNVadsV710v5Family
  • Standard NDASv4_A100 Family
  • standardNVSv3Family
  • standardXEISv4Family

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

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

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
  • StandardDpdsv6Family
  • StandardDpldsv6Famil
  • StandardDplsv6Family
  • StandardDpsv6Family
  • StandardEpdsv6Family
  • StandardEpsv6Family

8.6.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
      type: Standard_D8s_v3
  replicas: 3
compute: 
6

- hyperthreading: Enabled 
7

  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 
8

        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      zones: 
9

      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 
10

networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 
11

  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 
12

    region: centralus 
13

    resourceGroupName: existing_resource_group 
14

    networkResourceGroupName: vnet_resource_group 
15

    virtualNetwork: vnet 
16

    controlPlaneSubnet: control_plane_subnet 
17

    computeSubnet: compute_subnet 
18

    outboundType: Loadbalancer
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 
19

fips: false 
20

sshKey: ssh-ed25519 AAAA... 
21
Copy to Clipboard Toggle word wrap
1 10 13 19
必需。安装程序会提示您输入这个值。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

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

5 8
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
9
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
11
要安装的集群网络插件。支持的值有 OVNKubernetesOpenShiftSDN。默认值为 OVNKubernetes
12
指定包含基域的 DNS 区的资源组的名称。
14
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
15
如果使用现有的 VNet,请指定包含它的资源组的名称。
16
如果使用现有的 VNet,请指定其名称。
17
如果使用现有的 VNet,请指定托管 control plane 机器的子网名称。
18
如果使用现有的 VNet,请指定托管计算机器的子网名称。
20
是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。
重要

要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

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

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

8.6.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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

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

注意

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

8.7. 部署集群

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

重要

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

先决条件

  • 使用托管集群的云平台配置帐户。
  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 验证主机上的云供应商帐户是否有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示包括缺失权限的错误消息。

流程

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

    $ ./openshift-install create cluster --dir <installation_directory> \ 
    1
    
        --log-level=info 
    2
    Copy to Clipboard Toggle word wrap
    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
Copy to Clipboard Toggle word wrap

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

8.8. 安装后最终调整用户管理的加密

如果使用用户管理的加密密钥安装 OpenShift Container Platform,您可以通过创建新存储类并授予 Azure 集群资源组写入权限来完成安装。

流程

  1. 获取安装程序使用的集群资源组的身份:

    1. 如果在 install-config.yaml 中指定了现有资源组,请运行以下命令获取其 Azure 身份:

      $ az identity list --resource-group "<existing_resource_group>"
      Copy to Clipboard Toggle word wrap
    2. 如果您没有在 install-config.yaml 中指定现有资源组,请找到安装程序创建的资源组,然后运行以下命令来获取其 Azure 身份:

      $ az group list
      Copy to Clipboard Toggle word wrap
      $ az identity list --resource-group "<installer_created_resource_group>"
      Copy to Clipboard Toggle word wrap
  2. 运行以下命令,为集群资源组授予角色分配,使其可以写入 Disk Encryption Set:

    $ az role assignment create --role "<privileged_role>" \
    1
    
        --assignee "<resource_group_identity>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定对磁盘加密集具有读/写权限的 Azure 角色。您可以使用 Owner 角色或具有所需权限的自定义角色。
    2
    指定集群资源组的身份。
  3. 运行以下命令,获取在安装前创建的磁盘加密集的 id

    $ az disk-encryption-set show -n <disk_encryption_set_name> \
    1
    
         --resource-group <resource_group_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定磁盘加密集的名称。
    2
    指定包含磁盘加密集的资源组。id 的格式是 "/subscriptions/…​/resourceGroups/…​/providers/Microsoft.Compute/diskEncryptionSets/…​"
  4. 运行以下命令,获取集群服务主体的身份:

    $ az identity show -g <cluster_resource_group> \
    1
    
         -n <cluster_service_principal_name> \
    2
    
         --query principalId --out tsv
    Copy to Clipboard Toggle word wrap
    1
    指定安装程序创建的集群资源组的名称。
    2
    指定安装程序创建的集群服务主体的名称。身份的格式是 12345678-1234-1234-1234-1234567890
  5. 运行以下命令,创建一个角色分配,为磁盘加密集授予集群服务主体必要的权限:

    $ az role assignment create --assignee <cluster_service_principal_id> \
    1
    
         --role <privileged_role> \
    2
    
         --scope <disk_encryption_set_id> \
    3
    Copy to Clipboard Toggle word wrap
    1
    指定上一步中获得的集群服务主体的 ID。
    2
    指定 Azure 角色名称。您可以使用 Contributor 角色或具有所需权限的自定义角色。
    3
    指定磁盘加密集的 ID。
  6. 创建使用用户管理的磁盘加密集的存储类:

    1. 将以下存储类定义保存到文件中,如 storage-class-definition.yaml

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: managed-premium
      provisioner: kubernetes.io/azure-disk
      parameters:
        skuname: Premium_LRS
        kind: Managed
        diskEncryptionSetID: "<disk_encryption_set_ID>" 
      1
      
        resourceGroup: "<resource_group_name>" 
      2
      
      reclaimPolicy: Delete
      allowVolumeExpansion: true
      volumeBindingMode: WaitForFirstConsumer
      Copy to Clipboard Toggle word wrap
      1
      指定您在先决条件步骤中创建的磁盘加密集的 ID,例如 "/subscriptions/xxxxxx-xxxxx-xxxxx/resourceGroups/test-encryption/providers/Microsoft.Compute/diskEncryptionSets/disk-encryption-set-xxxxxx"
      2
      指定安装程序使用的资源组的名称。这是第一步中的资源组。
    2. 从您创建的文件创建存储类 managed-premium

      $ oc create -f storage-class-definition.yaml
      Copy to Clipboard Toggle word wrap
  7. 在创建持久性卷以使用加密存储时,选择 managed-premium 存储类。

8.9. 通过下载二进制文件安装 OpenShift CLI

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

重要

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

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap

8.10. 使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件,以默认系统用户身份登录集群。kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。

先决条件

  • 已部署 OpenShift Container Platform 集群。
  • 已安装 oc CLI。

流程

  1. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令:

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    输出示例

    system:admin
    Copy to Clipboard Toggle word wrap

8.11. OpenShift Container Platform 的 Telemetry 访问

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

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

8.12. 后续步骤

第 9 章 在 Azure 上安装私有集群

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

9.1. 先决条件

9.2. 私有集群

您可以部署不公开外部端点的私有 OpenShift Container Platform 集群。私有集群只能从内部网络访问,且无法在互联网中看到。

默认情况下,OpenShift Container Platform 被置备为使用可公开访问的 DNS 和端点。在部署集群时,私有集群会将 DNS、Ingress Controller 和 API 服务器设置为私有。这意味着集群资源只能从您的内部网络访问,且不能在互联网中看到。

重要

如果集群有任何公共子网,管理员创建的负载均衡器服务可能会公开访问。为确保集群安全性,请验证这些服务是否已明确标注为私有。

要部署私有集群,您必须:

  • 使用满足您的要求的现有网络。集群资源可能会在网络上的其他集群间共享。
  • 从有权访问的机器中部署:

    • 您置备的云的 API 服务。
    • 您调配的网络上的主机。
    • 用于获取安装介质的互联网。

您可以使用符合这些访问要求的机器,并按照您的公司规定进行操作。例如,此机器可以是云网络上的堡垒主机,也可以是可通过 VPN 访问网络的机器。

9.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.
    Copy to Clipboard Toggle word wrap
9.2.1.1. 限制

Azure 上的私有集群只受到与使用现有 VNet 相关的限制。

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

在满足这些要求时,您可以使用用户定义的路由来创建没有公共端点的私有集群。

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

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

9.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。机器不会在没有为其提供私有子网的可用区中置备。
注意

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

9.3.1.1. 网络安全组要求

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

重要

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

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

80

允许 HTTP 流量

 

x

443

允许 HTTPS 流量

 

x

6443

允许与 control plane 机器通信

x

 

22623

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

x

 
重要

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

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

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

9.3.2. 权限划分

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

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

9.3.3. 集群间隔离

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

9.4. OpenShift Container Platform 互联网访问

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

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

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

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

9.5. 为集群节点 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
    Copy to Clipboard Toggle word wrap
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 FIPS 验证或 Modules In Process 加密库的 OpenShift Container Platform 集群。请不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub
    Copy to Clipboard Toggle word wrap

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

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

    注意

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

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

      $ eval "$(ssh-agent -s)"
      Copy to Clipboard Toggle word wrap

      输出示例

      Agent pid 31874
      Copy to Clipboard Toggle word wrap

      注意

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

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

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

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
    Copy to Clipboard Toggle word wrap

后续步骤

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

9.6. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,本地磁盘空间为 500 MB。

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

    安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。这两个文件都需要删除集群。

    重要

    删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。

  4. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

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

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

先决条件

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

流程

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

    $ mkdir <installation_directory>
    Copy to Clipboard Toggle word wrap
    重要

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

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

    注意

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

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

    重要

    现在备份 install-config.yaml 文件,因为安装过程会在下一步中消耗该文件。

9.7.1. 安装配置参数

在部署 OpenShift Container Platform 集群前,您可以提供参数值来描述托管集群的云平台中的帐户,并选择性地自定义集群平台。在创建 install-config.yaml 安装配置文件时,您可以通过命令行为所需参数提供值。如果自定义集群,您可以修改 install-config.yaml 文件以提供有关平台的更多详情。

注意

安装后,您无法在 install-config.yaml 文件中修改这些参数。

9.7.1.1. 所需的配置参数

下表描述了所需的安装配置参数:

Expand
表 9.2. 所需的参数
参数描述

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

要执行安装的具体平台配置: alibabacloudawsbaremetalazuregcpibmcloudnutanixopenstackovirtvsphere{}。有关 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"
      }
   }
}
Copy to Clipboard Toggle word wrap
9.7.1.2. 网络配置参数

您可以根据现有网络基础架构的要求自定义安装配置。例如,您可以扩展集群网络的 IP 地址块,或者提供不同于默认值的不同 IP 地址块。

仅支持 IPv4 地址。

注意

Red Hat OpenShift Data Foundation 灾难恢复解决方案不支持 Globalnet。对于区域灾难恢复场景,请确保为每个集群中的集群和服务网络使用非重叠的专用 IP 地址。

Expand
表 9.3. 网络参数
参数描述

networking

集群网络的配置。

对象

注意

您无法在安装后修改 网络 对象指定的参数。

networking.networkType

要安装的 Red Hat OpenShift Networking 网络插件。

OpenShiftSDNOVNKubernetesOpenShiftSDN 是 all-Linux 网络的 CNI 插件。OVNKubernetes 是 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
Copy to Clipboard Toggle word wrap

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

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

CIDR 格式具有 IP 地址块的数组。例如:

networking:
  serviceNetwork:
   - 172.30.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork

机器的 IP 地址块。

如果您指定了多个 IP 地址块,块不得重叠。

对象数组。例如:

networking:
  machineNetwork:
  - cidr: 10.0.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork.cidr

使用 networking.machineNetwork 时需要此项。IP 地址块。libvirt 之外的所有平台的默认值为 10.0.0.0/16。对于 libvirt,默认值 为 192.168.126.0/24

CIDR 表示法中的 IP 网络块。

例如: 10.0.0.0/16

注意

networking.machineNetwork 设置为与首选 NIC 所在的 CIDR 匹配。

9.7.1.3. 可选的配置参数

下表描述了可选的安装配置参数:

Expand
表 9.4. 可选参数
参数描述

additionalTrustBundle

添加到节点可信证书存储中的 PEM 编码 X.509 证书捆绑包。配置了代理时,也可以使用此信任捆绑包。

字符串

功能

控制可选核心组件的安装。您可以通过禁用可选组件来减少 OpenShift Container Platform 集群的空间。如需更多信息,请参阅安装中的"集群功能"页面。

字符串数组

capabilities.baselineCapabilitySet

选择要启用的一组初始可选功能。有效值为 Nonev4.11v4.12vCurrent。默认值为 vCurrent

字符串

capabilities.additionalEnabledCapabilities

将可选功能集合扩展到您在 baselineCapabilitySet 中指定的范围。您可以在此参数中指定多个功能。

字符串数组

Compute

组成计算节点的机器的配置。

MachinePool 对象的数组。

compute.architecture

决定池中机器的指令集合架构。目前,不支持具有不同架构的集群。所有池都必须指定相同的架构。有效值为 amd64arm64。并非所有安装选项都支持 64 位 ARM 架构。要验证您的平台上是否支持您的安装选项,请参阅 选择集群安装方法并为用户准备它中的不同平台支持的安装方法

字符串

compute.hyperthreading

是否在计算机器上启用或禁用并发多 线程或超线程。默认情况下,启用并发多线程以提高机器内核的性能。

重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。

enabledDisabled

compute.name

使用 compute 时需要此项。机器池的名称。

worker

compute.platform

使用 compute 时需要此项。使用此参数指定托管 worker 机器的云供应商。此参数值必须与 controlPlane.platform 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, 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 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, vsphere, 或 {}

controlPlane.replicas

要置备的 control plane 机器数量。

唯一支持的值是 3,这是默认值。

credentialsMode

Cloud Credential Operator(CCO)模式。如果没有指定模式,CCO 会动态尝试决定提供的凭证的功能,在支持多个模式的平台上首选 mint 模式。

注意

不是所有 CCO 模式都支持所有云供应商。如需有关 CCO 模式的更多信息,请参阅集群 Operator 参考内容中的 Cloud Credential Operator 条目。

注意

如果您的 AWS 帐户启用了服务控制策略 (SCP),您必须将 credentialsMode 参数配置为 MintPassthroughManual

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 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

注意

如果使用 Azure File 存储,则无法启用 FIPS 模式。

falsetrue

imageContentSources

release-image 内容的源和存储库。

对象数组。包括一个 source 以及可选的 mirrors,如本表的以下行所述。

imageContentSources.source

使用 imageContentSources 时需要此项。指定用户在镜像拉取规格中引用的存储库。

字符串

imageContentSources.mirrors

指定可能还包含同一镜像的一个或多个仓库。

字符串数组

publish

如何发布或公开集群的面向用户的端点,如 Kubernetes API、OpenShift 路由。

内部或外部 .要部署无法从互联网访问的私有集群,请将 publish 设置为 Internal。默认值为 External

sshKey

用于验证对集群机器的访问的 SSH 密钥。

注意

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

例如,sshKey: ssh-ed25519 AAAA..

9.7.1.4. 其他 Azure 配置参数

下表描述了其他 Azure 配置参数。

注意

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

Expand
表 9.5. 其他 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.vmNetworkingType

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。如果计算机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated 网络,否则默认网络类型为 Basic

AcceleratedBasic

compute.platform.azure.type

为计算机器定义 Azure 实例类型。

字符串

compute.platform.azure.zones

安装程序在其中创建计算机器的可用区。

字符串列表

controlPlane.platform.azure.type

为 control plane 机器定义 Azure 实例类型。

字符串

controlPlane.platform.azure.zones

安装程序在其中创建 control plane 机器的可用区。

字符串列表

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

用于将集群连接到互联网的出站路由策略。如果您使用用户定义的路由,则必须在安装集群前配置出站路由。安装程序不负责配置用户定义的路由。

LoadBalancerUserDefinedRouting。默认值为 LoadBalancer

platform.azure.region

托管集群的 Azure 区域的名称。

任何有效的区域名称,如 centralus

platform.azure.zone

要放入机器的可用区列表。如需高可用性,请至少指定两个区域。

区域列表,如 ["1", "2", "3"]

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

注意

您无法自定义 Azure 可用区,也不能使用 标签来整理 Azure 集群的 Azure 资源

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

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

Expand
表 9.6. 最低资源要求
机器操作系统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 及更新的版本中删除。
重要

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

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

9.7.3. 为 Azure 测试的实例类型

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

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

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • StandardDdsv6Family
  • standardDLDSv5Family
  • StandardDldsv6Family
  • standardDLSv5Family
  • StandardDlsv6Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • StandardDsv6Family
  • 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
  • standardLasv4Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardLsv4Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • StandardNVadsV710v5Family
  • Standard NDASv4_A100 Family
  • standardNVSv3Family
  • standardXEISv4Family

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

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

  • standardBpsv2Family
  • standardDPSv5Family
  • standardDPDSv5Family
  • standardDPLDSv5Family
  • standardDPLSv5Family
  • standardEPSv5Family
  • standardEPDSv5Family
  • StandardDpdsv6Family
  • StandardDpldsv6Famil
  • StandardDplsv6Family
  • StandardDpsv6Family
  • StandardEpdsv6Family
  • StandardEpsv6Family

9.7.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
      type: Standard_D8s_v3
  replicas: 3
compute: 
6

- hyperthreading: Enabled 
7

  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 
8

        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      zones: 
9

      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 
10

networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 
11

  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 
12

    region: centralus 
13

    resourceGroupName: existing_resource_group 
14

    networkResourceGroupName: vnet_resource_group 
15

    virtualNetwork: vnet 
16

    controlPlaneSubnet: control_plane_subnet 
17

    computeSubnet: compute_subnet 
18

    outboundType: UserDefinedRouting 
19

    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' 
20

fips: false 
21

sshKey: ssh-ed25519 AAAA... 
22

publish: Internal 
23
Copy to Clipboard Toggle word wrap
1 10 13 20
必需。安装程序会提示您输入这个值。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

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

5 8
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
9
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
11
要安装的集群网络插件。支持的值有 OVNKubernetesOpenShiftSDN。默认值为 OVNKubernetes
12
指定包含基域的 DNS 区的资源组的名称。
14
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
15
如果使用现有的 VNet,请指定包含它的资源组的名称。
16
如果使用现有的 VNet,请指定其名称。
17
如果使用现有的 VNet,请指定托管 control plane 机器的子网名称。
18
如果使用现有的 VNet,请指定托管计算机器的子网名称。
19
您可以自定义自己的出站路由。配置用户定义的路由可防止在集群中公开外部端点。出口的用户定义路由需要将集群部署到现有的 VNet。
21
是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。
重要

要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

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

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

23
如何发布集群的面向用户的端点。将 publish 设置为 Internal 以部署一个私有集群,它不能被互联网访问。默认值为 External

9.7.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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

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

注意

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

9.8. 部署集群

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

重要

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

先决条件

  • 使用托管集群的云平台配置帐户。
  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 验证主机上的云供应商帐户是否有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示包括缺失权限的错误消息。

流程

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

    $ ./openshift-install create cluster --dir <installation_directory> \ 
    1
    
        --log-level=info 
    2
    Copy to Clipboard Toggle word wrap
    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
Copy to Clipboard Toggle word wrap

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

9.9. 安装后最终调整用户管理的加密

如果使用用户管理的加密密钥安装 OpenShift Container Platform,您可以通过创建新存储类并授予 Azure 集群资源组写入权限来完成安装。

流程

  1. 获取安装程序使用的集群资源组的身份:

    1. 如果在 install-config.yaml 中指定了现有资源组,请运行以下命令获取其 Azure 身份:

      $ az identity list --resource-group "<existing_resource_group>"
      Copy to Clipboard Toggle word wrap
    2. 如果您没有在 install-config.yaml 中指定现有资源组,请找到安装程序创建的资源组,然后运行以下命令来获取其 Azure 身份:

      $ az group list
      Copy to Clipboard Toggle word wrap
      $ az identity list --resource-group "<installer_created_resource_group>"
      Copy to Clipboard Toggle word wrap
  2. 运行以下命令,为集群资源组授予角色分配,使其可以写入 Disk Encryption Set:

    $ az role assignment create --role "<privileged_role>" \
    1
    
        --assignee "<resource_group_identity>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定对磁盘加密集具有读/写权限的 Azure 角色。您可以使用 Owner 角色或具有所需权限的自定义角色。
    2
    指定集群资源组的身份。
  3. 运行以下命令,获取在安装前创建的磁盘加密集的 id

    $ az disk-encryption-set show -n <disk_encryption_set_name> \
    1
    
         --resource-group <resource_group_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定磁盘加密集的名称。
    2
    指定包含磁盘加密集的资源组。id 的格式是 "/subscriptions/…​/resourceGroups/…​/providers/Microsoft.Compute/diskEncryptionSets/…​"
  4. 运行以下命令,获取集群服务主体的身份:

    $ az identity show -g <cluster_resource_group> \
    1
    
         -n <cluster_service_principal_name> \
    2
    
         --query principalId --out tsv
    Copy to Clipboard Toggle word wrap
    1
    指定安装程序创建的集群资源组的名称。
    2
    指定安装程序创建的集群服务主体的名称。身份的格式是 12345678-1234-1234-1234-1234567890
  5. 运行以下命令,创建一个角色分配,为磁盘加密集授予集群服务主体必要的权限:

    $ az role assignment create --assignee <cluster_service_principal_id> \
    1
    
         --role <privileged_role> \
    2
    
         --scope <disk_encryption_set_id> \
    3
    Copy to Clipboard Toggle word wrap
    1
    指定上一步中获得的集群服务主体的 ID。
    2
    指定 Azure 角色名称。您可以使用 Contributor 角色或具有所需权限的自定义角色。
    3
    指定磁盘加密集的 ID。
  6. 创建使用用户管理的磁盘加密集的存储类:

    1. 将以下存储类定义保存到文件中,如 storage-class-definition.yaml

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: managed-premium
      provisioner: kubernetes.io/azure-disk
      parameters:
        skuname: Premium_LRS
        kind: Managed
        diskEncryptionSetID: "<disk_encryption_set_ID>" 
      1
      
        resourceGroup: "<resource_group_name>" 
      2
      
      reclaimPolicy: Delete
      allowVolumeExpansion: true
      volumeBindingMode: WaitForFirstConsumer
      Copy to Clipboard Toggle word wrap
      1
      指定您在先决条件步骤中创建的磁盘加密集的 ID,例如 "/subscriptions/xxxxxx-xxxxx-xxxxx/resourceGroups/test-encryption/providers/Microsoft.Compute/diskEncryptionSets/disk-encryption-set-xxxxxx"
      2
      指定安装程序使用的资源组的名称。这是第一步中的资源组。
    2. 从您创建的文件创建存储类 managed-premium

      $ oc create -f storage-class-definition.yaml
      Copy to Clipboard Toggle word wrap
  7. 在创建持久性卷以使用加密存储时,选择 managed-premium 存储类。

9.10. 通过下载二进制文件安装 OpenShift CLI

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

重要

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

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap

9.11. 使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件,以默认系统用户身份登录集群。kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。

先决条件

  • 已部署 OpenShift Container Platform 集群。
  • 已安装 oc CLI。

流程

  1. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令:

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    输出示例

    system:admin
    Copy to Clipboard Toggle word wrap

9.12. OpenShift Container Platform 的 Telemetry 访问

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

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

9.13. 后续步骤

在 OpenShift Container Platform 版本 4.12 中,您可以在 Microsoft Azure 上将集群安装到一个政府区域。要配置政府区域,请在安装集群前修改 install-config.yaml 文件中的参数。

10.1. 先决条件

10.2. Azure 政府区域

OpenShift Container Platform 支持将集群部署到 Microsoft Azure Government(MAG) 区域。MAG 是专门为需要运行敏感负载的美国政府机构、企业、企业和其他美国客户特别设计的。MAG 由仅政府数据中心区域组成,它们都赋予了 影响级别 5 授权

安装到 MAG 区域需要在 install-config.yaml 文件中手动配置 Azure Government 专用云实例和区域。您还必须更新服务主体以引用适当的政府环境。

注意

Azure 政府区域不能使用安装程序的引导终端提示来选择。您必须在 install-config.yaml 文件中手动定义区域。记得还要根据指定的区域设置专用云实例,如 AzureUSrianCloud

10.3. 私有集群

您可以部署不公开外部端点的私有 OpenShift Container Platform 集群。私有集群只能从内部网络访问,且无法在互联网中看到。

默认情况下,OpenShift Container Platform 被置备为使用可公开访问的 DNS 和端点。在部署集群时,私有集群会将 DNS、Ingress Controller 和 API 服务器设置为私有。这意味着集群资源只能从您的内部网络访问,且不能在互联网中看到。

重要

如果集群有任何公共子网,管理员创建的负载均衡器服务可能会公开访问。为确保集群安全性,请验证这些服务是否已明确标注为私有。

要部署私有集群,您必须:

  • 使用满足您的要求的现有网络。集群资源可能会在网络上的其他集群间共享。
  • 从有权访问的机器中部署:

    • 您置备的云的 API 服务。
    • 您调配的网络上的主机。
    • 用于获取安装介质的互联网。

您可以使用符合这些访问要求的机器,并按照您的公司规定进行操作。例如,此机器可以是云网络上的堡垒主机,也可以是可通过 VPN 访问网络的机器。

10.3.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.
    Copy to Clipboard Toggle word wrap
10.3.1.1. 限制

Azure 上的私有集群只受到与使用现有 VNet 相关的限制。

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

在满足这些要求时,您可以使用用户定义的路由来创建没有公共端点的私有集群。

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

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

10.4.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。

10.4.1.1. 网络安全组要求

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

重要

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

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

80

允许 HTTP 流量

 

x

443

允许 HTTPS 流量

 

x

6443

允许与 control plane 机器通信

x

 

22623

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

x

 
重要

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

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

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

10.4.2. 权限划分

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

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

10.4.3. 集群间隔离

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

10.5. OpenShift Container Platform 互联网访问

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

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

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

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

10.6. 为集群节点 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
    Copy to Clipboard Toggle word wrap
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 FIPS 验证或 Modules In Process 加密库的 OpenShift Container Platform 集群。请不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub
    Copy to Clipboard Toggle word wrap

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

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

    注意

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

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

      $ eval "$(ssh-agent -s)"
      Copy to Clipboard Toggle word wrap

      输出示例

      Agent pid 31874
      Copy to Clipboard Toggle word wrap

      注意

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

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

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

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
    Copy to Clipboard Toggle word wrap

后续步骤

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

10.7. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,本地磁盘空间为 500 MB。

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

    安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。这两个文件都需要删除集群。

    重要

    删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。

  4. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

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

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

先决条件

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

流程

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

    $ mkdir <installation_directory>
    Copy to Clipboard Toggle word wrap
    重要

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

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

    注意

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

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

    重要

    现在备份 install-config.yaml 文件,因为安装过程会在下一步中消耗该文件。

10.8.1. 安装配置参数

在部署 OpenShift Container Platform 集群前,您可以提供参数值来描述托管集群的云平台中的帐户,并选择性地自定义集群平台。在创建 install-config.yaml 安装配置文件时,您可以通过命令行为所需参数提供值。如果自定义集群,您可以修改 install-config.yaml 文件以提供有关平台的更多详情。

注意

安装后,您无法在 install-config.yaml 文件中修改这些参数。

10.8.1.1. 所需的配置参数

下表描述了所需的安装配置参数:

Expand
表 10.2. 所需的参数
参数描述

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

要执行安装的具体平台配置: alibabacloudawsbaremetalazuregcpibmcloudnutanixopenstackovirtvsphere{}。有关 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"
      }
   }
}
Copy to Clipboard Toggle word wrap
10.8.1.2. 网络配置参数

您可以根据现有网络基础架构的要求自定义安装配置。例如,您可以扩展集群网络的 IP 地址块,或者提供不同于默认值的不同 IP 地址块。

仅支持 IPv4 地址。

注意

Red Hat OpenShift Data Foundation 灾难恢复解决方案不支持 Globalnet。对于区域灾难恢复场景,请确保为每个集群中的集群和服务网络使用非重叠的专用 IP 地址。

Expand
表 10.3. 网络参数
参数描述

networking

集群网络的配置。

对象

注意

您无法在安装后修改 网络 对象指定的参数。

networking.networkType

要安装的 Red Hat OpenShift Networking 网络插件。

OpenShiftSDNOVNKubernetesOpenShiftSDN 是 all-Linux 网络的 CNI 插件。OVNKubernetes 是 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
Copy to Clipboard Toggle word wrap

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

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

CIDR 格式具有 IP 地址块的数组。例如:

networking:
  serviceNetwork:
   - 172.30.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork

机器的 IP 地址块。

如果您指定了多个 IP 地址块,块不得重叠。

对象数组。例如:

networking:
  machineNetwork:
  - cidr: 10.0.0.0/16
Copy to Clipboard Toggle word wrap

networking.machineNetwork.cidr

使用 networking.machineNetwork 时需要此项。IP 地址块。libvirt 之外的所有平台的默认值为 10.0.0.0/16。对于 libvirt,默认值 为 192.168.126.0/24

CIDR 表示法中的 IP 网络块。

例如: 10.0.0.0/16

注意

networking.machineNetwork 设置为与首选 NIC 所在的 CIDR 匹配。

10.8.1.3. 可选的配置参数

下表描述了可选的安装配置参数:

Expand
表 10.4. 可选参数
参数描述

additionalTrustBundle

添加到节点可信证书存储中的 PEM 编码 X.509 证书捆绑包。配置了代理时,也可以使用此信任捆绑包。

字符串

功能

控制可选核心组件的安装。您可以通过禁用可选组件来减少 OpenShift Container Platform 集群的空间。如需更多信息,请参阅安装中的"集群功能"页面。

字符串数组

capabilities.baselineCapabilitySet

选择要启用的一组初始可选功能。有效值为 Nonev4.11v4.12vCurrent。默认值为 vCurrent

字符串

capabilities.additionalEnabledCapabilities

将可选功能集合扩展到您在 baselineCapabilitySet 中指定的范围。您可以在此参数中指定多个功能。

字符串数组

Compute

组成计算节点的机器的配置。

MachinePool 对象的数组。

compute.architecture

决定池中机器的指令集合架构。目前,不支持具有不同架构的集群。所有池都必须指定相同的架构。有效值为 amd64arm64。并非所有安装选项都支持 64 位 ARM 架构。要验证您的平台上是否支持您的安装选项,请参阅 选择集群安装方法并为用户准备它中的不同平台支持的安装方法

字符串

compute.hyperthreading

是否在计算机器上启用或禁用并发多 线程或超线程。默认情况下,启用并发多线程以提高机器内核的性能。

重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。

enabledDisabled

compute.name

使用 compute 时需要此项。机器池的名称。

worker

compute.platform

使用 compute 时需要此项。使用此参数指定托管 worker 机器的云供应商。此参数值必须与 controlPlane.platform 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, 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 参数值匹配。

alibabacloud, aws, azure, gcp, ibmcloud, nutanix, openstack, ovirt, vsphere, 或 {}

controlPlane.replicas

要置备的 control plane 机器数量。

唯一支持的值是 3,这是默认值。

credentialsMode

Cloud Credential Operator(CCO)模式。如果没有指定模式,CCO 会动态尝试决定提供的凭证的功能,在支持多个模式的平台上首选 mint 模式。

注意

不是所有 CCO 模式都支持所有云供应商。如需有关 CCO 模式的更多信息,请参阅集群 Operator 参考内容中的 Cloud Credential Operator 条目。

注意

如果您的 AWS 帐户启用了服务控制策略 (SCP),您必须将 credentialsMode 参数配置为 MintPassthroughManual

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 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

注意

如果使用 Azure File 存储,则无法启用 FIPS 模式。

falsetrue

imageContentSources

release-image 内容的源和存储库。

对象数组。包括一个 source 以及可选的 mirrors,如本表的以下行所述。

imageContentSources.source

使用 imageContentSources 时需要此项。指定用户在镜像拉取规格中引用的存储库。

字符串

imageContentSources.mirrors

指定可能还包含同一镜像的一个或多个仓库。

字符串数组

publish

如何发布或公开集群的面向用户的端点,如 Kubernetes API、OpenShift 路由。

内部或外部 .要部署无法从互联网访问的私有集群,请将 publish 设置为 Internal。默认值为 External

sshKey

用于验证对集群机器的访问的 SSH 密钥。

注意

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

例如,sshKey: ssh-ed25519 AAAA..

10.8.1.4. 其他 Azure 配置参数

下表描述了其他 Azure 配置参数。

注意

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

Expand
表 10.5. 其他 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.vmNetworkingType

启用加速网络。加速网络可让单个根 I/O 虚拟化 (SR-IOV) 为虚拟机提高其网络性能。如果计算机器的实例类型支持 Accelerated 网络,安装程序会启用 Accelerated 网络,否则默认网络类型为 Basic

AcceleratedBasic

compute.platform.azure.type

为计算机器定义 Azure 实例类型。

字符串

compute.platform.azure.zones

安装程序在其中创建计算机器的可用区。

字符串列表

controlPlane.platform.azure.type

为 control plane 机器定义 Azure 实例类型。

字符串

controlPlane.platform.azure.zones

安装程序在其中创建 control plane 机器的可用区。

字符串列表

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

用于将集群连接到互联网的出站路由策略。如果您使用用户定义的路由,则必须在安装集群前配置出站路由。安装程序不负责配置用户定义的路由。

LoadBalancerUserDefinedRouting。默认值为 LoadBalancer

platform.azure.region

托管集群的 Azure 区域的名称。

任何有效的区域名称,如 centralus

platform.azure.zone

要放入机器的可用区列表。如需高可用性,请至少指定两个区域。

区域列表,如 ["1", "2", "3"]

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

注意

您无法自定义 Azure 可用区,也不能使用 标签来整理 Azure 集群的 Azure 资源

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

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

Expand
表 10.6. 最低资源要求
机器操作系统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 及更新的版本中删除。
重要

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

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

10.8.3. 为 Azure 测试的实例类型

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

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

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • StandardDdsv6Family
  • standardDLDSv5Family
  • StandardDldsv6Family
  • standardDLSv5Family
  • StandardDlsv6Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • StandardDsv6Family
  • 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
  • standardLasv4Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardLsv4Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • StandardNVadsV710v5Family
  • Standard NDASv4_A100 Family
  • standardNVSv3Family
  • standardXEISv4Family

10.8.4. 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
      type: Standard_D8s_v3
  replicas: 3
compute: 
6

- hyperthreading: Enabled 
7

  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 
8

        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      zones: 
9

      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster 
10

networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 
11

  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group 
12

    region: usgovvirginia
    resourceGroupName: existing_resource_group 
13

    networkResourceGroupName: vnet_resource_group 
14

    virtualNetwork: vnet 
15

    controlPlaneSubnet: control_plane_subnet 
16

    computeSubnet: compute_subnet 
17

    outboundType: UserDefinedRouting 
18

    cloudName: AzureUSGovernmentCloud 
19

pullSecret: '{"auths": ...}' 
20

fips: false 
21

sshKey: ssh-ed25519 AAAA... 
22

publish: Internal 
23
Copy to Clipboard Toggle word wrap
1 10 20
必需。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。仅使用一个 control plane 池。
4
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

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

5 8
您可以指定要使用的磁盘大小(以 GB 为单位)。control plane 节点的最低推荐值为 1024 GB。
9
指定要将机器部署到的区域列表。如需高可用性,请至少指定两个区域。
11
要安装的集群网络插件。支持的值有 OVNKubernetesOpenShiftSDN。默认值为 OVNKubernetes
12
指定包含基域的 DNS 区的资源组的名称。
13
指定要安装集群的现有资源组的名称。如果未定义,则会为集群创建新的资源组。
14
如果使用现有的 VNet,请指定包含它的资源组的名称。
15
如果使用现有的 VNet,请指定其名称。
16
如果使用现有的 VNet,请指定托管 control plane 机器的子网名称。
17
如果使用现有的 VNet,请指定托管计算机器的子网名称。
18
您可以自定义自己的出站路由。配置用户定义的路由可防止在集群中公开外部端点。出口的用户定义路由需要将集群部署到现有的 VNet。
19
指定要将集群部署到的 Azure 云环境的名称。将 AzureUS GovernmentCloud 设置为部署到 Microsoft Azure Government(MAG)区域。默认值为 AzurePublicCloud
21
是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。
重要

要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅在 FIPS 模式中安装该系统。只有在 x86_64ppc64les390x 架构的 OpenShift Container Platform 部署中才支持使用 FIPS 验证的或Modules In Process 加密库。

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

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

23
如何发布集群的面向用户的端点。将 publish 设置为 Internal 以部署一个私有集群,它不能被互联网访问。默认值为 External

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

生产环境可能会拒绝直接访问互联网,而是提供 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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

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

注意

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

10.9. 部署集群

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

重要

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

先决条件

  • 使用托管集群的云平台配置帐户。
  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 验证主机上的云供应商帐户是否有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示包括缺失权限的错误消息。

流程

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

    $ ./openshift-install create cluster --dir <installation_directory> \ 
    1
    
        --log-level=info 
    2
    Copy to Clipboard Toggle word wrap
    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
Copy to Clipboard Toggle word wrap

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

10.10. 安装后最终调整用户管理的加密

如果使用用户管理的加密密钥安装 OpenShift Container Platform,您可以通过创建新存储类并授予 Azure 集群资源组写入权限来完成安装。

流程

  1. 获取安装程序使用的集群资源组的身份:

    1. 如果在 install-config.yaml 中指定了现有资源组,请运行以下命令获取其 Azure 身份:

      $ az identity list --resource-group "<existing_resource_group>"
      Copy to Clipboard Toggle word wrap
    2. 如果您没有在 install-config.yaml 中指定现有资源组,请找到安装程序创建的资源组,然后运行以下命令来获取其 Azure 身份:

      $ az group list
      Copy to Clipboard Toggle word wrap
      $ az identity list --resource-group "<installer_created_resource_group>"
      Copy to Clipboard Toggle word wrap
  2. 运行以下命令,为集群资源组授予角色分配,使其可以写入 Disk Encryption Set:

    $ az role assignment create --role "<privileged_role>" \
    1
    
        --assignee "<resource_group_identity>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定对磁盘加密集具有读/写权限的 Azure 角色。您可以使用 Owner 角色或具有所需权限的自定义角色。
    2
    指定集群资源组的身份。
  3. 运行以下命令,获取在安装前创建的磁盘加密集的 id

    $ az disk-encryption-set show -n <disk_encryption_set_name> \
    1
    
         --resource-group <resource_group_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定磁盘加密集的名称。
    2
    指定包含磁盘加密集的资源组。id 的格式是 "/subscriptions/…​/resourceGroups/…​/providers/Microsoft.Compute/diskEncryptionSets/…​"
  4. 运行以下命令,获取集群服务主体的身份:

    $ az identity show -g <cluster_resource_group> \
    1
    
         -n <cluster_service_principal_name> \
    2
    
         --query principalId --out tsv
    Copy to Clipboard Toggle word wrap
    1
    指定安装程序创建的集群资源组的名称。
    2
    指定安装程序创建的集群服务主体的名称。身份的格式是 12345678-1234-1234-1234-1234567890
  5. 运行以下命令,创建一个角色分配,为磁盘加密集授予集群服务主体 Contributor 的权限:

    $ az role assignment create --assignee <cluster_service_principal_id> \
    1
    
         --role 'Contributor' \//
         --scope <disk_encryption_set_id> \
    2
    Copy to Clipboard Toggle word wrap
    1
    指定上一步中获得的集群服务主体的 ID。
    2
    指定磁盘加密集的 ID。
  6. 创建使用用户管理的磁盘加密集的存储类:

    1. 将以下存储类定义保存到文件中,如 storage-class-definition.yaml

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: managed-premium
      provisioner: kubernetes.io/azure-disk
      parameters:
        skuname: Premium_LRS
        kind: Managed
        diskEncryptionSetID: "<disk_encryption_set_ID>" 
      1
      
        resourceGroup: "<resource_group_name>" 
      2
      
      reclaimPolicy: Delete
      allowVolumeExpansion: true
      volumeBindingMode: WaitForFirstConsumer
      Copy to Clipboard Toggle word wrap
      1
      指定您在先决条件步骤中创建的磁盘加密集的 ID,例如 "/subscriptions/xxxxxx-xxxxx-xxxxx/resourceGroups/test-encryption/providers/Microsoft.Compute/diskEncryptionSets/disk-encryption-set-xxxxxx"
      2
      指定安装程序使用的资源组的名称。这是第一步中的资源组。
    2. 从您创建的文件创建存储类 managed-premium

      $ oc create -f storage-class-definition.yaml
      Copy to Clipboard Toggle word wrap
  7. 在创建持久性卷以使用加密存储时,选择 managed-premium 存储类。

10.11. 通过下载二进制文件安装 OpenShift CLI

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

重要

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

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap

10.12. 使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件,以默认系统用户身份登录集群。kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。

先决条件

  • 已部署 OpenShift Container Platform 集群。
  • 已安装 oc CLI。

流程

  1. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令:

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    输出示例

    system:admin
    Copy to Clipboard Toggle word wrap

10.13. OpenShift Container Platform 的 Telemetry 访问

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

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

10.14. 后续步骤

第 11 章 使用 ARM 模板在 Azure 上安装集群

在 OpenShift Container Platform 版本 4.12 中,您可以使用您提供的基础架构在 Microsoft Azure 上安装集群。

提供的几个 Azure Resource Manager(ARM) 模板可协助完成这些步骤,也可帮助您自行建模。

重要

进行用户置备的基础架构安装的步骤仅作为示例。使用您提供的基础架构安装集群需要了解云供应商和 OpenShift Container Platform 安装过程。提供的几个 ARM 模板可帮助完成这些步骤,或帮助您自行建模。您也可以自由选择通过其他方法创建所需的资源;模板仅作示例之用。

11.1. 先决条件

11.2. OpenShift Container Platform 互联网访问

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

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

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

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

11.3. 配置 Azure 项目

在安装 OpenShift Container Platform 之前,您必须配置 Azure 项目来托管它。

重要

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

11.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 集群的能力。

Expand
组件默认所需的组件数默认 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 节点。

11.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 解决方案

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

11.3.4. 证书签名请求管理

在使用您置备的基础架构时,集群只能有限地访问自动机器管理,因此您必须提供一种在安装后批准集群证书签名请求 (CSR) 的机制。kube-controller-manager 只能批准 kubelet 客户端 CSR。machine-approver 无法保证使用 kubelet 凭证请求的提供证书的有效性,因为它不能确认是正确的机器发出了该请求。您必须决定并实施一种方法,以验证 kubelet 提供证书请求的有效性并进行批准。

11.3.5. 所需的 Azure 角色

OpenShift Container Platform 需要一个服务主体,以便可以管理 Microsoft Azure 资源。在创建服务主体前,请查看以下信息:

您的 Azure 帐户订阅必须具有以下角色:

  • User Access Administrator
  • 贡献者

您的 Azure Active Directory (AD)必须具有以下权限:

  • "microsoft.directory/servicePrincipals/createAsOwner"

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

11.3.6. 用户置备的基础架构所需的 Azure 权限

当您为服务主体分配 ContributorUser Access Administrator 角色时,会自动授予所有所需的权限。

如果机构的安全策略需要更严格的权限集,您可以创建具有所需权限的自定义角色。在 Microsoft Azure 上创建 OpenShift Container Platform 集群需要以下权限。

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

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

例 11.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

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

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

例 11.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

例 11.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

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

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

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

  • Microsoft.Resources/tags/write

例 11.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

例 11.9. 创建部署所需的权限

  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/validate/action
  • Microsoft.Resources/deployments/operationstatuses/read

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

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

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

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

例 11.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 集群需要以下权限。

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

  • Microsoft.Authorization/roleAssignments/delete

例 11.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

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

  • Microsoft.ManagedIdentity/userAssignedIdentities/delete

例 11.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

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

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

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

  • Microsoft.Resources/subscriptions/resourcegroups/delete

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

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

要在 Azure 上安装 OpenShift Container Platform,您必须将资源组创建的权限范围到您的订阅。创建资源组后,您可以将剩余权限的范围限定到所创建的资源组。如果其他资源组中存在公共 DNS 区域,则必须始终将网络 DNS 区域相关权限应用到您的订阅。

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

11.3.7. 创建服务主体

由于 OpenShift Container Platform 及其安装程序使用 Azure Resource Manager 创建 Microsoft Azure 资源,因此您必须创建一个服务主体来代表它。

先决条件

  • 安装或更新 Azure CLI
  • 您的 Azure 帐户具有您所用订阅所需的角色。
  • 如果要使用自定义角色,您已创建了带有在 使用用户置备的基础架构所需的 Azure 权限中列出的所需权限的一个自定义角色

流程

  1. 登录 Azure CLI:

    $ az login
    Copy to Clipboard Toggle word wrap
  2. 如果您的 Azure 帐户使用订阅,请确定您使用正确的订阅:

    1. 查看可用帐户列表并记录您要用于集群的订阅的 tenantId 值:

      $ az account list --refresh
      Copy to Clipboard Toggle word wrap

      输出示例

      [
        {
          "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"
          }
        }
      ]
      Copy to Clipboard Toggle word wrap

    2. 查看您的活跃帐户详情,确认 tenantId 值与您要使用的订阅匹配:

      $ az account show
      Copy to Clipboard Toggle word wrap

      输出示例

      {
        "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"
        }
      }
      Copy to Clipboard Toggle word wrap

      1
      确保 tenantId 参数的值是正确的订阅 ID。
    3. 如果您使用的订阅不正确,请更改活跃的订阅:

      $ az account set -s <subscription_id> 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定订阅 ID。
    4. 验证订阅 ID 更新:

      $ az account show
      Copy to Clipboard Toggle word wrap

      输出示例

      {
        "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"
        }
      }
      Copy to Clipboard Toggle word wrap

  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
    Copy to Clipboard Toggle word wrap
    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"
    }
    Copy to Clipboard Toggle word wrap

  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
    Copy to Clipboard Toggle word wrap
    1
    为您的服务主体指定 appId 参数值。

11.3.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)
  • 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 一起工作,但并没有经过测试。

11.4. 具有用户置备基础架构的集群的要求

对于包含用户置备的基础架构的集群,您必须部署所有所需的机器。

本节论述了在用户置备的基础架构上部署 OpenShift Container Platform 的要求。

11.4.1. 集群安装所需的机器

最小的 OpenShift Container Platform 集群需要以下主机:

Expand
表 11.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)8,并继承其所有硬件认证和要求。查看 红帽企业 Linux 技术功能和限制

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

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

Expand
表 11.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 及更新的版本中删除。
重要

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

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

11.4.3. 为 Azure 测试的实例类型

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

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

  • standardBasv2Family
  • standardBSFamily
  • standardBsv2Family
  • standardDADSv5Family
  • standardDASv4Family
  • standardDASv5Family
  • standardDCACCV5Family
  • standardDCADCCV5Family
  • standardDCADSv5Family
  • standardDCASv5Family
  • standardDCSv3Family
  • standardDCSv2Family
  • standardDDCSv3Family
  • standardDDSv4Family
  • standardDDSv5Family
  • StandardDdsv6Family
  • standardDLDSv5Family
  • StandardDldsv6Family
  • standardDLSv5Family
  • StandardDlsv6Family
  • standardDSFamily
  • standardDSv2Family
  • standardDSv2PromoFamily
  • standardDSv3Family
  • standardDSv4Family
  • standardDSv5Family
  • StandardDsv6Family
  • 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
  • standardLasv4Family
  • standardLSFamily
  • standardLSv2Family
  • standardLSv3Family
  • standardLsv4Family
  • standardMDSHighMemoryv3Family
  • standardMDSMediumMemoryv2Family
  • standardMDSMediumMemoryv3Family
  • standardMIDSHighMemoryv3Family
  • standardMIDSMediumMemoryv2Family
  • standardMISHighMemoryv3Family
  • standardMISMediumMemoryv2Family
  • standardMSFamily
  • standardMSHighMemoryv3Family
  • standardMSMediumMemoryv2Family
  • standardMSMediumMemoryv3Family
  • StandardNCADSA100v4Family
  • Standard NCASv3_T4 Family
  • standardNCSv3Family
  • standardNDSv2Family
  • StandardNGADSV620v1Family
  • standardNPSFamily
  • StandardNVADSA10v5Family
  • StandardNVadsV710v5Family
  • 标准 NDASv4_A100 Family
  • standardNVSv3Family
  • standardXEISv4Family

11.5. 选择 Azure Marketplace 镜像

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

  • 虽然镜像相同,但 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 安装镜像。

您应该只修改计算机器的 RHCOS 镜像以使用 Azure Marketplace 镜像。control plane 机器和基础架构节点不需要 OpenShift Container Platform 订阅,且默认使用公共 RHCOS 默认镜像,这不会对 Azure bill 造成订阅成本。因此,您不应该修改集群默认引导镜像或 control plane 引导镜像。将 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
      Copy to Clipboard Toggle word wrap

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-ocpworker:4.8.2021122100               4.8.2021122100
      rh-ocp-worker  RedHat          rh-ocp-worker-gen1  RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100         4.8.2021122100
      Copy to Clipboard Toggle word wrap

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

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table
      Copy to Clipboard Toggle word wrap

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.8.2021122100       4.8.2021122100
      rh-ocp-worker  redhat-limited  rh-ocp-worker-gen1  redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100  4.8.2021122100
      Copy to Clipboard Toggle word wrap

    注意

    无论您安装的 OpenShift Container Platform 版本是什么,要使用的 Azure Marketplace 镜像的正确版本都是 4.8。如果需要,您的虚拟机会在安装过程中自动升级。

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

    • 北美:

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

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

    • 北美:

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

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

    • 北美:

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

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
      Copy to Clipboard Toggle word wrap
  5. 记录您的所提供的镜像详情。如果使用 Azure Resource Manager (ARM) 模板来部署 worker 节点:

    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": "4.8.2021122100"
          }
          ...
         }
      ...
        }
      Copy to Clipboard Toggle word wrap

11.6. 获取安装程序

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

先决条件

  • 您有一台运行 Linux 或 macOS 的计算机,本地磁盘空间为 500 MB。

流程

  1. 访问 OpenShift Cluster Manager 站点的 Infrastructure Provider 页面。如果您有红帽帐户,请使用您的凭证登录。如果没有,请创建一个帐户。
  2. 选择您的基础架构供应商。
  3. 进入到安装类型的页面,下载与您的主机操作系统和架构对应的安装程序,并将该文件放在您要存储安装配置文件的目录中。

    重要

    安装程序会在用来安装集群的计算机上创建几个文件。在完成集群安装后,您必须保留安装程序和安装程序所创建的文件。这两个文件都需要删除集群。

    重要

    删除安装程序创建的文件不会删除您的集群,即使集群在安装过程中失败也是如此。要删除集群,请为特定云供应商完成 OpenShift Container Platform 卸载流程。

  4. 提取安装程序。例如,在使用 Linux 操作系统的计算机上运行以下命令:

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

11.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
    Copy to Clipboard Toggle word wrap
    1
    指定新 SSH 密钥的路径和文件名,如 ~/.ssh/id_ed25519。如果您已有密钥对,请确保您的公钥位于 ~/.ssh 目录中。
    注意

    如果您计划在 x86_64ppc64les390x 架构上安装使用 FIPS 验证或 Modules In Process 加密库的 OpenShift Container Platform 集群。请不要创建使用 ed25519 算法的密钥。相反,创建一个使用 rsaecdsa 算法的密钥。

  2. 查看公共 SSH 密钥:

    $ cat <path>/<file_name>.pub
    Copy to Clipboard Toggle word wrap

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

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

    注意

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

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

      $ eval "$(ssh-agent -s)"
      Copy to Clipboard Toggle word wrap

      输出示例

      Agent pid 31874
      Copy to Clipboard Toggle word wrap

      注意

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

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

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

    输出示例

    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
    Copy to Clipboard Toggle word wrap

后续步骤

  • 安装 OpenShift Container Platform 时,为安装程序提供 SSH 公钥。如果在您置备的基础架构上安装集群,则必须为安装程序提供密钥。

11.8. 创建用于 Azure 的安装文件

要使用用户置备的基础架构在 Microsoft Azure 上安装 OpenShift Container Platform,您必须生成并修改安装程序部署集群所需的文件,以便集群只创建要使用的机器。您要生成并自定义 install-config.yaml 文件、Kubernetes 清单和 Ignition 配置文件。您还可以选择在安装准备阶段首先设置独立 var 分区。

11.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
    Copy to Clipboard Toggle word wrap
  2. 运行 openshift-install,以在 manifestopenshift 子目录中创建一组文件。在系统提示时回答系统问题:

    $ openshift-install create manifests --dir $HOME/clusterconfig
    Copy to Clipboard Toggle word wrap

    输出示例

    ? 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
    Copy to Clipboard Toggle word wrap

  3. 可选:确认安装程序在 clusterconfig/openshift 目录中创建了清单:

    $ ls $HOME/clusterconfig/openshift/
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    ...
    Copy to Clipboard Toggle word wrap

  4. 创建用于配置额外分区的 Butane 配置。例如,将文件命名为 $HOME/clusterconfig/98-var-partition.bu,将磁盘设备名称改为 worker 系统上存储设备的名称,并根据情况设置存储大小。这个示例将 /var 目录放在一个单独的分区中:

    variant: openshift
    version: 4.12.0
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 98-var-partition
    storage:
      disks:
      - device: /dev/disk/by-id/<device_id> 
    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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

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

11.8.2. 创建安装配置文件

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

先决条件

  • 获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 在订阅级别获取服务主体权限。

流程

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

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

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

      在指定目录时:

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

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

        注意

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

      2. 选择 azure 作为目标平台。
      3. 如果计算机上没有 Microsoft Azure 配置集,请为您的订阅和服务主体指定以下 Azure 参数值:

        • azure subscription id:要用于集群的订阅 ID。指定帐户输出中的 id 值。
        • azure tenant id:租户 ID。指定帐户输出中的 tenantId 值。
        • azure service principal client id:服务主体的 appId 参数值。
        • azure service principal client secret:服务主体的 password 参数值。
      4. 选择要在其中部署集群的区域。
      5. 选择集群要部署到的基域。基域与您为集群创建的 Azure DNS 区对应。
      6. 为集群输入一个描述性名称。

        重要

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

      7. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret
    3. 可选:如果您不希望集群置备计算机器,请通过编辑 install-config.yaml 文件将计算池的 replicas 设置为 0 来清空 计算 池:

      compute:
      - hyperthreading: Enabled
        name: worker
        platform: {}
        replicas: 0 
      1
      Copy to Clipboard Toggle word wrap
      1
      设置为 0
  2. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  3. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

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

11.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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

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

注意

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

11.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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
  2. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。

11.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
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定包含您创建的 install-config.yaml 文件的安装目录。
  2. 删除定义 control plane 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_master-machines-*.yaml
    Copy to Clipboard Toggle word wrap

    通过删除这些文件,您可以防止集群自动生成 control plane 机器。

  3. 删除定义 worker 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-*.yaml
    Copy to Clipboard Toggle word wrap

    由于您要自行创建和管理 worker 机器,因此不需要初始化这些机器。

  4. 检查 <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. 保存并退出 文件。
  5. 可选:如果您不希望 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: {}
    Copy to Clipboard Toggle word wrap
    1 2
    完全删除此部分。

    如果您这样做,后续步骤中必须手动添加入口 DNS 记录。

  6. 在用户置备的基础架构上配置 Azure 时,您必须导出清单文件中定义的一些常见变量,以备稍后在 Azure Resource Manager(ARM)模板中使用:

    1. 使用以下命令导出基础架构 ID:

      $ export INFRA_ID=<infra_id> 
      1
      Copy to Clipboard Toggle word wrap
      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
      Copy to Clipboard Toggle word wrap
      1
      此 Azure 部署中创建的所有资源都作为资源组的一部分。资源组名称还基于 INFRA_ID,格式为 <cluster_name>-<random_string>-rg。这是来自 manifests/cluster-infrastructure-02-config.yml 文件中的 .status.platformStatus.azure.resourceGroupName 属性的值。
  7. 要创建 Ignition 配置文件,从包含安装程序的目录运行以下命令:

    $ ./openshift-install create ignition-configs --dir <installation_directory> 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定相同的安装目录。

    为安装目录中的 bootstrap、control plane 和计算节点创建 Ignition 配置文件。kubeadmin-passwordkubeconfig 文件是在 ./<installation_directory>/auth 目录中创建的:

    .
    ├── auth
    │   ├── kubeadmin-password
    │   └── kubeconfig
    ├── bootstrap.ign
    ├── master.ign
    ├── metadata.json
    └── worker.ign
    Copy to Clipboard Toggle word wrap

11.9. 创建 Azure 资源组

您必须创建一个 Microsoft Azure 资源组以及该资源组的身份。它们都用于在 Azure 上安装 OpenShift Container Platform 集群。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。

流程

  1. 在受支持的 Azure 区域中创建资源组:

    $ az group create --name ${RESOURCE_GROUP} --location ${AZURE_REGION}
    Copy to Clipboard Toggle word wrap
  2. 为资源组创建 Azure 身份:

    $ az identity create -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity
    Copy to Clipboard Toggle word wrap

    这用于授予集群中 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`
      Copy to Clipboard Toggle word wrap
      $ export RESOURCE_GROUP_ID=`az group show -g ${RESOURCE_GROUP} --query id --out tsv`
      Copy to Clipboard Toggle word wrap
    2. 将 Contributor 角色分配给身份:

      $ az role assignment create --assignee "${PRINCIPAL_ID}" --role 'Contributor' --scope "${RESOURCE_GROUP_ID}"
      Copy to Clipboard Toggle word wrap
      注意

      如果要为身份分配具有所有所需权限的自定义角色,请运行以下命令:

      $ az role assignment create --assignee "${PRINCIPAL_ID}" --role <custom_role> \ 
      1
      
      --scope "${RESOURCE_GROUP_ID}"
      Copy to Clipboard Toggle word wrap
      1
      指定自定义角色名称。

Azure 客户端不支持基于本地现有文件进行部署。您必须复制 RHCOS 虚拟硬盘(VHD)集群镜像,并将 bootstrap Ignition 配置文件存储在存储容器中,以便在部署过程中访问它们。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。

流程

  1. 创建 Azure 存储帐户以存储 VHD 集群镜像:

    $ az storage account create -g ${RESOURCE_GROUP} --location ${AZURE_REGION} --name ${CLUSTER_NAME}sa --kind Storage --sku Standard_LRS
    Copy to Clipboard Toggle word wrap
    警告

    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`
    Copy to Clipboard Toggle word wrap
  3. 将 RHCOS VHD 的 URL 导出为环境变量:

    $ export VHD_URL=`openshift-install coreos print-stream-json | jq -r '.architectures.x86_64."rhel-coreos-extensions"."azure-disk".url'`
    Copy to Clipboard Toggle word wrap
    重要

    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}
    Copy to Clipboard Toggle word wrap
  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}"
    Copy to Clipboard Toggle word wrap
  6. 创建 blob 存储容器并上传生成的 bootstrap.ign 文件:

    $ az storage container create --name files --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY}
    Copy to Clipboard Toggle word wrap
    $ az storage blob upload --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -f "<installation_directory>/bootstrap.ign" -n "bootstrap.ign"
    Copy to Clipboard Toggle word wrap

11.11. 创建 DNS 区示例

使用用户置备的基础架构的集群需要 DNS 记录。您应该选择适合您的场景的 DNS 策略。

在本例中,使用了 Azure 的 DNS 解决方案,因此您将为外部(内部网络)可见性创建一个新的公共 DNS 区域,并为内部集群解析创建一个私有 DNS 区域。

注意

公共 DNS 区域不需要与集群部署位于同一个资源组中,且可能已在您的机构中为所需基域存在。如果情况如此,您可以跳过创建公共 DNS 区这一步 ; 请确定您之前生成的安装配置反映了这种情况。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。

流程

  1. BASE_DOMAIN_RESOURCE_GROUP 环境变量中导出的资源组中创建新的公共 DNS 区域:

    $ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n ${CLUSTER_NAME}.${BASE_DOMAIN}
    Copy to Clipboard Toggle word wrap

    如果您使用的是公共 DNS 区域,可以跳过这一步。

  2. 在与这个部署的其余部分相同的资源组中创建私有 DNS 区域:

    $ az network private-dns zone create -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME}.${BASE_DOMAIN}
    Copy to Clipboard Toggle word wrap

如需了解更多信息,请参阅在 Azure 中配置公共 DNS 的信息。

11.12. 在 Azure 中创建 VNet

您必须在 Microsoft Azure 中创建虚拟网络(VNet),供您的 OpenShift Container Platform 集群使用。您可以对 VNet 进行定制来满足您的要求。创建 VNet 的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 Azure 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。

流程

  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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

11.12.1. VNet 的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 VPC:

例 11.21. 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"
            }
          }
        ]
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

11.13. 为 Azure 基础架构创建 RHCOS 集群镜像

您必须对 OpenShift Container Platform 节点的 Microsoft Azure 使用有效的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。
  • 将 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`
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
    1
    用于创建 master 和 worker 机器的 RHCOS VHD 的 blob URL。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。

11.13.1. 镜像存储的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的存储的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像:

例 11.22. 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')]"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    }
  ]
}
Copy to Clipboard Toggle word wrap

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

所有 Red Hat Enterprise Linux CoreOS(RHCOS)机器需要在启动过程中在 initramfs 中配置网络,以获取其 Ignition 配置文件。

11.14.1. 网络连接要求

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

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

重要

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

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

ICMP

N/A

网络可访问性测试

TCP

1936

指标

9000-9999

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

10250-10259

Kubernetes 保留的默认端口

10256

openshift-sdn

UDP

4789

VXLAN

6081

Geneve

9000-9999

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

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

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

如果配置了外部 NTP 时间服务器,需要打开 UDP 端口 123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

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

TCP

6443

Kubernetes API

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

TCP

2379-2380

etcd 服务器和对等端口

11.15. 在 Azure 中创建网络和负载均衡组件

您必须在 Microsoft Azure 中配置网络和负载均衡,供您的 OpenShift Container Platform 集群使用。创建这些组件的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 Azure 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。
  • 在 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
    Copy to Clipboard Toggle word wrap
    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`
      Copy to Clipboard Toggle word wrap
    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
      Copy to Clipboard Toggle word wrap

      如果要将集群添加到现有的公共区,您可以在其中创建 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
      Copy to Clipboard Toggle word wrap

11.15.1. 网络和负载均衡器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的网络对象和负载均衡器:

例 11.23. 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" : "[concat(parameters('baseName'), '-public-lb')]",
    "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",
            "properties" : {
              "publicIPAddress" : {
                "id" : "[variables('masterPublicIpAddressID')]"
              }
            }
          }
        ],
        "backendAddressPools" : [
          {
            "name" : "public-lb-backend"
          }
        ],
        "loadBalancingRules" : [
          {
            "name" : "api-internal",
            "properties" : {
              "frontendIPConfiguration" : {
                "id" :"[concat(variables('masterLoadBalancerID'), '/frontendIPConfigurations/public-lb-ip')]"
              },
              "backendAddressPool" : {
                "id" : "[concat(variables('masterLoadBalancerID'), '/backendAddressPools/public-lb-backend')]"
              },
              "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]"
          }
        ]
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

11.16. 在 Azure 中创建 bootstrap 机器

您必须在 Microsoft Azure 中创建 bootstrap 机器,以便在 OpenShift Container Platform 集群初始化过程中使用。创建此机器的一种方法是修改提供的 Azure Resource Manager(ARM)模板。

注意

如果不使用提供的 ARM 模板来创建 bootstrap 机器,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。
  • 在 Azure 中创建和配置 VNet 及相关子网。
  • 在 Azure 中创建和配置联网及负载均衡器。
  • 创建 control plane 和计算角色。

流程

  1. 复制 bootstrap 机器的 ARM 模板一节中的模板,并将它以 04_bootstrap.json 保存到集群的安装目录中。此模板描述了集群所需的 bootstrap 机器。
  2. 导出 bootstrap URL 变量:

    $ bootstrap_url_expiry=`date -u -d "10 hours" '+%Y-%m-%dT%H:%MZ'`
    Copy to Clipboard Toggle word wrap
    $ 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`
    Copy to Clipboard Toggle word wrap
  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'`
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
    1
    bootstrap 集群的 bootstrap Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。

11.16.1. bootstrap 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 bootstrap 机器:

例 11.24. 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" : "[concat(parameters('baseName'), '-public-lb')]",
    "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/public-lb-backend')]"
                },
                {
                  "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"
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

11.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 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。
  • 在 Azure 中创建和配置 VNet 及相关子网。
  • 在 Azure 中创建和配置联网及负载均衡器。
  • 创建 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'`
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
    1
    control plane 节点的 Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。

11.17.1. control plane 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 control plane 机器:

例 11.25. 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" : "[concat(parameters('baseName'), '-public-lb')]",
    "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/public-lb-backend')]"
                },
                {
                  "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
              }
            }
          ]
        }
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

在 Microsoft Azure 中创建所有所需的基础架构后,请等待您通过安装程序生成的 Ignition 配置文件所置备的机器上完成 bootstrap 过程。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。
  • 在 Azure 中创建和配置 VNet 及相关子网。
  • 在 Azure 中创建和配置联网及负载均衡器。
  • 创建 control plane 和计算角色。
  • 创建 bootstrap 机器。
  • 创建 control plane 机器。

流程

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

    $ ./openshift-install wait-for bootstrap-complete --dir <installation_directory> \ 
    1
    
        --log-level info 
    2
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap
注意

如果没有删除 bootstrap 服务器,因为 API 流量会路由到 bootstrap 服务器,所以安装可能无法成功。

11.19. 在 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 机器,您必须检查提供的信息并手动创建基础架构。如果您的集群没有正确初始化,请考虑与安装日志联系红帽支持。

先决条件

  • 配置 Azure 帐户。
  • 为集群生成 Ignition 配置文件。
  • 在 Azure 中创建和配置 VNet 及相关子网。
  • 在 Azure 中创建和配置联网及负载均衡器。
  • 创建 control plane 和计算角色。
  • 创建 bootstrap 机器。
  • 创建 control plane 机器。

流程

  1. 复制 worker 机器的 ARM 模板一节中的模板,并将它以 06_workers.json 保存到集群的安装目录中。此模板描述了集群所需的 worker 机器。
  2. 导出 worker 机器部署所需的以下变量:

    $ export WORKER_IGNITION=`cat <installation_directory>/worker.ign | base64 | tr -d '\n'`
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap
    1
    worker 节点的 Ignition 内容。
    2
    资源名称使用的基本名称 ; 这通常是集群的基础架构 ID。

11.19.1. worker 机器的 ARM 模板

您可以使用以下 Azure Resource Manager(ARM)模板来部署 OpenShift Container Platform 集群所需的 worker 机器:

例 11.26. 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
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

11.20. 通过下载二进制文件安装 OpenShift CLI

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

重要

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

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap

11.21. 使用 CLI 登录集群

您可以通过导出集群 kubeconfig 文件,以默认系统用户身份登录集群。kubeconfig 文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。

先决条件

  • 已部署 OpenShift Container Platform 集群。
  • 已安装 oc CLI。

流程

  1. 导出 kubeadmin 凭证:

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
  2. 验证您可以使用导出的配置成功运行 oc 命令:

    $ oc whoami
    Copy to Clipboard Toggle word wrap

    输出示例

    system:admin
    Copy to Clipboard Toggle word wrap

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

当您将机器添加到集群时,会为您添加的每台机器生成两个待处理证书签名请求(CSR)。您必须确认这些 CSR 已获得批准,或根据需要自行批准。必须首先批准客户端请求,然后批准服务器请求。

先决条件

  • 您已将机器添加到集群中。

流程

  1. 确认集群可以识别这些机器:

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  63m  v1.25.0
    master-1  Ready     master  63m  v1.25.0
    master-2  Ready     master  64m  v1.25.0
    Copy to Clipboard Toggle word wrap

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

    注意

    在有些 CSR 被批准前,前面的输出可能不包括计算节点(也称为 worker 节点)。

  2. 检查待处理的 CSR,并确保添加到集群中的每台机器都有 PendingApproved 状态的客户端请求:

    $ oc get csr
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    ...
    Copy to Clipboard Toggle word wrap

    在本例中,两台机器加入集群。您可能会在列表中看到更多已批准的 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
      Copy to Clipboard Toggle word wrap
      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
      Copy to Clipboard Toggle word wrap
      注意

      在有些 CSR 被批准前,一些 Operator 可能无法使用。

  4. 现在,您的客户端请求已被批准,您必须查看添加到集群中的每台机器的服务器请求:

    $ oc get csr
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    ...
    Copy to Clipboard Toggle word wrap

  5. 如果剩余的 CSR 没有被批准,且处于 Pending 状态,请批准集群机器的 CSR:

    • 要单独批准,请对每个有效的 CSR 运行以下命令:

      $ oc adm certificate approve <csr_name> 
      1
      Copy to Clipboard Toggle word wrap
      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
      Copy to Clipboard Toggle word wrap
  6. 批准所有客户端和服务器 CSR 后,机器将 处于 Ready 状态。运行以下命令验证:

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME      STATUS    ROLES   AGE  VERSION
    master-0  Ready     master  73m  v1.25.0
    master-1  Ready     master  73m  v1.25.0
    master-2  Ready     master  74m  v1.25.0
    worker-0  Ready     worker  11m  v1.25.0
    worker-1  Ready     worker  11m  v1.25.0
    Copy to Clipboard Toggle word wrap

    注意

    批准服务器 CSR 后可能需要几分钟时间让机器过渡到 Ready 状态

其他信息

11.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
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    Copy to Clipboard Toggle word wrap

  2. 将 Ingress 路由器 IP 导出作为变量:

    $ export PUBLIC_IP_ROUTER=`oc -n openshift-ingress get service router-default --no-headers | awk '{print $4}'`
    Copy to Clipboard Toggle word wrap
  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
      Copy to Clipboard Toggle word wrap
    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
      Copy to Clipboard Toggle word wrap
  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
      Copy to Clipboard Toggle word wrap
    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}
      Copy to Clipboard Toggle word wrap

如果需要添加特定域而不使用通配符,可以为集群的每个当前路由创建条目:

$ oc get --all-namespaces -o jsonpath='{range .items[*]}{range .status.ingress[*]}{.host}{"\n"}{end}{end}' routes
Copy to Clipboard Toggle word wrap

输出示例

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
Copy to Clipboard Toggle word wrap

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

在 Microsoft Azure 用户置备的基础架构上启动 OpenShift Container Platform 安装后,您可以监控集群事件,直到集群就绪可用。

先决条件

  • 在用户置备的 Azure 基础架构上为 OpenShift Container Platform 集群部署 bootstrap 机器。
  • 安装 oc CLI 并登录。

流程

  • 完成集群安装:

    $ ./openshift-install --dir <installation_directory> wait-for install-complete 
    1
    Copy to Clipboard Toggle word wrap

    输出示例

    INFO Waiting up to 30m0s for the cluster to initialize...
    Copy to Clipboard Toggle word wrap

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

11.25. OpenShift Container Platform 的 Telemetry 访问

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

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

第 12 章 在 Azure 上卸载集群

您可以删除部署到 Microsoft Azure 的集群。

您可以从云中删除使用安装程序置备的基础架构的集群。

注意

卸载后,检查云供应商是否有未正确删除的资源,特别是在用户置备基础架构集群中。可能存在安装程序没有创建或安装程序无法访问的资源。

先决条件

  • 有用于部署集群的安装程序副本。
  • 有创建集群时安装程序生成的文件。

虽然您可以使用部署它的安装程序副本来卸载集群,但建议使用 OpenShift Container Platform 版本 4.13 或更高版本。

删除服务主体取决于 Microsoft Azure AD Graph API。使用安装程序版本 4.13 或更高版本可确保在不需要手动干预的情况下删除服务主体(当 Microsoft 停用 Azure AD Graph API 时)。

流程

  1. 在用来安装集群的计算机中,进入包含安装程序的目录,并运行以下命令:

    $ ./openshift-install destroy cluster \
    --dir <installation_directory> --log-level info 
    1
     
    2
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定安装文件保存到的目录的路径。
    2
    要查看不同的详情,请指定 warndebugerror,而不是 info
    注意

    您必须为集群指定包含集群定义文件的目录。安装程序需要此目录中的 metadata.json 文件来删除集群。

  2. 可选:删除 <installation_directory> 目录和 OpenShift Container Platform 安装程序。

Legal Notice

Copyright © 2025 Red Hat

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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

Theme

© 2025 Red Hat