2.3. 在 Azure 上创建机器集


您可以在 Microsoft Azure 上的 OpenShift Container Platform 集群中创建不同的机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。

重要

您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。

具有基础架构平台类型 none 的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。

要查看集群的平台类型,请运行以下命令:

$ oc get infrastructure cluster -o jsonpath='{.status.platform}'

2.3.1. Azure 上机器设置自定义资源的 YAML 示例

此 YAML 示例定义了一个在区域(region)的 1 Microsoft Azure 区域(zone)中运行的机器集,并创建通过 node-role.kubernetes.io/<role>: "" 标记的节点。

在本例中,<infrastructure_id> 是基础架构 ID 标签,该标签基于您在置备集群时设定的集群 ID,而 <role> 则是要添加的节点标签。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
    machine.openshift.io/cluster-api-machine-role: <role> 2
    machine.openshift.io/cluster-api-machine-type: <role> 3
  name: <infrastructure_id>-<role>-<region> 4
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 6
  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 7
        machine.openshift.io/cluster-api-machine-role: <role> 8
        machine.openshift.io/cluster-api-machine-type: <role> 9
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 10
    spec:
      metadata:
        creationTimestamp: null
        labels:
          machine.openshift.io/cluster-api-machineset: <machineset_name> 11
          node-role.kubernetes.io/<role>: "" 12
      providerSpec:
        value:
          apiVersion: azureproviderconfig.openshift.io/v1beta1
          credentialsSecret:
            name: azure-cloud-credentials
            namespace: openshift-machine-api
          image: 13
            offer: ""
            publisher: ""
            resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/images/<infrastructure_id> 14
            sku: ""
            version: ""
          internalLoadBalancer: ""
          kind: AzureMachineProviderSpec
          location: <region> 15
          managedIdentity: <infrastructure_id>-identity 16
          metadata:
            creationTimestamp: null
          natRule: null
          networkResourceGroup: ""
          osDisk:
            diskSizeGB: 128
            managedDisk:
              storageAccountType: Premium_LRS
            osType: Linux
          publicIP: false
          publicLoadBalancer: ""
          resourceGroup: <infrastructure_id>-rg 17
          sshPrivateKey: ""
          sshPublicKey: ""
          tags:
            - name: <custom_tag_name> 18
              value: <custom_tag_value> 19
          subnet: <infrastructure_id>-<role>-subnet 20 21
          userDataSecret:
            name: worker-user-data 22
          vmSize: Standard_D4s_v3
          vnet: <infrastructure_id>-vnet 23
          zone: "1" 24
1 5 7 16 17 20 23
指定基于置备集群时所设置的集群 ID 的基础架构 ID。如果已安装 OpenShift CLI,您可以通过运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster

您可以运行以下命令来获取子网:

$  oc -n openshift-machine-api \
    -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}{"\n"}' \
    get machineset/<infrastructure_id>-worker-centralus1

您可以运行以下命令来获取 vnet:

$  oc -n openshift-machine-api \
    -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}{"\n"}' \
    get machineset/<infrastructure_id>-worker-centralus1
2 3 8 9 12 21 22
指定要添加的节点标签。
4 6 10
指定基础架构 ID、节点标签和地区。
11
可选:指定机器集名称以启用可用性集。此设置仅适用于新的计算机器。
13
指定机器集的镜像详情。如果要使用 Azure Marketplace 镜像,请参阅"选择 Azure Marketplace 镜像"。
14
指定与实例类型兼容的镜像。安装程序创建的 Hyper-V 生成 V2 镜像具有 -gen2 后缀,而 V1 镜像则与没有后缀的名称相同。
15
指定要放置机器的区域。
24
指定您所在地区(region)内要放置机器的区域 (zone) 。确保您的地区支持您指定的区域。
18 19
可选:在机器集中指定自定义标签。在 <custom_tag_name> 字段中提供标签名称,并在 <custom_tag_value> 字段中提供对应的标签值。

2.3.2. 创建机器集

除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。

先决条件

  • 部署一个 OpenShift Container Platform 集群。
  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 权限的用户身份登录 oc

