ALIYUN::CS::ManagedKubernetesCluster

ALIYUN::CS::ManagedKubernetesCluster类型用于创建Kubernetes托管版集群。

语法

{
  "Type": "ALIYUN::CS::ManagedKubernetesCluster",
  "Properties": {
    "CloudMonitorFlags": Boolean,
    "ProxyMode": String,
    "SnatEntry": Boolean,
    "VpcId": String,
    "Tags": List,
    "LoginPassword": String,
    "ContainerCidr": String,
    "Name": String,
    "Taint": List,
    "KeyPair": String,
    "Addons": List,
    "ServiceCidr": String,
    "KubernetesVersion": String,
    "SecurityGroupId": String,
    "EndpointPublicAccess": Boolean,
    "ClusterSpec": String,
    "TimeoutMins": Number,
    "PodVswitchIds": List,
    "EncryptionProviderKey": String,
    "Runtime": Map,
    "SocEnabled": Boolean,
    "UserData": String,
    "OsType": String,
    "IsEnterpriseSecurityGroup": Boolean,
    "Platform": String,
    "AutoRenewPeriod": Number,
    "LoadBalancerSpec": String,
    "AutoRenew": Boolean,
    "ChargeType": String,
    "FormatDisk": Boolean,
    "Period": Number,
    "NodeCidrMask": String,
    "PeriodUnit": String,
    "KeepInstanceName": Boolean,
    "DeletionProtection": Boolean,
    "ZoneIds": List,
    "ResourceGroupId": String,
    "NodePools": List,
    "NodeNameMode": String,
    "SecurityHardeningOs": Boolean,
    "DeleteOptions": List
  }
}

属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

集群名称。

长度为1~63个字符。可包含英文字母、汉字、数字和短划线(-)。

VpcId

String

专有网络ID。

如果不设置,系统会自动创建专有网络,系统创建的专有网络网段为192.168.0.0/16。

VpcIdVSwitchIds只能同时为空或者同时都设置对应的值。

Addons

List

Kubernetes集群的Addon插件的组合。

取值:

  • 网络组件

    支持Flannel和Terway两种网络类型,创建集群时需二选一:

    • Flannel网络:[{"Name":"flannel","Config":""}]

    • Terway网络:[{"Name": "terway-eniip","Config": ""}]

  • 存储组件

    支持csi和flexvolume两种类型:

    • csi:[{"Name":"csi-plugin","Config": ""},{"Name": "csi-provisioner","Config": ""}]

    • flexvolume:[{"Name": "flexvolume","Config": ""}]

  • 日志组件(可选)

    说明

    如果不开启日志服务,将无法使用集群审计功能。

    • 使用已有SLS Project:[{"Name": "logtail-ds","Config": "{\"IngressDashboardEnabled\":\"true\",\"sls_project_name\":\"your_sls_project_name\"}"}]

    • 创建新的SLS Project:[{"Name": "logtail-ds","Config": "{\"IngressDashboardEnabled\":\"true\"}"}]

  • Ingress组件(可选)

    ACK专有版集群默认安装Ingress组件nginx-ingress-controller。

    • 安装Ingress并且开启公网:[{"Name":"nginx-ingress-controller","Config":"{\"IngressSlbNetworkType\":\"internet\"}"}]

    • 不安装Ingress:[{"Name": "nginx-ingress-controller","Config": "","Disabled": true}]

  • 事件中心(可选,默认开启)

    事件中心提供对Kubernetes事件的存储、查询、告警等能力。Kubernetes事件中心关联的Logstore在90天内免费。更多信息,请参见创建并使用K8s事件中心

    开启事件中心:[{"Name":"ack-node-problem-detector","Config":"{\"sls_project_name\":\"your_sls_project_name\"}"}]

更多信息,请参见Addons属性

AutoRenew

Boolean

是否自动续费。

当ChargeType取值为PrePaid时该参数有效。取值:

  • true(默认值):自动续期。

  • false:不自动续期。

SecurityHardeningOs

Boolean

阿里云操作系统安全加固。

取值:

  • true:启用安全加固操作系统。

  • false:关闭安全加固操作系统。

默认值:false。

AutoRenewPeriod

Number

自动续借周期。

当ChargeType取值为PrePaid,且AutoRenew取值为true时,该参数有效。取值:

  • 当PeriodUnit取值为Week时:1、2、3。

  • 当PeriodUnit取值为Month时:1、2、3、6、12。

默认值:1。

ChargeType

String

