×

您可以创建一个 Windows `MachineSet` 对象,以在 Microsoft Azure 上的 OpenShift Container Platform 集群中服务于特定目的。例如,您可以创建基础架构 Windows 机器集和相关的机器,以便您可以将支持 Windows 的工作负载迁移到新的 Windows 机器。

先决条件

  • 您已使用 Operator Lifecycle Manager (OLM) 安装了 Windows Machine Config Operator (WMCO)。

  • 您正在使用受支持的 Windows Server 作为操作系统镜像。

Machine API 概述

Machine API 是基于上游 Cluster API 项目和自定义 OpenShift Container Platform 资源的主要资源的组合。

对于 OpenShift Container Platform 4.17 集群,在集群安装完成后,Machine API 会执行所有节点主机配置管理操作。由于这个系统,OpenShift Container Platform 4.17 在公共或私有云基础设施之上提供了一种弹性、动态的配置方法。

两个主要资源是

机器 (Machines)

描述节点主机的基本单元。机器具有一个providerSpec规范,该规范描述了不同云平台上提供的计算节点类型。例如,计算节点的机器类型可能定义特定的机器类型和所需元数据。

机器集 (Machine sets)

MachineSet资源是计算机器的组。计算机器集与计算机器的关系,就像副本集与 Pod 的关系一样。如果您需要更多计算机器或必须缩减其规模,您可以更改MachineSet资源上的replicas字段以满足您的计算需求。

控制平面机器无法由计算机器集管理。

控制平面机器集为受支持的控制平面机器提供了与计算机器集为计算机器提供的类似的管理功能。

更多信息,请参见“管理控制平面机器”。

以下自定义资源为您的集群增加了更多功能

机器自动缩放器 (Machine autoscaler)

MachineAutoscaler资源会自动缩放云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大缩放边界,机器自动缩放器会维护该节点范围。

MachineAutoscaler对象在ClusterAutoscaler对象存在后生效。ClusterAutoscalerMachineAutoscaler资源均由ClusterAutoscalerOperator对象提供。

集群自动缩放器 (Cluster autoscaler)

此资源基于上游集群自动缩放器项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器集 API 与 Machine API 集成。您可以使用集群自动缩放器以以下方式管理您的集群:

  • 设置集群范围内的资源缩放限制,例如核心、节点、内存和 GPU

  • 设置优先级,以便集群优先处理 Pod,并且不会为不太重要的 Pod 在线添加新节点

  • 设置缩放策略,以便您可以向上扩展节点,但不能向下扩展节点

机器健康检查 (Machine health check)

MachineHealthCheck资源检测机器何时不健康,将其删除,并在受支持的平台上创建新机器。

在 OpenShift Container Platform 3.11 版本中,由于集群不管理机器配置,因此您无法轻松地推出多区域架构。从 OpenShift Container Platform 4.1 版本开始,此过程更加容易。每个计算机器集都限定在一个区域内,因此安装程序会代表您跨可用性区域发送计算机器集。然后,由于您的计算是动态的,并且面对区域故障时,您始终拥有一个区域以供您重新平衡机器。在没有多个可用性区域的全球 Azure 区域中,您可以使用可用性集来确保高可用性。自动缩放器在集群的整个生命周期中提供尽力而为的平衡。

Azure 上 Windows MachineSet 对象的示例 YAML

此示例 YAML 定义了在 Microsoft Azure 上运行的 Windows MachineSet 对象,Windows 机器配置操作符 (WMCO) 可以对其做出反应。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
  name: <windows_machine_set_name> (2)
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
      machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> (2)
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <windows_machine_set_name> (2)
        machine.openshift.io/os-id: Windows (3)
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" (4)
      providerSpec:
        value:
          apiVersion: azureproviderconfig.openshift.io/v1beta1
          credentialsSecret:
            name: azure-cloud-credentials
            namespace: openshift-machine-api
          image: (5)
            offer: WindowsServer
            publisher: MicrosoftWindowsServer
            resourceID: ""
            sku: 2019-Datacenter-with-Containers
            version: latest
          kind: AzureMachineProviderSpec
          location: <location> (6)
          managedIdentity: <infrastructure_id>-identity (1)
          networkResourceGroup: <infrastructure_id>-rg (1)
          osDisk:
            diskSizeGB: 128
            managedDisk:
              storageAccountType: Premium_LRS
            osType: Windows
          publicIP: false
          resourceGroup: <infrastructure_id>-rg (1)
          subnet: <infrastructure_id>-worker-subnet
          userDataSecret:
            name: windows-user-data (7)
            namespace: openshift-machine-api
          vmSize: Standard_D2s_v3
          vnet: <infrastructure_id>-vnet (1)
          zone: "<zone>" (8)
1 指定基于您在配置集群时设置的集群 ID 的基础设施 ID。您可以通过运行以下命令来获取基础设施 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 指定 Windows 计算机器集名称。Azure 上的 Windows 机器名称不能超过 15 个字符。因此,由于机器名称是由其生成的,因此计算机器集名称不能超过 9 个字符。
3 将计算机器集配置为 Windows 机器。
4 将 Windows 节点配置为计算机器。
5 指定定义2019-Datacenter-with-Containers SKU 的WindowsServer镜像。
6 指定 Azure 区域,例如centralus
7 在 WMCO 配置第一台 Windows 机器时创建。之后,windows-user-data 可供所有后续计算机器集使用。
8 指定要在其中放置机器的区域内的区域。请确保您的区域支持您指定的区域。

创建计算机器集

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

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

  • 安装 OpenShift CLI (oc)。

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

  • 在断开连接的环境中,MachineSet自定义资源 (CR) 中指定的镜像必须安装OpenSSH 服务器 v0.0.1.0

步骤
  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-windows-worker-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值匹配。如果计算机器集不可用,请等待几分钟,然后再次运行该命令。

其他资源