×

您可以创建不同的计算机会集以在 Microsoft Azure Stack Hub 上的 OpenShift Container Platform 集群中服务于特定目的。例如,您可以创建基础设施机器集和相关机器,以便您可以将支持的工作负载迁移到新机器。

您只能在机器 API 正在运行的集群中使用高级机器管理和缩放功能。具有用户预置基础设施的集群需要额外的验证和配置才能使用机器 API。

基础设施平台类型为none的集群无法使用机器 API。即使连接到集群的计算机会安装在支持此功能的平台上,此限制也适用。此参数安装后无法更改。

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

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

Azure Stack Hub 上计算机会集自定义资源的示例 YAML

此示例 YAML 定义了一个在区域的1个 Microsoft Azure 区域中运行的计算机会集,并创建标记为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> (2)
  name: <infrastructure_id>-<role>-<region> (3)
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> (3)
  template:
    metadata:
      creationTimestamp: null
      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> (2)
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> (3)
    spec:
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/<role>: "" (2)
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1beta1
          availabilitySet: <availability_set> (6)
          credentialsSecret:
            name: azure-cloud-credentials
            namespace: openshift-machine-api
          image:
            offer: ""
            publisher: ""
            resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/images/<infrastructure_id> (1)
            sku: ""
            version: ""
          internalLoadBalancer: ""
          kind: AzureMachineProviderSpec
          location: <region> (4)
          managedIdentity: <infrastructure_id>-identity (1)
          metadata:
            creationTimestamp: null
          natRule: null
          networkResourceGroup: ""
          osDisk:
            diskSizeGB: 128
            managedDisk:
              storageAccountType: Premium_LRS
            osType: Linux
          publicIP: false
          publicLoadBalancer: ""
          resourceGroup: <infrastructure_id>-rg (1)
          sshPrivateKey: ""
          sshPublicKey: ""
          subnet: <infrastructure_id>-<role>-subnet  (1) (2)
          userDataSecret:
            name: worker-user-data (2)
          vmSize: Standard_DS4_v2
          vnet: <infrastructure_id>-vnet (1)
          zone: "1" (5)
1 指定基于您在预配集群时设置的集群 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

您可以通过运行以下命令获取虚拟网络

$  oc -n openshift-machine-api \
    -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}{"\n"}' \
    get machineset/<infrastructure_id>-worker-centralus1
2 指定要添加的节点标签。
3 指定基础设施 ID、节点标签和区域。
4 指定放置机器的区域。
5 指定要在其上放置机器的区域内的区域。请确保您的区域支持您指定的区域。
6 指定集群的可用性集。

创建计算机会集

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

先决条件
  • 部署 OpenShift Container Platform 集群。

  • 安装 OpenShift CLI (oc)。

  • 以具有cluster-admin权限的用户身份登录到oc

  • 创建一个可用性集,用于在其中部署 Azure Stack Hub 计算机会。

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

    确保设置<availabilitySet><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值匹配。如果计算机器集合不可用,请等待几分钟然后再次运行该命令。

为集群自动缩放器标记 GPU 机器集合

您可以使用机器集合标签来指示集群自动缩放器可以使用哪些机器来部署启用 GPU 的节点。

先决条件
  • 您的集群使用集群自动缩放器。

步骤
  • 在您要为集群自动缩放器创建机器以用于部署启用 GPU 的节点的机器集合上,添加cluster-api/accelerator标签

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    metadata:
      name: machine-set-name
    spec:
      template:
        spec:
          metadata:
            labels:
              cluster-api/accelerator: nvidia-t4 (1)
    1 指定您选择的标签,该标签由字母数字字符、-_.组成,并以字母数字字符开头和结尾。例如,您可以使用nvidia-t4表示 Nvidia T4 GPU,或使用nvidia-a10g表示 A10G GPU。

    您必须为ClusterAutoscaler CR 中的spec.resourceLimits.gpus.type参数指定此标签的值。有关更多信息,请参见“集群自动缩放器资源定义”。

启用 Azure 启动诊断

您可以启用机器集合创建的 Azure 机器上的启动诊断。

先决条件
  • 拥有现有的 Microsoft Azure Stack Hub 集群。

步骤
  • 将适用于您的存储类型的diagnostics配置添加到机器集合 YAML 文件中的providerSpec字段

    • 对于 Azure 托管存储帐户

      providerSpec:
        diagnostics:
          boot:
            storageAccountType: AzureManaged (1)
      1 指定 Azure 托管存储帐户。
    • 对于 Azure 非托管存储帐户

      providerSpec:
        diagnostics:
          boot:
            storageAccountType: CustomerManaged (1)
            customerManaged:
              storageAccountURI: https://<storage-account>.blob.core.windows.net (2)
      1 指定 Azure 非托管存储帐户。
      2 <storage-account>替换为您的存储帐户的名称。

      仅支持 Azure Blob 存储数据服务。

验证
  • 在 Microsoft Azure 门户上,查看机器集合部署的机器的**启动诊断**页面,并验证您可以看到该机器的串行日志。

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

您可以向 Azure 提供加密密钥以加密静止状态下托管磁盘上的数据。您可以使用 Machine API 启用使用客户管理密钥的服务器端加密。

使用客户管理密钥需要 Azure Key Vault、磁盘加密集和加密密钥。磁盘加密集必须位于云凭据运算符 (CCO) 已授予权限的资源组中。如果不是,则需要在磁盘加密集上授予额外的读取器角色。

步骤
  • 在机器集合 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