付费类型。

取值:

  • PrePaid:预付费。

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

CloudMonitorFlags

Boolean

是否安装云监控插件。

取值:

  • true:安装云监控插件。

  • false(默认值):不安装云监控插件。

ClusterSpec

String

托管版集群类型。

取值:

  • ack.pro.small:专业托管集群,即ACK Pro版集群。

  • ack.standard(默认值):标准托管集群。

ContainerCidr

String

容器网段。

不能和专有网络网段冲突。当选择系统自动创建专有网络时,默认使用172.16.0.0/16网段。

DeletionProtection

Boolean

是否启用删除保护功能。

启用删除保护后,集群不能被直接删除。取值:

  • true:启用。

  • false(默认值):禁用。

EncryptionProviderKey

String

由密钥管理服务KMS管理的密钥ID。

该密钥用于加密数据磁盘。您只能在专业托管的Kubernetes集群中使用KMS。

EndpointPublicAccess

Boolean

是否开启公网APIServer。

取值:

  • true:开启。

  • false(默认值):关闭。此时仅创建私网的APIServer。

FormatDisk

Boolean

是否将数据磁盘挂载到已创建的节点上,在已有的ECS实例中创建。

取值:

  • true:容器和镜像的数据存放在数据磁盘上。磁盘上的原始数据将被覆盖。挂载磁盘前请先备份数据。

  • false(默认值):不将容器和镜像的数据存储在数据磁盘上。

IsEnterpriseSecurityGroup

Boolean

是否创建高级安全组。

当SecurityGroupId为空时,该参数生效。 取值:

  • true:创建。安装了Terway的集群,必须创建高级安全组。

  • false(默认值):不创建。

KeepInstanceName

Boolean

指定是否保留集群中使用的现有ECS实例的名称。

取值:

  • true(默认值):保留。

  • false:不保留。新名称由系统分配。

KeyPair

String

密钥对名称。

KeyPair和LoginPassword只能指定其中一个参数。

KubernetesVersion

String

集群版本,与Kubernetes社区基线版本保持一致。建议选择最新版本。

目前您可以创建两种最新版本的集群。关于ACK支持的Kubernetes版本,请参见Kubernetes版本发布概览

LoadBalancerSpec

String

负载均衡实例规格。

取值:

  • slb.s1.small

  • slb.s2.small

  • slb.s2.medium

  • slb.s3.small

  • slb.s3.medium

  • slb.s3.large

LoginPassword

String

SSH登录密码。

长度为8~30个字符,必须同时包含英文字母、数字和特殊字符三项,特殊字符支持( )'~!@#$%^&*-+=|{ }[ ]:;< >,.?/_

说明

LoginPassword和KeyPair只能指定其中一个参数。

NodeCidrMask

String

可分配给节点的最大IP地址数量。

数量由指定的pod CIDR决定。该参数仅在集群使用Flannel插件时生效。

默认值:25。

NodeNameMode

String

自定义节点名。

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

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

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

例如,节点IP地址为:192.168.XX.XX,指定前缀为aliyun.com,IP地址段长度为5,后缀为test,则节点名称为aliyun.com0****test

NodePools

List

节点池信息。

更多信息,请参见NodePools属性

OsType

String

操作系统类型。

取值:

  • Windows

  • Linux(默认值)

Period

Number

购买资源的时长。

当ChargeType为PrePaid时,该参数生效且为必选参数。取值:

  • 当PeriodUnit为Week时:1~4。

  • 当PeriodUnit为Month时:1~9、12、24、36、48、60。

默认值:1。

PeriodUnit

String

购买资源的时长周期。

当ChargeType为PrePaid时该参数有效。取值:

  • Week:周。

  • Month(默认值):月。

Platform

String

操作系统发布版本。

取值:

  • CentOS(默认值)

  • AliyunLinux

  • QbootAliyunLinux

  • Qboot

  • Windows

  • WindowsCore

PodVswitchIds

List

Pod交换机列表。

您需要为每一个节点交换机指定至少一个相同可用区的Pod交换机,该Pod交换机不能跟节点交换机重复。

建议您选择网段掩码不大于19的交换机。

说明

当集群列表(Addons)取值为网络组件,且采用Terway网络类型时,必须为集群指定PodVswitchIds。

ProxyMode

String

kube-proxy代理模式。

取值:

  • iptables(默认值)

  • ipvs

ResourceGroupId

String

集群所属资源组ID。

Runtime

Map

容器运行时。

