ALIYUN::CS::ClusterNodePool

ALIYUN::CS::ClusterNodePool类型用于为集群创建节点池。

语法

{
  "Type": "ALIYUN::CS::ClusterNodePool",
  "Properties": {
    "TeeConfig": Map,
    "ClusterId": String,
    "NodePoolInfo": Map,
    "KubernetesConfig": Map,
    "Count": Integer,
    "Management": Map,
    "AutoScaling": Map,
    "ScalingGroup": Map
  }
}

属性

属性名称

类型

必须

允许更新

描述

约束

ClusterId

String

集群ID。

您可以通过调用DescribeClustersV1查询集群ID。

ScalingGroup

Map

节点池扩容组配置。

您可以通过调用DescribeClusterNodePools查询节点池扩容组配置。

更多信息,请参见ScalingGroup语法ScalingGroup属性

AutoScaling

Map

自动伸缩配置。

更多信息,请参见AutoScaling语法AutoScaling属性

Count

Integer

节点池节点数量。

KubernetesConfig

Map

集群相关配置。

更多信息,请参见KubernetesConfig语法KubernetesConfig属性

Management

Map

托管节点池配置。

更多信息,请参见Management语法Management属性

NodePoolInfo

Map

节点池配置。

更多信息,请参见NodePoolInfo语法NodePoolInfo属性

TeeConfig

Map

加密计算集群配置。

更多信息,请参见TeeConfig语法TeeConfig属性

TeeConfig语法

"TeeConfig": {
  "TeeEnable": Boolean
}

TeeConfig属性

属性名称

类型

必须

允许更新

描述

约束

TeeEnable

Boolean

是否开启加密计算集群。

取值:

  • true:开启加密计算集群。

  • false(默认值):不开启加密计算集群。

NodePoolInfo语法

"NodePoolInfo": {
  "ResourceGroupId": String,
  "Name": String
}

NodePoolInfo属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

节点池名称。

ResourceGroupId

String

节点池所属的资源组ID。

KubernetesConfig语法

"KubernetesConfig": {
  "CpuPolicy": String,
  "Runtime": String,
  "CmsEnabled": Boolean,
  "UserData": String,
  "NodeNameMode": String,
  "RuntimeVersion": String,
  "Labels": List,
  "Unschedulable": Boolean,
  "Taints": List
}

KubernetesConfig属性

属性名称

类型

必须

允许更新

描述

约束

Runtime

String

容器运行时的名称。

RuntimeVersion

String

容器运行时版本。

CpuPolicy

String

节点CPU管理策略。

当集群版本在1.12.6及以上时,支持以下两种策略:

  • static:此策略允许向节点上具有特定资源特征的POD授予增强的CPU亲和力和独占性。

  • none(默认值):表示启用现有的默认CPU亲和性方案。

CmsEnabled

Boolean

是否在ECS节点上安装云监控。

安装云监控后,可以在云监控控制台查看所创建ECS实例的监控信息。推荐开启。

取值:

  • true:在ECS节点上安装云监控。

  • false(默认值):不在ECS节点上安装云监控。

NodeNameMode

String

自定义节点名。

节点名称由三部分组成:前缀+节点IP地址子串+后缀。

  • 前缀和后缀均可由半角句号(.)分隔的一个或多个部分组成,每个部分可以使用小写英文字母、数字和短划线(-),节点名称首尾必须为小写英文字母和数字。

  • IP地址段长度指截取节点IP地址末尾的位数,取值范围为5~12。

Labels

List

节点标签,为Kubernetes集群节点添加标签。

更多信息,请参见Labels语法Labels属性

UserData

String

节点自定义数据。

Unschedulable

Boolean

是否调度新添加的节点。

取值:

  • true:调度新节点。若想打开调度选项,可以在节点列表中开启。

  • false(默认值):节点扩容后设置为不可调度。

Taints

List

污点配置。

更多信息,请参见Taints语法Taints属性

Labels语法

"Labels": [
  {
    "Value": String,
    "Key": String
  }
]

Labels属性

属性名称

类型

必须

允许更新

描述

约束

Value

String

标签值。

Key

String

标签键。

Taints语法

"Taints": [
  {
    "Value": String,
    "Effect": String,
    "Key": String
  }
]

Taints属性

属性名称

类型

必须

允许更新

描述

约束

Value

String

污点值。

Key

String

污点名称。

Effect

String

调度策略。

取值:

  • NoSchedule(默认值):不能容忍,但仅影响调度过程,已被调度的Pod不受影响,仅对新增加的Pod生效。

  • NoExecute:不能容忍,当污点变动时,Pod对象会被驱逐。

  • PreferNoSchedule:柔性约束,节点现存Pod不受影响。

