×

您可以在 Google Cloud Platform (GCP) 上的 OpenShift Container Platform 集群中创建一个 Windows MachineSet 对象以服务于特定目的。例如,您可以创建基础架构 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 在公共或私有云基础设施之上提供了一种弹性的、动态的配置方法。

两个主要资源是

机器

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

机器集

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

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

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

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

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

机器自动缩放器

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

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

集群自动缩放器

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

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

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

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

机器健康检查

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

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

GCP 上 Windows MachineSet 对象的示例 YAML

此示例 YAML 文件定义了在 Google Cloud Platform (GCP) 上运行的 Windows MachineSet 对象,Windows Machine Config Operator (WMCO) 可以使用它。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
  name: <infrastructure_id>-windows-worker-<zone_suffix> (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: <infrastructure_id>-windows-worker-<zone_suffix> (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: <infrastructure_id>-windows-worker-<zone_suffix> (2)
        machine.openshift.io/os-id: Windows (3)
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: "" (4)
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1beta1
          canIPForward: false
          credentialsSecret:
            name: gcp-cloud-credentials
          deletionProtection: false
          disks:
          - autoDelete: true
            boot: true
            image: <windows_server_image> (5)
            sizeGb: 128
            type: pd-ssd
          kind: GCPMachineProviderSpec
          machineType: n1-standard-4
          networkInterfaces:
          - network: <infrastructure_id>-network (1)
            subnetwork: <infrastructure_id>-worker-subnet
          projectID: <project_id> (6)
          region: <region> (7)
          serviceAccounts:
          - email: <infrastructure_id>-w@<project_id>.iam.gserviceaccount.com
            scopes:
            - https://www.googleapis.com/auth/cloud-platform
          tags:
          - <infrastructure_id>-worker
          userDataSecret:
            name: windows-user-data (8)
          zone: <zone> (9)
1 指定基于您在配置集群时设置的集群 ID 的基础架构 ID。您可以通过运行以下命令获取基础架构 ID
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 指定基础设施 ID、工作节点标签和区域后缀(例如a)。
3 将机器集配置为 Windows 机器。
4 将 Windows 节点配置为计算机器。
5 指定支持的 Windows Server 版本映像的完整路径。
6 指定创建此集群的 GCP 项目。
7 指定 GCP 区域,例如us-central1
8 在 WMCO 配置第一台 Windows 机器时创建。之后,所有后续机器集都可以使用windows-user-data
9 指定所选区域内的区域,例如us-central1-a

创建计算机器集

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

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

  • 安装 OpenShift CLI(oc)。

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

步骤
  1. 创建一个新的 YAML 文件,其中包含计算机器集自定义资源 (CR) 示例,并将其命名为<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值匹配。如果计算机器集不可用,请等待几分钟然后再次运行命令。

其他资源