Runtime包括以下2个信息:

  • name:容器运行时名称。

  • version:容器运行时版本。

示例:

{"name": "docker", "version": "19.03.5"}

关于容器运行时的选择,请参见如何选择Docker运行时、containerd运行时、或者安全沙箱运行时?

更多信息,请参见DeleteOptions属性

SecurityGroupId

String

集群ECS实例所属安全组ID。

ServiceCidr

String

服务网段。

不能和专有网络网段以及容器网段冲突。当选择系统自动创建专有网络时,默认使用172.19.0.0/20网段。

SnatEntry

Boolean

是否为网络配置SNAT。

取值:

  • 当已有专有网络能访问公网环境时:false。此时无需为网络配置SNAT。

  • 当已有专有网络不能访问公网环境时:

    • true:配置SNAT,此时可以访问公网环境。

    • false:不配置SNAT,此时不能访问公网环境。

SocEnabled

Boolean

是否启用基于分级保护的加固。

取值:

  • true:启用。

  • false(默认值):禁用。

Tags

List

集群标签。

最多可以设置20组标签。

更多信息,请参见Tags属性

Taint

List

给节点做污点标记,通常用于Pods的调度策略。

若Pods上有相对应的容忍(tolerance)标记,则可以将容忍节点上的污点调度到该节点。

TimeoutMins

Number

集群创建超时时间。

默认值:60。

单位:分钟。

UserData

String

创建ECS实例时传递的用户数据。

内容需要限制在16 KB以内。无需使用Base64转码,特殊字符需要使用转义符。

ZoneIds

List

Worker节点所属交换机可用区。

DeleteOptions

List

集群关联资源的删除选项。

更多信息,请参见DeleteOptions属性

NodePools语法

"NodePools": [
  {
    "ScalingGroup": Map,
    "KubernetesConfig": Map,
    "NodePoolInfo": Map
  }
]

NodePools属性

属性名称

类型

必须

允许更新

描述

约束

ScalingGroup

Map

节点池扩容组配置。

更多信息,请参见ScalingGroup属性

KubernetesConfig

Map

集群相关配置。

更多信息,请参见KubernetesConfig属性

NodePoolInfo

Map

节点池配置。

更多信息,请参见NodePoolInfo属性

ScalingGroup语法

"ScalingGroup": {
  "RdsInstances": List,
  "IsEnterpriseSecurityGroup": Boolean,
  "VSwitchIds": List,
  "InternetMaxBandwidthOut": Integer,
  "DataDisks": List,
  "Period": Integer,
  "InternetChargeType": String,
  "KeyPair": String,
  "SystemDiskPerformanceLevel": String,
  "ImageId": String,
  "InstanceTypes": List,
  "SystemDiskCategory": String,
  "PeriodUnit": String,
  "LoginPassword": String,
  "InstanceChargeType": String,
  "SystemDiskSize": Integer,
  "Tags": List,
  "ZoneIds": List,
  "DesiredSize": Integer
}

ScalingGroup属性

属性名称

类型

必须

允许更新

描述

约束

InstanceTypes

List

实例规格。

SystemDiskSize

Integer

节点系统盘大小。

单位:GiB。

取值范围:40~500。

VSwitchIds

List

虚拟交换机ID列表。

DesiredSize

Integer

节点池期望节点数。

DataDisks

List

节点池节点数据盘配置。

更多信息,请参见DataDisks属性

ImageId

String

自定义镜像ID。

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

InstanceChargeType

String

节点池节点付费类型。

取值:

  • PrePaid:预付费。

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

InternetChargeType

String

公网IP收费类型。

取值:

  • PayByBandwidth:按固定带宽计费。

  • PayByTraffic:按使用流量计费。

InternetMaxBandwidthOut

Integer

节点公网IP出带宽最大值。

单位:Mbps。

取值范围:1~100。

IsEnterpriseSecurityGroup

Boolean

自动创建企业级安全组。

取值:

  • true:创建并使用企业级安全组。

  • false:不使用企业级安全组。

KeyPair

String

免密登录密钥对名称。

KeyPair和LoginPassword属性二选一。

LoginPassword

String

SSH登录密码。

KeyPair和LoginPassword只能选择其中之一。

密码规则为8~30个字符,且至少同时包含大小写字母、数字和特殊符号。

Period

Integer

节点池节点包年包月时长。

当InstanceChargeType取值为PrePaid时,本属性才生效且为必选值。

当period_unit取值为Month时,period取值范围:{ 1, 2, 3,6,12}。