Management语法

"Management": {
  "UpgradeConfig": Map,
  "AutoRepair": Boolean,
  "Enable": Boolean
}

Management属性

属性名称

类型

必须

允许更新

描述

约束

Enable

Boolean

是否启用托管节点池。

取值:

  • true:启用托管节点池。

  • false(默认值):禁用托管节点池。

AutoRepair

Boolean

是否启用自动修复。

此参数仅在Enable取值为true时生效。

取值:

  • true:启用自动修复。

  • false(默认值):禁用自动修复。

UpgradeConfig

Map

自动升级的配置。

该属性仅在Enable取值为true时生效。

更多信息,请参见UpgradeConfig语法UpgradeConfig属性

UpgradeConfig语法

"UpgradeConfig": {
  "AutoUpgrade": Boolean,
  "SurgePercentage": Integer,
  "Surge": Integer,
  "MaxUnavailable": Integer
}

UpgradeConfig属性

属性名称

类型

必须

允许更新

描述

约束

AutoUpgrade

Boolean

是否启用自动升级。

取值:

  • true:启用自动升级。

  • false(默认值):禁用自动升级。

SurgePercentage

Integer

额外节点比例。

SurgePercentageSurge只能指定其中一个。

Surge

Integer

额外节点数量。

SurgePercentageSurge只能指定其中一个。

MaxUnavailable

Integer

最大不可用节点数量。

取值范围:1~1000。默认值:1。

AutoScaling语法

"AutoScaling": {
  "EipBandwidth": Integer,
  "Type": String,
  "IsBondEip": Boolean,
  "MinInstances": Integer,
  "Enable": Boolean,
  "MaxInstances": Integer,
  "EipInternetChargeType": String
}

AutoScaling属性

属性名称

类型

必须

允许更新

描述

约束

Enable

Boolean

是否启用自动伸缩。

取值:

  • true:开启节点池自动伸缩功能。

  • false(默认值):不开启自动伸缩。当取值为false时,其他AutoScaling配置参数将不生效。

EipBandwidth

Integer

EIP带宽峰值。

EipInternetChargeType

String

EIP计费类型。

取值:

  • PayByBandwidth(默认值):按固定带宽计费。

  • PayByTraffic:按使用流量计费。

IsBondEip

Boolean

是否绑定EIP。

取值:

  • true:绑定EIP。

  • false(默认值):不绑定EIP。

MinInstances

Integer

自动伸缩组最小实例数。

MaxInstances

Integer

自动伸缩组最大实例数。

Type

String

自动伸缩类型。

取值(按照自动伸缩实例类型):

  • cpu(默认值):普通实例型。

  • gpu:GPU实例型。

  • gpushare:GPU共享型。

  • spot:抢占式实例型。

ScalingGroup语法

"ScalingGroup": {
  "SpotInstanceRemedy": Boolean,
  "Platform": String,
  "DataDisks": List,
  "SystemDiskSize": Integer,
  "CompensateWithOnDemand": Boolean,
  "InstanceChargeType": String,
  "OnDemandPercentageAboveBaseCapacity": Integer,
  "AutoRenew": Boolean,
  "OnDemandBaseCapacity": Integer,
  "SystemDiskPerformanceLevel": String,
  "ImageId": String,
  "SpotPriceLimit": List,
  "InstanceTypes": List,
  "Tags": List,
  "SpotStrategy": String,
  "LoginPassword": String,
  "MultiAzPolicy": String,
  "AutoRenewPeriod": Integer,
  "ScalingPolicy": String,
  "KeyPair": String,
  "VSwitchIds": List,
  "SecurityGroupId": String,
  "SpotInstancePools": Integer,
  "Period": Integer,
  "InternetChargeType": String,
  "SystemDiskCategory": String,
  "InternetMaxBandwidthOut": Integer,
  "RdsInstances": List,
  "PeriodUnit": String,
  "ZoneIds": List   
}

ScalingGroup属性

属性名称

类型

必须

允许更新

描述

约束

InstanceTypes

List

抢占式实例规格。

SystemDiskSize

Integer

节点的系统磁盘大小。

单位:GiB。取值范围:40~500。

VSwitchIds

List

交换机ID。

AutoRenew

Boolean

节点池节点是否开启自动续费。

InstanceChargeType取值为PrePaid时生效。

取值:

  • true(默认):自动续费。

  • false:不自动续费。

AutoRenewPeriod

Integer

节点池节点自动续费周期。

