在ACK集群中创建和管理Windows节点池

节点池可以管理集群中的一组节点资源,例如在节点池中统一管理节点的标签和污点。如需创建操作系统类型为Windows的节点,您可以在ACK集群中创建Windows节点池,并在节点池维度进行kubelet、运行时和操作系统镜像版本的升级。

使用限制

下表介绍了创建Windows节点池时必须满足的条件。

限制项

说明

集群

  • 已创建ACK托管集群

    说明
    • 目前仅支持在ACK托管集群中创建Windows节点池。

    • Windows节点池需要在已创建的集群中创建,不支持在创建集群时创建。

  • 集群版本为1.20.4及以上。

    如需升级集群,请参见手动升级集群
  • 集群网络类型为Flannel。

  • kube-flannel-ds-windows版本为v0.15.2-aliyun及以上。

容器运行时

1.6及以上版本的containerd支持Windows节点池。

如需升级运行时版本,请参见升级节点池

节点池类型

仅支持将非托管节点池创建为Windows节点池。

实例规格

  • 不同实例规格对Windows节点池的支持情况不同,有些实例规格不支持Windows节点池,请多次尝试。例如,您可以选择ecs.g6.xlarge,此实例规格支持Windows节点池。

  • 实例规格为4核 8GB及以上。

    • Windows容器在内存使用超出限制后并不会执行OOM Killed。自202105月起,在v1.16及之后版本的ACK集群,新添加的Windows节点启动时会预留一定的资源(1.5CPU、2.5 GB RAM、3 GB DISK),以保证Windows系统、kubelet、容器运行时的稳定运行。关于资源预留的更多信息,请参见节点资源预留策略

      说明

      ACK通过预留资源机制,可以减少或避免因Windows工作负载的过度分配而导致Windows节点完全不可用的情况。但当Windows容器应用发生内存泄漏时,依然存在击垮Windows节点的可能性。

    • Windows容器有一定的Footprint。更多信息,请参见Windows容器的内存要求

下表介绍创建Windows节点池时的使用限制。

限制项

说明

操作系统

Windows节点池支持的操作系统为Windows Server 2019、Windows Server 2022Windows Server Core,Version 2022。

说明

ACK控制台支持选择Windows Server 2019、Windows Server 2022Windows Server Core,Version 2022。如果您有使用Windows Server Core,Version 2004的需求,请根据ECS公共镜像发布记录来选择最新的镜像ID创建节点池。更多信息,请参见2023公共镜像发布记录。

节点数量

默认情况下,每个集群中最多可包含100个节点。如果您需要添加更多节点,请到配额平台提交申请

云服务器

添加已有云服务器时,请确保您的专有网络中的ECS实例已绑定一个弹性公网IP(EIP),或者相应VPC已配置NAT网关。请确保相应节点能正常访问公网,否则,添加云服务器会失败。关于添加已有ECS实例的注意事项和操作步骤,请参见添加已有节点

创建Windows节点池

控制台

不支持创建默认节点池(default-nodepool)为Windows节点池。请参见上文使用限制,在创建集群后额外创建Windows节点池。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池页面右上角,单击创建节点池,设置相关配置项,然后单击确认配置

    关于配置项的详细说明,请参见创建和管理节点池。部分配置项说明如下。

    配置项

    说明

    托管配置

    选择不开启。

    容器运行时

    选择containerd。

    实例规格

    • 不同实例规格对Windows节点池的支持情况不同,有些实例规格不支持Windows节点池,需要进行多次尝试。例如您可以选择ecs.g6.xlarge,此实例规格支持Windows节点池。

    • 请选择48GB以上的规格。

    • 请选择非GPU云服务器架构的实例规格。

      更多关于实例规格的信息,请参见实例规格族

    期望节点数

    节点池应该维持的节点数量。指定节点池的期望节点数后,节点池会自动触发扩容或缩容,将节点数目维持在期望数量。

    操作系统

    选择Windows操作系统。

    ECS 标签

    ECS实例添加标签。

    节点标签(Labels)

    为集群节点添加标签。

    节点池页面,当节点池状态显示为就绪,表明Windows节点池创建成功。

API

您可以调用CreateClusterNodePool接口创建Windows 节点池,配置节点数量、节点规格等参数。示例参数如下。