默认值:1。

PeriodUnit

String

节点池节点付费周期。

当InstanceChargeType指定为PrePaid时需要指定周期。

Month:以月为计时单位。

RdsInstances

List

RDS实例ID。

SystemDiskCategory

String

节点系统盘类型。

取值:

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

  • cloud_ssd:SSD云盘。

  • cloud_essd:ESSD云盘。

SystemDiskPerformanceLevel

String

节点系统盘磁盘性能。

只对ESSD磁盘生效。

Tags

List

仅为ECS实例添加标签。

更多信息,请参见Tags属性

ZoneIds

List

可用区列表。

DataDisks语法

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

DataDisks属性

属性名称

类型

必须

允许更新

描述

约束

AutoSnapshotPolicyId

String

选择自动快照策略ID。

云盘会按照快照策略自动备份。

Category

String

数据盘类型。

取值:

  • cloud:普通云盘。

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

  • cloud_ssd:SSD云盘。

  • cloud_essd:ESSD云盘。

Encrypted

Boolean

是否对数据盘加密。

取值:

  • true:对数据盘加密。

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

PerformanceLevel

String

节点数据盘磁盘性能等级。

仅对ESSD磁盘生效,磁盘性能等级和磁盘大小有关。

更多信息,请参见ESSD云盘

Size

Integer

数据盘大小。

单位为GiB。

取值范围:40~32768。

默认值:120。

KubernetesConfig语法

"KubernetesConfig": {
  "Runtime": String,
  "RuntimeVersion": String,
  "CpuPolicy": String,
  "Labels": List,
  "NodeNameMode": String,
  "Taints": List
}

KubernetesConfig属性

属性名称

类型

必须

允许更新

描述

约束

Runtime

String

容器运行时。

RuntimeVersion

String

容器运行时版本。

CpuPolicy

String

节点CPU管理策略。

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

  • static:允许为节点上具有某些资源特征Pod增强其CPU亲和性和独占性。

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

Labels

List

节点标签。

为Kubernetes集群节点添加标签。

更多信息,请参见Labels属性。

NodeNameMode

String

自定义节点名。

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

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

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

例如,节点IP地址为:192.168.XX.XX,指定前缀为aliyun.com,IP地址段长度为5,后缀为test,则节点名称为aliyun.com0****test

Taints

List

污点配置。

更多信息,请参见Taints属性

Labels语法

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

Labels属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

标签键。

Value

String

标签值。

Taints语法

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

Taints属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

污点名称。

Value

String

污点值。

Effect

String

调度策略。

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

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

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

NodePoolInfo语法

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

NodePoolInfo属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

节点池名称。

Type

String

节点池类型

取值:

  • ess: ess节点池。

  • edge:edge节点池。

ResourceGroupId

String

节点池所属资源组。

Tags语法

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

Tags属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

标签键。

长度为1~64个字符,不能以aliyunacs:https://http://开头。

Value

String

标签值。

长度为0~128个字符,不能以aliyunacs:https://http://开头。

WorkerDataDisks语法

"WorkerDataDisks": [
  {
    "Category": String,
    "Size": Number,
    "PerformanceLevel": String
  }
]

WorkerDataDisks属性

属性名称

类型

必须

允许更新

描述

约束

Category

String

Worker节点数据盘类型。

取值:

  • cloud:普通云盘。

  • cloud_ssd:SSD云盘。

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

  • cloud_essd:ESSD云盘。

PerformanceLevel

String

ESSD云盘性能等级。

取值:

  • PL0:单盘最高随机读写IOPS 1万。

  • PL1(默认值):单盘最高随机读写IOPS 5万。

Size

Number

数据盘大小。

取值范围:40~32,768。

单位:GiB。

Addons语法

"Addons": [
  {
    "Version": String,
    "Config": String,
    "Name": String,
    "Disabled": Boolean
  }
]

Addons属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

Addon插件名称。

Config

String

Addon插件配置。

Disabled

Boolean

是否禁用默认安装。

取值:

  • true(默认值):禁用默认安装。

  • false:启用默认安装。

Version

String

Addon插件版本。

默认取最新版本。

DeleteOptions语法

"DeleteOptions": [
    {
      "DeleteMode": String,
      "ResourceType": String
    }
  ]

DeleteOptions属性

属性名称

类型

必须

允许更新

描述

约束

DeleteMode

String

该类型资源的删除策略。

可取值:

  • delete:删除该类资源

  • retain:保留该类资源