InstanceChargeType取值为PrePaid,且AutoRenew取值为true时,AutoRenewPeriod生效且为必选值。

PeriodUnit取值为Month时,取值:

  • 1(默认值)

  • 2

  • 3

  • 6

  • 12

CompensateWithOnDemand

Boolean

MultiAzPolicy取值为COST_OPTIMIZED时,如果因价格、库存等原因无法创建足够的抢占式实例,是否允许自动尝试创建按量实例满足ECS实例数量要求。

取值:

  • true(默认值):允许自动尝试创建按量实例满足ECS实例数量要求。

  • false:不允许自动尝试创建按量实例满足ECS实例数量要求。

DataDisks

List

节点池节点数据盘配置。

更多信息,请参见DataDisks语法DataDisks属性

InstanceChargeType

String

节点池节点付费类型。

取值:

  • PrePaid:预付费。

  • PostPaid(默认值):按量付费。

ImageId

String

自定义镜像ID。

默认使用系统提供的镜像。

OnDemandPercentageAboveBaseCapacity

Integer

伸缩组满足OnDemandBaseCapacity要求后,超出的实例中按量实例应占的比例。

取值范围:0~100。

OnDemandBaseCapacity

Integer

伸缩组所需要按量实例个数的最小值。

取值范围:0~1000。当按量实例个数少于该值时,将优先创建按量实例。

Platform

String

操作系统。

取值:

  • CentOS

  • AliyunLinux(默认值)

  • Windows

  • WindowsCore

Period

Integer

节点池节点自动续费周期,当选择预付费和自动续费时才生效,且为必选值。

PeriodUnit取值为Month时,取值:

  • 1(默认值)

  • 2

  • 3

  • 6

  • 12

PeriodUnit

String

节点池节点付费周期。

InstanceChargeType取值为PrePaid的时候需要指定周期。

取值:

  • Month:月。

  • Year:年。

LoginPassword

String

SSH登录密码。

KeyPairLoginPassword仅能指定其中一个。

