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,
    "LoadBalancerSpec": String,
    "FormatDisk": Boolean,
    "NodeCidrMask": String,
    "KeepInstanceName": Boolean,
    "DeletionProtection": Boolean,
    "ResourceGroupId": String,
    "NodePools": List,
    "NodeNameMode": String,
    "SecurityHardeningOs": Boolean,
    "DeleteOptions": List,
    "ControlPlaneLogComponents": List,
    "ControlPlaneLogTtl": Number,
    "ControlPlaneLogProject": String,
    "MaintenanceWindow": Map,
    "ZoneIds": List,
    "VSwitchIds": List,
    "TimeZone": String,
    "IpStack": String
  }
}

属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

集群名称。

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

VpcId

String

专有网络ID。

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

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

Addons

List

Kubernetes集群的Addon插件的组合。

取值:

  • 网络组件

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

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

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

  • 存储组件

    支持csiflexvolume两种类型:

    • 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事件中心关联的Logstore90天内免费。更多信息,请参见创建并使用K8s事件中心

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

更多信息,请参见Addons属性

SecurityHardeningOs

Boolean

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

取值:

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

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

默认值:false。

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

密钥对名称。

KeyPairLoginPassword只能指定其中一个参数。

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

说明

LoginPasswordKeyPair只能指定其中一个参数。

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(默认值)

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"}

关于容器运行时的选择,请参见containerd、安全沙箱、Docker运行时的对比

更多信息,请参见Runtime属性

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转码,特殊字符需要使用转义符。

DeleteOptions

List

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

更多信息,请参见DeleteOptions属性

ControlPlaneLogTtl

Number

控制平面组件日志保存天数。

ControlPlaneLogComponents

List

组件名称列表。

指定那些控制平面的组件日志需要被收集。

默认采集 apiserver、kcm、scheduler 组件的日志。

ControlPlaneLogProject

String

控制平面组件日志服务 Project。

可以使用已有 Project 用于日志存储,也可以使用系统自动创建 Project 用户日志存储。如果选择自动创建日志服务 Project,将会自动创建一个名称为k8s-log-{ClusterID}的日志服务 Project。

MaintenanceWindow

Map

集群维护窗口配置。

更多信息,请参见MaintenanceWindow属性

VSwitchIds

List

Worker node绑定的交换机。

ZoneIds

List

可用区列表。

TimeZone

String

集群的时区。

IpStack

String

集群的IP协议栈。

取值:

  • ipv4

  • ipv6

NodePools语法

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

NodePools属性

属性名称

类型

必须

允许更新

描述

约束

ScalingGroup

Map

节点池扩容组配置。

更多信息,请参见ScalingGroup属性

KubernetesConfig

Map

集群相关配置。

更多信息,请参见KubernetesConfig属性

NodePoolInfo

Map

节点池配置。

更多信息,请参见NodePoolInfo属性

ScalingGroup语法

"ScalingGroup": {
  "InstancePatterns": List,
  "SocEnabled": Boolean,
  "ImageType": String,
  "SecurityHardeningOs": Boolean,
  "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列表。

SocEnabled

Boolean

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

取值:

  • true:启用。

  • false(默认值):禁用。

ImageType

String

操作系统镜像类型。

InstancePatterns

List

实例属性配置。

更多信息,请参考InstancePatterns属性

SecurityHardeningOs

Boolean

阿里云 OS 安全加固。

取值:

  • true:开启阿里云 OS 安全加固。

  • false:不开启阿里云 OS 安全加固。

默认值:false

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

免密登录密钥对名称。

KeyPairLoginPassword属性二选一。

LoginPassword

String

SSH登录密码。

KeyPairLoginPassword只能选择其中之一。

密码规则为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,
    "Categories": List
  }
]

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。

Categories

List

数据磁盘类型的列表。

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属性

InstancePatterns语法

"InstancePatterns": [
  {
    "CpuArchitectures": List,
    "MaxCpuCores": Integer,
    "MinMemorySize": Integer,
    "Memory": Integer,
    "InstanceFamilyLevel": String,
    "MinCpuCores": Integer,
    "Cores": Integer,
    "InstanceTypeFamilies": List,
    "InstanceCategories": List,
    "ExcludedInstanceTypes": List,
    "MaxMemorySize": Integer
  }
]

InstancePatterns属性

属性名称

类型

必须

允许更新

描述

约束

CpuArchitectures

List

实例的 CPU 架构。

取值:

  • X86

  • ARM

MaxCpuCores

Integer

实例规格的最大 vCPU 内核数目

MinMemorySize

Integer

实例规格的最小内存。

单位:GiB。

Memory

Integer

实例规格的内存大小。

单位为 GiB。

InstanceFamilyLevel

String

实例规格族级别。

MinCpuCores

Integer

实例规格的最小 vCPU 内核数目。

Cores

Integer

实例规格的 vCPU 内核数目。

InstanceTypeFamilies

List

指定实例规格族。

InstanceCategories

List

实例分类。

ExcludedInstanceTypes

List

需要排除的实例规格。

MaxMemorySize

Integer

实例规格的最大内存。

单位:GiB。

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属性

属性名称

类型

必须

允许更新

描述

约束

ResourceGroupId

String

节点池所属资源组。

Name

String

节点池名称。

Type

String

节点池类型

取值:

  • ess: ess节点池。

  • edge:edge节点池。

MaintenanceWindow语法

"MaintenanceWindow": {
  "Enable": Boolean,
  "MaintenanceTime": String,
  "Duration": String,
  "WeeklyPeriod": String,
  "Recurrence": String
}

MaintenanceWindow属性

属性名称

类型

必须

允许更新

描述

约束

Duration

String

维护时长。

取值范围[1,24],单位为小时。

默认值:3h。

Enable

Boolean

是否开启维护窗口。

取值:

  • true:开启维护窗口。

  • false:不开启维护窗口。

默认值:false

MaintenanceTime

String

维护起始时间。

RFC3339 标准格式。

WeeklyPeriod

String

维护周期。

多个值用英文半角逗号(,)分隔。取值:{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday}

默认值:Thursday

Recurrence

String

使用 RFC5545 Recurrence Rule 语法定义的维护窗口循环规则。

目前仅支持 FREQ=WEEKLY,且不支持指定 COUNT 或 UNTIL。

Tags语法

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

Tags属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

标签键。

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

Value

String

标签值。

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

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。系统自动分配,用户查询任务状态。

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

  • ScalingRuleId:伸缩规则ID。

  • ScalingGroupId:伸缩组ID。

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

  • ScalingConfigurationId:伸缩配置ID。

  • Nodes:集群节点列表。

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

  • IngressSLBId:Ingress负载均衡ID。

  • WorkerRamRoleName:Worker RAM角色名称。

示例

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
      LoginPassword: Admin@123!
      Name: mytest
Outputs:
  ClusterId:
    Value:
      Fn::GetAtt:
        - ManagedKubernetesCluster
        - ClusterId
  TaskId:
    Value:
      Fn::GetAtt:
        - ManagedKubernetesCluster
        - TaskId         
{
  "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",
        "LoginPassword": "Admin@123!",
        "Name": "mytest"
      }
    }
  },
  "Outputs": {
    "ClusterId": {
      "Value": {
        "Fn::GetAtt": [
          "ManagedKubernetesCluster",
          "ClusterId"
        ]
      }
    },
    "TaskId": {
      "Value": {
        "Fn::GetAtt": [
          "ManagedKubernetesCluster",
          "TaskId"
        ]
      }
    }
  }
}