{
  "ClusterId": "ca8ed83XXXXXXXXXXXX5ec197",          // 集群ID。
  "body": { 
    "nodepool_info": {
      "name": "nodepool-fXXXXXx",                    // 节点池名称。
      "resource_group_id": "rg-acfmXXXXXXXXsjpq"     // 集群所属资源组 ID,实现不同资源的隔离。  
    },
    "scaling_group": {
      "vswitch_ids": [                               // 集群节点所在虚拟交换机,当创建零节点的托管版集群时,该字段必填。 
        "vsw-bp1XXXXXXXXXXXXX1xm84",
        "vsw-bp1XXXXXXXXXXXX2v6x0a",
        "vsw-bp1XXXXXXXXXXXXXjkxbo"
      ],
      "data_disks": [                                // Worker 节点数据盘类型、大小等配置的组合。
        {
          "category": "cloud_essd",
          "size": 120,
          "encrypted": "false",
          "performance_level": "PL0"
        }
      ],
      "vpc_id": "vpc-bpXXXXXXXXXXXXXXXmgb6",         // 集群VPC_ID。
      "instance_charge_type": "PostPaid",            // 节点付费类型,取值:PrePaid(预付费实例)。 PostPaid(按量付费)。默认值:PostPaid 。
      "internet_max_bandwidth_out": 1,               // 节点公网 IP 出带宽最大值,单位为 Mbps(Mega bit per second),取值范围:[1,100]
      "soc_enabled": false,                          // 节点开启等保加固。取值:true:开启。false:不开启。
      "security_hardening_os": false,                // 是否开启阿里云OS安全加固。取值:true:开启。  false:不开启。默认值:false。
      "instance_types": [                            //  实例规格。
        "ecs.n2.large"
      ],
      "instance_patterns": [                         // 实例属性配置。
        {
          "Cores": 4,
          "Memory": 16,
          "burst_performance_option": "Exclude",     // 是否为性能突发实例规格。  
          "excluded_instance_types": [               // 需要排除的实例规格。
            "ecs.c6t.*"
            // ...
          ],
          "instance_type_families": [                // 指定实例规格族。  
            "ecs.g6"
            // ...
          ]
        }
      ],
      "login_password": "XXXXXX",
      "login_as_non_root": false,
      "system_disk_category": "cloud_essd",
      "system_disk_size": 40,
      "system_disk_performance_level": "PL0",
      "system_disk_encrypted": false,
      "multi_az_policy": "BALANCE",                // 多可用区伸缩组 ECS 实例扩缩容策略。
      "platform": "WindowsServer2022",
      "image_id": "win2022_21H2_x64_dtc_en-us_40G_container_alibase_20240220.vhd",
      "image_type": "WindowsServer2022",
      "desired_size": 1
    },
    "kubernetes_config": {                         // 集群相关配置。
      "cms_enabled": true,                         // 是否在 ECS 节点上安装云监控,安装后可以在云监控控制台查看所创建 ECS 实例的监控信息,推荐开启。
      "unschedulable": false,                      // 扩容后的节点是否不可调度。  true:不可调度。  false:可调度。
      "runtime": "containerd",                   
      "runtime_version": "2.1.1"                   // 仅1.6及以上版本的containerd支持Windows节点池。
    },
    "auto_scaling": {                              // 自动弹性伸缩节点池配置。 true:开启节点池自动伸缩功能。 false:不开启自动伸缩。
      "enable": false
    },
    "tee_config": {                                // 加密计算节点池配置。  true:开启加密计算。false:不开启加密计算。
      "tee_enable": false
    },
    "node_config": {                               // 节点配置。    
      "image_acceleration_config": {
        "enable_image_acceleration": false
      }
    }
  }
}

Terraform

您可以参见Terraform概述文档创建Windows 节点池,配置节点数量、节点规格等参数。示例参数如下。

provider "alicloud" {
  region = "cn-hangzhou"
}

resource "alicloud_cs_kubernetes_node_pool" "pool" {
  tee_config {
    tee_enable = false
  }

  runtime_version   = "2.1.1"                    // 容器运行时版本,仅1.6及以上版本的containerd支持Windows节点池。
  resource_group_id = "rg-acXXXXXXXjpq"
  multi_az_policy   = "BALANCE"
  node_pool_name    = "nodepool-fqLfdx"
  login_as_non_root = false
  runtime_name      = "containerd"
  cluster_id        = "ca8ed83XXXXXXXXXXXXXXXXa55ec197"
  password          = "XXXXXXX"

  data_disks {
    size              = 120
    encrypted         = "false"
    performance_level = "PL0"
    category          = "cloud_essd"
  }

  instance_charge_type = "PostPaid"               // 节点付费类型,取值:PrePaid(预付费实例)。 PostPaid(按量付费)。默认值:PostPaid 。
  desired_size         = 1
  unschedulable        = false

  scaling_config {
    enable = false
  }

  image_type    = "WindowsServer"
  vswitch_ids   = [
    "vsw-bp1XXXXXXXXXXXXXXXX84",
    "vsw-bp1XXXXXXXXXXXXXXXX0a",
    "vsw-bp1XXXXXXXXXXXXXXXXXo"
  ]
  
  instance_types = [                             // 实例规格。节点池节点实例规格列表,节点池弹出节点时,将从指定的实例规格列表中,挑选出符合要求的实例规格弹出实例。
    "ecs.g6.large" 
  ]
  soc_enabled                   = false          // 等保加固。取值:true:开启等保加固。false:不开启等保加固。
  internet_max_bandwidth_out    = 1              // 节点公网 IP 出带宽最大值,单位为 Mbps(Mega bit per second),取值范围:[1,100]
  system_disk_encrypted         = false          // 是否加密系统盘。取值范围: true:加密。false:不加密。
  system_disk_size              = 40
  install_cloud_monitor         = true
  system_disk_category          = "cloud_essd"
  system_disk_performance_level = "PL0"
  image_id                      = "win2022_21H2_x64_dtc_en-us_40G_container_alibase_20240220.vhd"
  security_hardening_os         = false
}

升级Windows节点池

节点池升级包括kubelet升级和容器运行时升级。请在升级节点池前,确保已升级控制面至目标版本。

  • kubelet升级:将节点池内节点的kubelet升级到与控制面相同的版本。

  • 容器运行时升级:容器运行时发布新版本后,可升级节点的容器运行时至最新版本。

您可以参见升级节点池了解升级的注意事项和操作入口。配置升级方式时,Windows节点池需选择通过替换节点系统盘的方式进行升级。

升级Windows节点池的操作系统镜像

您可参见更换操作系统将节点池的操作系统镜像升级至最新版本,以享用新的功能特性、功能优化和缺陷修复。

可参见操作系统了解镜像的最新版本。

相关文档