第 5 章 在 Azure 上安装

5.1. 配置 Azure 帐户

在安装 OpenShift Container Platform 之前,您必须配置 Microsoft Azure 帐户。

重要

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

5.1.1. Azure 帐户限值

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

重要

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

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

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

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

vCPU

40

每个区域 20 个

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

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

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

由于 Bootstrap 机器使用 Standard_D4s_v3 机器(使用 4 个 vCPU),control plane 机器使用 Standard_D8s_v3 虚拟机(8 个 vCPU),并且 worker 机器使用 Standard_D4s_v3 虚拟机(4 个 vCPU),因此默认集群需要 40 个 vCPU。bootstrap 节点 VM(使用 4 个 vCPU)只在安装过程中使用。

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

默认情况下,安装程序将 control plane 和 compute 机器分布到一个区域中的所有可用区。要确保集群的高可用性,请选择至少含有三个可用区的区域。如果您的区域包含的可用区少于三个,安装程序将在可用区中放置多台 control plane 机器。

OS Disk

7

 

虚拟机 OS 磁盘必须能够保持最低 5000 IOPS/200MBps 的吞吐量。此吞吐量可以通过至少 1 TiB Premium SSD (P30) 提供。在 Azure 中,磁盘性能直接依赖于 SSD 磁盘大小,因此要达到 Standard_D8s_v3 支持的吞吐量,或其他类似的机器类型,目标为 5000 IOPS,则至少需要一个 P30 磁盘。

主机缓存必须设置为 ReadOnly 以获得低读取延迟和高读取 IOPS 和吞吐量。从缓存执行的读取可能存在于虚拟机内存或本地 SSD 磁盘中,比数据磁盘的读取速度要快得多,因为数据磁盘位于 blob 存储中。

VNet

1

每个区域 1000 个

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

网络接口

6

每个区域 65,536 个

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

网络安全组

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 节点。

5.1.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. 如果您使用子域,请按照您公司的流程将其委派记录添加到父域。

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

5.1.4. 所需的 Azure 角色

OpenShift Container Platform 需要一个服务主体,以便可以管理 Microsoft Azure 资源。在创建服务主体前,您的 Azure 帐户订阅必须具有以下角色:

  • User Access Administrator
  • 所有者

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

5.1.5. 创建服务主体

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

先决条件

  • 安装或更新 Azure CLI
  • 安装jq软件包。
  • 您的 Azure 帐户具有您所用订阅所需的角色。

流程

  1. 登录 Azure CLI:

    $ az login

    在 Web 控制台中,使用您的凭证登录 Azure。

  2. 如果您的 Azure 帐户使用订阅,请确保使用正确的订阅。

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

      $ az account list --refresh

      输出示例

      [
        {
          "cloudName": "AzureCloud",
          "id": "9bab1460-96d5-40b3-a78e-17b15e978a80",
          "isDefault": true,
          "name": "Subscription Name",
          "state": "Enabled",
          "tenantId": "6057c7e9-b3ae-489d-a54e-de3f6bf6a8ee",
          "user": {
            "name": "you@example.com",
            "type": "user"
          }
        }
      ]

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

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "9bab1460-96d5-40b3-a78e-17b15e978a80",
        "isDefault": true,
        "name": "Subscription Name",
        "state": "Enabled",
        "tenantId": "6057c7e9-b3ae-489d-a54e-de3f6bf6a8ee", 1
        "user": {
          "name": "you@example.com",
          "type": "user"
        }
      }

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

      $ az account set -s <id> 1
      1
      替换您要用于 <id> 的订阅的 id 值。
    4. 如果您更改了活跃订阅,请重新显示您的帐户信息:

      $ az account show

      输出示例

      {
        "environmentName": "AzureCloud",
        "id": "33212d16-bdf6-45cb-b038-f6565b61edda",
        "isDefault": true,
        "name": "Subscription Name",
        "state": "Enabled",
        "tenantId": "8049c7e9-c3de-762d-a54e-dc3f6be6a7ee",
        "user": {
          "name": "you@example.com",
          "type": "user"
        }
      }

  3. 记录前面输出中 tenantIdid 参数的值。OpenShift Container Platform 安装过程中需要这些值。
  4. 为您的帐户创建服务主体:

    $ az ad sp create-for-rbac --role Contributor --name <service_principal> 1
    1
    <service_principal> 替换要您要分配给服务主体的名称。

    输出示例

    Changing "<service_principal>" to a valid URI of "http://<service_principal>", which is the required format used for service principal names
    Retrying role assignment creation: 1/36
    Retrying role assignment creation: 2/36
    Retrying role assignment creation: 3/36
    Retrying role assignment creation: 4/36
    {
      "appId": "8bd0d04d-0ac2-43a8-928d-705c598c6956",
      "displayName": "<service_principal>",
      "name": "http://<service_principal>",
      "password": "ac461d78-bf4b-4387-ad16-7e32e328aec6",
      "tenant": "6048c7e9-b2ad-488d-a54e-dc3f6be6a7ee"
    }

  5. 记录前面输出中 appIdpassword 参数的值。OpenShift Container Platform 安装过程中需要这些值。
  6. 为服务主体授予额外权限。

    • 您必须始终将 ContributorUser Access Administrator 角色添加到应用程序注册服务主体中,以便集群可以为组件分配凭证。
    • 要以 mint 模式操作 Cloud Credential Operator(CCO),应用程序注册服务主体还需要 Azure Active Directory Graph/Application.ReadWrite.OwnedBy API 权限。
    • 要以 passthrough 模式 操作 CCO,应用程序注册服务主体不需要额外的 API 权限。

    如需有关 CCO 模式的更多信息,请参阅 身份验证和授权 指南的"管理云供应商凭证"一节中的"关于 Cloud Credential Operator"。

    1. 要分配 User Access Administrator 角色,请运行以下命令:

      $ az role assignment create --role "User Access Administrator" \
          --assignee-object-id $(az ad sp list --filter "appId eq '<appId>'" \
             | jq '.[0].id' -r) 1
      1
      <appId> 替换为服务器主体的 appId 参数值。
    2. 要分配 Azure Active Directory Graph 权限,请运行以下命令:

      $ az ad app permission add --id <appId> \ 1
           --api 00000002-0000-0000-c000-000000000000 \
           --api-permissions 824c81eb-e3f8-4ee6-8f6d-de7f50d565b7=Role
      1
      <appId> 替换为服务器主体的 appId 参数值。

      输出示例

      Invoking "az ad app permission grant --id 46d33abc-b8a3-46d8-8c84-f0fd58177435 --api 00000002-0000-0000-c000-000000000000" is needed to make the change effective

      如需进一步了解可通过此命令授予的具体权限,请参阅 Windows Azure Active Directory 权限的 GUID 表

    3. 批准权限请求。如果您的帐户没有 Azure Active Directory 租户管理员角色,请按照您的组织的准则请租户管理员批准您的权限请求。

      $ az ad app permission grant --id <appId> \ 1
           --api 00000002-0000-0000-c000-000000000000
      1
      <appId> 替换为服务器主体的 appId 参数值。

其他资源

5.1.6. 支持的 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)
  • japaneast (Japan East)
  • japanwest (Japan West)
  • koreacentral (Korea Central)
  • koreasouth (Korea South)
  • northcentralus (North Central US)
  • northeurope (North Europe)
  • norwayeast (Norway East)
  • southafricanorth (South Africa North)
  • southcentralus (South Central US)
  • southeastasia (Southeast Asia)
  • southindia (South India)
  • 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)
支持的 Azure 政府区域

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

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

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

5.1.7. 后续步骤