密码规则为8~30个字符,且至少包含英文字母、数字和特殊符号( ) ` ~ ! @ # $ % ^ & * - _ + = | { } [ ] : ; ' < > , . ? /中的三项。

MultiAzPolicy

String

多可用区伸缩组ECS实例扩容和缩容策略。

取值:

  • PRIORITY(默认值):根据您定义的交换机进行扩容或者缩容。当优先级较高的交换机所在可用区无法创建ECS实例时,自动使用下一优先级的交换机创建ECS实例。

  • COST_OPTIMIZED:按vCPU单价从低到高进行尝试创建。当伸缩配置设置了抢占式计费方式的多实例规格时,优先创建抢占式实例。您可以继续通过CompensateWithOnDemand指定当抢占式实例由于库存等原因无法创建时,是否自动尝试以按量付费的方式创建。

    说明

    COST_OPTIMIZED仅在伸缩配置设置了多实例规格或者选用了抢占式实例的情况下生效。

  • BALANCE:在伸缩组指定的多可用区之间均匀分配ECS实例。如果由于库存不足等原因使可用区之间变得不平衡,您可以通过APIRebalanceInstances重新平衡多可用区伸缩组内ECS实例的分布。

KeyPair

String

免密登录密钥对名称。

KeyPairLoginPassword仅能指定其中一个。

说明

如果创建托管节点池,则只支持KeyPair。

SecurityGroupId

String

安全组ID。

SpotInstanceRemedy

Boolean

是否使用抢占式实例。

取值:

  • true(默认值):使用抢占式实例。当收到抢占式实例将被回收的系统消息时,伸缩组将尝试创建新的实例,替换掉将被回收的抢占式实例。

  • false:不使用抢占式实例。

更多信息,请参见使用抢占式实例

SystemDiskPerformanceLevel

String

设置云盘的性能等级。

取值:

  • PL1:单盘最高随机读写IOPS 5万。

  • PL2:单盘最高随机读写IOPS 10万。

  • PL3:单盘最高随机读写IOPS 100万。

更多信息,请参见ESSD云盘

SpotStrategy

String

抢占式实例类型。

取值:

  • NoSpot:非抢占式实例。

  • SpotWithPriceLimit:设置抢占实例价格上限。

  • SpotAsPriceGo:系统自动出价,跟随当前市场实际价格。

更多信息,请参见使用抢占式实例

SpotPriceLimit

List

设置实例的每小时最高价格。

最大支持3位小数,SpotStrategy取值为SpotWithPriceLimit时生效。

更多信息,请参见SpotPriceLimit语法SpotPriceLimit属性

SpotInstancePools

Integer

指定可用实例规格的个数,伸缩组将按成本最低的多个规格均衡创建抢占式实例。

取值范围:1~10。

ScalingPolicy

String

伸缩组模式。

取值:

  • release(默认值):标准模式,根据申请资源值的使用量,通过创建、释放ECS的方式进行伸缩。

  • recycle:极速模式,通过创建、停机、启动的方式进行伸缩,提高再次伸缩的速度(停机时计算资源不收费,只收取存储费用,本地盘机型除外)。

SystemDiskCategory

String

节点系统盘类型。

取值:

  • cloud_efficiency(默认值):高效云盘。

  • cloud_ssd:SSD云盘。

  • cloud_essd:ESSD云盘。

InternetChargeType

String

公网计费类型。

取值:

  • PayByBandwidth(默认值):按固定带宽计费。

  • PayByTraffic:按使用流量计费。

InternetMaxBandwidthOut

Integer

公网出带宽最大值。

单位:Mbit/s。

取值范围:1 Mbit/s~100 Mbit/s。

RdsInstances

List

RDS实例ID。

Tags

List

仅为ECS实例添加标签。

标签键不可以重复,最大长度为128个字符;标签键和标签值都不能以aliyunacs:开头,或包含https://http://

更多信息,请参见Tags语法Tags属性

ZoneIds

List

可用区ID列表。

DataDisks语法

"DataDisks": [
  {
    "Category": String,
    "Encrypted": Boolean,
    "PerformanceLevel": String,
    "Size": Integer,
    "AutoSnapshotPolicyId": String
  }
]

DataDisks属性

属性名称

类型

必须

允许更新

描述

约束

AutoSnapshotPolicyId

String

选择自动快照策略ID,云盘会按照快照策略自动备份。

默认值为空,表示不自动备份。

Category

String

数据盘类型。

取值:

  • cloud_efficiency(默认值):高效云盘。

  • cloud_ssd:SSD云盘。

  • cloud_essd:ESSD云盘。

Encrypted

Boolean

是否对数据盘加密。

取值:

  • true:对数据盘加密。

  • false(默认值):不对数据盘加密。

PerformanceLevel

String

设置云盘的性能等级。

取值:

  • PL1:单盘最高随机读写IOPS 5万。

  • PL2:单盘最高随机读写IOPS 10万。

  • PL3:单盘最高随机读写IOPS 100万。

更多信息,请参见ESSD云盘

Size

Integer

数据盘大小。

取值范围:40~32768。

默认值:120。

单位:GiB。

SpotPriceLimit语法

"SpotPriceLimit": [
  {
    "PriceLimit": Number,
    "InstanceType": String
  }
]

SpotPriceLimit属性

属性名称

类型

必须

允许更新

描述

约束

PriceLimit

Number

可抢占实例的价格限制。

InstanceType

String

可抢占实例的实例类型。

Tags语法

"Tags": [
  {
    "Value": String,
    "Key": String
  }
]

Tags属性

属性名称

类型

必须

允许更新

描述

约束

Value

String

标签值。

Key

String

标签键。

返回值

Fn::GetAtt

NodePoolId:集群节点池ID。

示例

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  TeeConfig:
    Type: Json
    Description: The configurations of confidential computing.
    Default: |-
      {
        "TeeEnable": true
      }
  ClusterId:
    Type: String
    Description: Cluster ID.
    Default: c64ca201b0a4b49agfd****
  NodePoolInfo:
    Type: Json
    Description: The configurations of the node pool.
    Default: |-
      {
        "Name": "test"
      }
  KubernetesConfig:
    Type: Json
    Description: The configurations of the ACK cluster.
    Default: |-
      {
        "CpuPolicy": "static",
        "Runtime": "containerd",
        "CmsEnabled": true,
        "UserData": "echo 'hello'",
        "NodeNameMode": "customized,aliyun.com,5,test",
        "RuntimeVersion": "1.4.8",
        "Unschedulable": false
      }
  Count:
    Type: Number
    Description: The number of nodes in the node pool.
    Default: 1
  Management:
    Type: Json
    Description: The configurations of the managed node pool.
    Default: |-
      {
        "UpgradeConfig": {
          "AutoUpgrade": true,
          "Surge": 1,
          "MaxUnavailable": 1
        },
        "AutoRepair": true,
        "Enable": true
      }
  ScalingGroup:
    Type: Json
    Description: The configurations of the scaling group used by the node pool.
    Default: |-
      {
        "SpotInstanceRemedy": true,
        "Platform": "AliyunLinux",
        "SystemDiskSize": 120,
        "InstanceChargeType": "PostPaid",
        "SystemDiskPerformanceLevel": "PL1",
        "ImageId": "aliyun_2_1903_x64_20G_alibase_20210726.vhd",
        "InstanceTypes": [
          "ecs.ebmhfc6.20xlarge"
        ],
        "LoginPassword": "test****",
        "MultiAzPolicy": "BALANCE",
        "VSwitchIds": [
          "vsw-*****"
        ],
        "SystemDiskCategory": "cloud_essd",
        "InternetMaxBandwidthOut": 0
      }
Resources:
  ClusterNodePool:
    Type: ALIYUN::CS::ClusterNodePool
    Properties:
      TeeConfig:
        Ref: TeeConfig
      ClusterId:
        Ref: ClusterId
      NodePoolInfo:
        Ref: NodePoolInfo
      KubernetesConfig:
        Ref: KubernetesConfig
      Count:
        Ref: Count
      Management:
        Ref: Management
      ScalingGroup:
        Ref: ScalingGroup
Outputs:
  NodePoolId:
    Description: Cluster node pool ID.
    Value:
      Fn::GetAtt:
        - ClusterNodePool
        - NodePoolId
                    
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "TeeConfig": {
      "Type": "Json",
      "Description": "The configurations of confidential computing.",
      "Default": "{\n  \"TeeEnable\": true\n}"
    },
    "ClusterId": {
      "Type": "String",
      "Description": "Cluster ID.",
      "Default": "c64ca201b0a4b49agfd****"
    },
    "NodePoolInfo": {
      "Type": "Json",
      "Description": "The configurations of the node pool.",
      "Default": "{\n  \"Name\": \"test\"\n}"
    },
    "KubernetesConfig": {
      "Type": "Json",
      "Description": "The configurations of the ACK cluster.",
      "Default": "{\n  \"CpuPolicy\": \"static\",\n  \"Runtime\": \"containerd\",\n  \"CmsEnabled\": true,\n  \"UserData\": \"echo 'hello'\",\n  \"NodeNameMode\": \"customized,aliyun.com,5,test\",\n  \"RuntimeVersion\": \"1.4.8\",\n  \"Unschedulable\": false\n}"
    },
    "Count": {
      "Type": "Number",
      "Description": "The number of nodes in the node pool.",
      "Default": 1
    },
    "Management": {
      "Type": "Json",
      "Description": "The configurations of the managed node pool.",
      "Default": "{\n  \"UpgradeConfig\": {\n    \"AutoUpgrade\": true,\n    \"Surge\": 1,\n    \"MaxUnavailable\": 1\n  },\n  \"AutoRepair\": true,\n  \"Enable\": true\n}"
    },
    "ScalingGroup": {
      "Type": "Json",
      "Description": "The configurations of the scaling group used by the node pool.",
      "Default": "{\n  \"SpotInstanceRemedy\": true,\n  \"Platform\": \"AliyunLinux\",\n  \"SystemDiskSize\": 120,\n  \"InstanceChargeType\": \"PostPaid\",\n  \"SystemDiskPerformanceLevel\": \"PL1\",\n  \"ImageId\": \"aliyun_2_1903_x64_20G_alibase_20210726.vhd\",\n  \"InstanceTypes\": [\n    \"ecs.ebmhfc6.20xlarge\"\n  ],\n  \"LoginPassword\": \"test****\",\n  \"MultiAzPolicy\": \"BALANCE\",\n  \"VSwitchIds\": [\n    \"vsw-*****\"\n  ],\n  \"SystemDiskCategory\": \"cloud_essd\",\n  \"InternetMaxBandwidthOut\": 0\n}"
    }
  },
  "Resources": {
    "ClusterNodePool": {
      "Type": "ALIYUN::CS::ClusterNodePool",
      "Properties": {
        "TeeConfig": {
          "Ref": "TeeConfig"
        },
        "ClusterId": {
          "Ref": "ClusterId"
        },
        "NodePoolInfo": {
          "Ref": "NodePoolInfo"
        },
        "KubernetesConfig": {
          "Ref": "KubernetesConfig"
        },
        "Count": {
          "Ref": "Count"
        },
        "Management": {
          "Ref": "Management"
        },
        "ScalingGroup": {
          "Ref": "ScalingGroup"
        }
      }
    }
  },
  "Outputs": {
    "NodePoolId": {
      "Description": "Cluster node pool ID.",
      "Value": {
        "Fn::GetAtt": [
          "ClusterNodePool",
          "NodePoolId"
        ]
      }
    }
  }
}