流程

  1. 创建一个包含机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为 <file_name>.yaml

    确保设置 <clusterID><role> 参数值。

  2. 可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:

    1. 要列出集群中的计算机器集,请运行以下命令:

      $ oc get machinesets -n openshift-machine-api

      输出示例

      NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
      agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1d   0         0                             55m
      agl030519-vplxk-worker-us-east-1e   0         0                             55m
      agl030519-vplxk-worker-us-east-1f   0         0                             55m

    2. 要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:

      $ oc get machineset <machineset_name> \
        -n openshift-machine-api -o yaml

      输出示例

      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
        name: <infrastructure_id>-<role> 2
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: <infrastructure_id>
            machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: <infrastructure_id>
              machine.openshift.io/cluster-api-machine-role: <role>
              machine.openshift.io/cluster-api-machine-type: <role>
              machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
          spec:
            providerSpec: 3
              ...

      1
      集群基础架构 ID。
      2
      默认节点标签。
      注意

      对于具有用户置备的基础架构的集群,计算机器集只能创建 workerinfra 类型机器。

      3
      计算机器设置 CR 的 <providerSpec> 部分中的值是特定于平台的。有关 CR 中的 <providerSpec> 参数的更多信息,请参阅您的供应商计算机器设置 CR 配置示例。
  3. 运行以下命令来创建 MachineSet CR:

    $ oc create -f <file_name>.yaml

验证

  • 运行以下命令,查看计算机器集列表:

    $ oc get machineset -n openshift-machine-api

    输出示例

    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-infra-us-east-1a    1         1         1       1           11m
    agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1d   0         0                             55m
    agl030519-vplxk-worker-us-east-1e   0         0                             55m
    agl030519-vplxk-worker-us-east-1f   0         0                             55m

    当新机器集可用时,DESIREDCURRENT 的值会匹配。如果机器集不可用,请等待几分钟,然后再次运行命令。

2.3.3. 选择 Azure Marketplace 镜像

您可以创建在 Azure 上运行的机器集,以部署使用 Azure Marketplace 产品的机器。要使用此产品,您必须首先获取 Azure Marketplace 镜像。在获取您的镜像时,请考虑以下事项:

  • 虽然镜像相同,但 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 虚拟机镜像。

先决条件

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

流程

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

    • 北美:

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

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-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

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

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

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.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

    注意

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

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

    • 北美:

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

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

    • 北美:

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

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

    • 北美:

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

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  5. 记录您所提供的镜像详情,特别是 publisher, offer, sku, 和 version 的值。
  6. 使用您提供的镜像详情,在机器集 YAML 文件的 providerSpec 部分添加以下参数:

    Azure Marketplace 计算机器的 providerSpec 镜像值示例

    providerSpec:
      value:
        image:
          offer: rh-ocp-worker
          publisher: redhat
          resourceID: ""
          sku: rh-ocp-worker
          type: MarketplaceWithPlan
          version: 4.8.2021122100

2.3.4. 将机器部署为 Spot 虚拟机的机器

您可以通过创建在 Azure 上运行的机器集将机器部署为非保障的 Spot 虚拟机来节约成本。Spot VM 使用未使用的 Azure 容量,且比标准虚拟机的成本要低。您可以将 Spot 虚拟机用于可容许中断的工作负载,如批处理或无状态工作负载、横向可扩展工作负载。

Azure 可随时终止 Spot 虚拟机。Azure 在发生中断时向用户发出 30 秒警告。当 Azure 发出终止警告时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。

使用 Spot 虚拟机时可能会因为以下原因造成中断:

  • 实例价格超过您的最大价格
  • Spot 虚拟机的提供减少
  • Azure 需要容量退回

当 Azure 终止实例时,在 Spot VM 节点上运行的终止处理器会删除机器资源。为了满足机器集副本数量,机器集会创建一个请求 Spot 虚拟机的机器。

2.3.5. 使用机器集创建 Spot 虚拟机

您可以通过在机器设置 YAML 文件中添加 spotVMOptions,在 Azure 上启动 Spot VM。

流程

  • providerSpec 字段中添加以下行:

    providerSpec:
      value:
        spotVMOptions: {}

    您可以选择设置 spotVMOptions.maxPrice 字段来限制 Spot 虚拟机的成本。例如,您可以设置 maxPrice: '0.98765'。如果设置了 maxPrice,则将此值用作每小时最大即时价格。如果没有设置,则最大价格默认为 -1 且不超过标准虚拟机价格。

    Azure 封顶 Spot VM 价格以标准价格为基础。如果实例使用默认的 maxPrice 设置,Azure 不会因为定价而驱除实例。但是,一个实例仍然可能会因为容量限制而被驱除。

注意

强烈建议您使用默认标准 VM 价格作为 maxPrice 值,而不为 Spot 虚拟机设置最大价格。

2.3.6. 在临时操作系统磁盘中部署机器的机器集

您可以创建在 Azure 上运行的机器集,用于在 Ephemeral OS 磁盘上部署机器。临时 OS 磁盘使用本地虚拟机容量,而不是远程 Azure 存储。因此,此配置不会产生额外费用,并提供了较低的读、写和重新处理延迟。

其他资源

2.3.7. 使用机器集在临时 OS 磁盘上创建机器

您可以通过编辑机器集 YAML 文件在 Azure 上的 Ephemeral OS 磁盘上启动机器。