ResourceType

String

资源类型。

可取值:

  • SLB:通过 service 创建的 SLB 资源,默认删除,可选择保留

  • ALB:ALB Ingress Controller 创建的 ALB 资源,默认保留,可选择删除

  • SLS_Data:集群日志功能所使用的日志服务 Project,默认保留,可选择删除

  • SLS_ControlPlane:托管版集群控制平面日志所使用的日志服务 Project,默认保留,可选择删除

  • PrivateZone:ACK Serverless 集群创建的 PrivateZone 资源,默认保留,可选择删除

Runtime语法

"Runtime": {
    "Name": String,
    "Version": String
  }

Runtime属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

容器运行时名称。

ACK 支持以下三种容器运行时。

  • containerd:推荐使用,支持所有集群版本。

  • Sandboxed-Container.runv:安全沙箱容器,提供更高的隔离性,支持 1.24 版本及以下集群。

  • docker:支持 1.22 版本及以下集群。

默认值:containerd

Version

String

容器运行时版本。

默认为最新版。

关于安全沙箱运行时的变更详情,请参见安全沙箱运行时发布记录

返回值

Fn::GetAtt

  • ClusterId:集群ID。

  • TaskId:任务ID。系统自动分配,用户查询任务状态。

  • WorkerRamRoleName:Worker节点RAM角色名称。

  • DefaultUserKubeConfig:用户配置集群凭据的默认Kubernetes配置。

  • ScalingRuleId:伸缩规则ID。

  • ScalingGroupId:伸缩组ID。

  • PrivateUserKubConfig:用户配置集群凭据的专有Kubernetes配置。

  • ScalingConfigurationId:伸缩配置ID。

  • Nodes:集群节点列表。

  • APIServerSLBId:API服务器负载均衡ID。

  • IngressSLBId:Ingress负载均衡ID。

示例

YAML格式

ROSTemplateFormatVersion: '2015-09-01'
Description: Test Create ManagedKubernetesCluster
Parameters: {}
Resources:
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      VpcName: mytest
      CidrBlock: 192.168.0.0/16
  VSwitch:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VSwitchName: mytest
      VpcId:
        Ref: Vpc
      ZoneId:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      CidrBlock: 192.168.1.0/24
  ManagedKubernetesCluster:
    Type: ALIYUN::CS::ManagedKubernetesCluster
    Properties:
      VSwitchIds:
        - Ref: VSwitch
      VpcId:
        Ref: Vpc
      ClusterSpec: ack.pro.small
      WorkerInstanceTypes:
        - ecs.c5.large
      WorkerSystemDiskCategory: cloud_essd
      LoginPassword: Admin@123!
      Name: mytest
Outputs:
  ClusterId:
    Value:
      Fn::GetAtt:
        - ManagedKubernetesCluster
        - ClusterId
  TaskId:
    Value:
      Fn::GetAtt:
        - ManagedKubernetesCluster
        - TaskId         

JSON格式

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "Test Create ManagedKubernetesCluster",
  "Parameters": {
  },
  "Resources": {
    "Vpc": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "VpcName": "mytest",
        "CidrBlock": "192.168.0.0/16"
      }
    },
    "VSwitch": {
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VSwitchName": "mytest",
        "VpcId": {
          "Ref": "Vpc"
        },
        "ZoneId": {
          "Fn::Select": [
            "0",
            {
              "Fn::GetAZs": {
                "Ref": "ALIYUN::Region"
              }
            }
          ]
        },
        "CidrBlock": "192.168.1.0/24"
      }
    },
    "ManagedKubernetesCluster": {
      "Type": "ALIYUN::CS::ManagedKubernetesCluster",
      "Properties": {
        "VSwitchIds": [
          {
            "Ref": "VSwitch"
          }
        ],
        "VpcId": {
          "Ref": "Vpc"
        },
        "ClusterSpec": "ack.pro.small",
        "WorkerInstanceTypes": [
          "ecs.c5.large"
        ],
        "WorkerSystemDiskCategory": "cloud_essd",
        "LoginPassword": "Admin@123!",
        "Name": "mytest"
      }
    }
  },
  "Outputs": {
    "ClusterId": {
      "Value": {
        "Fn::GetAtt": [
          "ManagedKubernetesCluster",
          "ClusterId"
        ]
      }
    },
    "TaskId": {
      "Value": {
        "Fn::GetAtt": [
          "ManagedKubernetesCluster",
          "TaskId"
        ]
      }
    }
  }
}