先决条件

  • 已有 Microsoft Azure 集群。

流程

  1. 运行以下命令来编辑自定义资源(CR):

    $ oc edit machineset <machine-set-name>

    其中 <machine-set-name> 是要在 Ephemeral OS 磁盘上置备机器的机器集。

  2. providerSpec 字段中添加以下内容:

    providerSpec:
      value:
        ...
        osDisk:
           ...
           diskSettings: 1
             ephemeralStorageLocation: Local 2
           cachingType: ReadOnly 3
           managedDisk:
             storageAccountType: Standard_LRS 4
           ...
    1 2 3
    这些行允许使用 Ephemeral OS 磁盘。
    4
    临时磁盘仅支持虚拟机或扩展使用标准 LRS 存储帐户类型的实例。
    重要

    OpenShift Container Platform 中支持 Ephemeral OS 磁盘实现只支持 CacheDisk 放置类型。不要更改 placement 配置设置。

  3. 使用更新的配置创建机器集:

    $ oc create -f <machine-set-config>.yaml

验证

  • 在 Microsoft Azure 门户中,查看机器集部署的机器的 Overview 页面,并验证 Ephemeral OS 磁盘 字段是否已设置为 OS 缓存放置

2.3.8. 为机器集启用客户管理的加密密钥

您可以为 Azure 提供加密密钥,以便加密受管磁盘上的数据。您可以使用 Machine API 使用客户管理的密钥启用服务器端加密。

使用客户管理的密钥需要 Azure Key Vault、磁盘加密集和加密密钥。磁盘加密集必须先在 Cloud Credential Operator(CCO)授予权限的资源组中。如果没有,则需要在磁盘加密集中授予额外的 reader 角色。

流程

  • 在机器集 YAML 文件中的 providerSpec 字段中配置磁盘加密集。例如:

    ...
    providerSpec:
      value:
        ...
        osDisk:
          diskSizeGB: 128
          managedDisk:
            diskEncryptionSet:
              id: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Compute/diskEncryptionSets/<disk_encryption_set_name>
            storageAccountType: Premium_LRS
    ...

其他资源

2.3.9. Microsoft Azure 虚拟机的加速网络

加速网络使用单一根 I/O 虚拟化(SR-IOV)为 Microsoft Azure 虚拟机提供更直接的路径到交换机。这提高了网络性能。此功能可在安装过程中或安装后启用。

2.3.9.1. 限制

在决定是否使用加速网络时,请考虑以下限制:

  • 只有在 Machine API 操作的集群中支持加速网络。
  • 虽然 Azure worker 节点的最低要求是两个 vCPU,但 Accelerated Networking 需要包含至少四个 vCPU 的 Azure 虚拟机大小。为了满足此要求,您可以在机器集中更改 vmSize 的值。有关 Azure VM 大小的信息,请参阅 Microsoft Azure 文档
  • 当在现有 Azure 集群上启用这个功能时,只有新置备的节点会受到影响。当前运行的节点不会被协调。要在所有节点上启用这个功能,必须替换每个现有机器。这可以为每个机器单独完成,或者将副本缩减为零,然后备份到所需的副本数。

其他资源

2.3.10. 在现有 Microsoft Azure 集群上启用加速网络

您可以通过在机器集 YAML 文件中添加 acceleratedNetworking,在 Azure 上启用加速网络。

先决条件

  • 有一个现有的 Microsoft Azure 集群,其中的 Machine API 正常运行。

流程

  1. 运行以下命令列出集群中的机器集:

    $ oc get machinesets -n openshift-machine-api

    机器集以 <cluster-id>-worker-<region> 的形式列出。

    输出示例

    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    jmywbfb-8zqpx-worker-centralus1     1         1         1       1           15m
    jmywbfb-8zqpx-worker-centralus2     1         1         1       1           15m
    jmywbfb-8zqpx-worker-centralus3     1         1         1       1           15m

  2. 对于每个机器集:

    1. 运行以下命令来编辑自定义资源(CR):

      $ oc edit machineset <machine-set-name>
    2. providerSpec 字段中添加以下内容:

      providerSpec:
        value:
          ...
          acceleratedNetworking: true 1
          ...
          vmSize: <azure-vm-size> 2
          ...
      1
      此行启用加速网络。
      2
      指定包含至少四个 vCPU 的 Azure VM 大小。有关 VM 大小的信息,请参阅 Microsoft Azure 文档
  3. 要在当前运行的节点上启用这个功能,必须替换每个现有机器。这可以为每个机器单独完成,或者将副本缩减为零,然后备份到所需的副本数。

验证

  • 在 Microsoft Azure 门户上,查看机器集调配的机器的 Networking 设置页面,并验证 Accelerated networking 字段设置为 Enabled

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.