ALIYUN::CS::ManagedEdgeKubernetesCluster

ALIYUN::CS::ManagedEdgeKubernetesCluster类型用于创建Kubernetes边缘托管版集群实例。

语法

{ 
  "Type": "ALIYUN::CS::ManagedEdgeKubernetesCluster",
  "Properties": {
    "Profile": String,
    "VpcId": String,
    "ServiceCidr": String,
    "Name": String,
    "Tags": List,
    "ProxyMode": String,
    "SnatEntry": Boolean,
    "LoginPassword": String,
    "KeyPair": String,
    "Addons": List,
    "EndpointPublicAccess": Boolean,
    "TimeoutMins": Number,
    "ClusterSpec": String,
    "ContainerCidr": String,
    "CloudMonitorFlags": Boolean,
    "IsEnterpriseSecurityGroup": Boolean,
    "NodeCidrMask": String,
    "DeletionProtection": Boolean,
    "ResourceGroupId": String,
    "MaintenanceWindow": Map,
    "ZoneIds": List,
    "VSwitchIds": List,
    "NodePools": List,
    "EncryptionProviderKey": String,
    "KubernetesVersion": String,
    "IpStack": String
  }
}

属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

集群名称。

以英文字母或数字开头,可包含英文字母、汉字、数字和短划线(-)。

Addons

List

集群安装的组件列表。

取值:

  • 网络组件

    支持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组件(可选)

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

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

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

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

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

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

更多信息,请参见Addons属性

CloudMonitorFlags

Boolean

是否安装云监控插件。

取值:

  • true:安装。

  • false(默认值):不安装。

ClusterSpec

String

托管版集群类型。

取值:

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

  • ack.standard(默认值):标准托管集群,即ACK@Edge标准版集群。

ContainerCidr

String

Pod网络地址段。

当创建Flannel网络类型的集群时,ContainerCidr为必填。ContainerCidr必须是有效的私有网段,即以下网段及其子网:

  • 10.0.0.0/8

  • 172.16-31.0.0/12-16

  • 192.168.0.0/16

不能与专有网络及专有网络内已有Kubernetes集群使用的网段重复,且创建成功后不能修改。

关于集群网络规划,请参见ACK托管集群网络规划

DeletionProtection

Boolean

是否启用删除保护功能。

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

  • true:启用。

  • false(默认值):禁用。

EndpointPublicAccess

Boolean

是否开启公网API Server。

取值:

  • true(默认值):开启公网API Server。

  • false:仅开启私网API Server。

IsEnterpriseSecurityGroup

Boolean

是否创建高级安全组。

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

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

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

KeyPair

String

密钥对名称。

LoginPasswordKeyPair二者只能指定一个参数。

LoginPassword

String

登录密码。

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

LoginPasswordKeyPair二者只能指定一个参数。

NodeCidrMask

String

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

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

默认值:25。

Profile

String

边缘集群标识。

默认值:Edge。

ProxyMode

String

kube-proxy代理模式。

取值:

  • iptables(默认值)

  • ipvs

ResourceGroupId

String

集群所属的资源组ID。

ServiceCidr

String

服务网段。

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

SnatEntry

Boolean

是否为网络配置SNAT。

取值:

  • true:配置。

  • false(默认值):不配置。

说明

如果使用自动创建的专有网络,则必须设置为true。如果使用已有非系统自动创建的专有网络,则需要根据是否具备出网能力来设置。

MaintenanceWindow

Map

集群维护窗口配置。

更多信息,请参见MaintenanceWindow属性

Tags

List

标签。

最多可以设置20个标签。

更多信息,请参见Tags属性

TimeoutMins

Number

集群资源栈创建超时时间。

默认值:60。

单位:分钟。

VSwitchIds

List

Worker node绑定的交换机。

VpcId

String

专有网络ID。

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

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

ZoneIds

List

可用区列表。

NodePools

List

节点池信息。

更多信息,请参见NodePools属性

EncryptionProviderKey

String

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

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

IpStack

String

集群的IP协议栈。

取值:

  • ipv4

  • ipv6

KubernetesVersion

String

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

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

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。

NodePools语法

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

NodePools属性

属性名称

类型

必须

允许更新

描述

约束

ScalingGroup

Map

节点池扩容组配置。

更多信息,请参见ScalingGroup属性

KubernetesConfig

Map

集群相关配置。

更多信息,请参见KubernetesConfig属性

NodePoolInfo

Map

节点池配置。

更多信息,请参见NodePoolInfo属性

NodePoolInfo语法

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

NodePoolInfo属性

属性名称

类型

必须

允许更新

描述

约束

ResourceGroupId

String

节点池所属资源组。

Name

String

节点池名称。

Type

String

节点池类型

取值:

  • ess: ess节点池。

  • edge:edge节点池。

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不受影响。

ScalingGroup语法

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

可用区列表。

Tags语法

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

Tags属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

标签键。

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

Value

String

标签值。

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

Addons语法

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

Addons属性

属性名称

类型

必须

允许更新

描述

约束

Name

String

组件名称。

Config

String

组件配置。

Disabled

Boolean

是否禁止默认安装组件。

取值:

  • true:禁止默认安装组件。

  • false(默认值):允许默认安装组件。

Version

String

Addon插件版本。

默认取最新版本。

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。

DataDisks语法

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

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。

Categories

List

数据磁盘类型的列表。

返回值

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 ManagedEdgeKubernetesCluster
Parameters:
  VSwitchZoneId:
    Type: String
    AssociationProperty: ALIYUN::ECS::Instance::ZoneId
    Description: Availability ID for existing switches
    Label: VSwitch Zone ID
  VpcId:
    Type: String
    Default: Null
    AssociationProperty: ALIYUN::ECS::VPC::VPCId
    Description: Please search the ID starts with (vpc-xxx)from console-Virtual Private Cloud
    Label: Existing VPC ID
  VSwitchId:
    Type: String
    Default: Null
    AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
    Description: Please search the business VSwitch ID starts with(vsw-xxx)from console-Virtual Private Cloud-VSwitches
    Label: VSwitch ID
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
      VpcId: ${VpcId}
  ClusterName:
    Type: String
    Default: mytest
  Password:
    Type: String
    Description: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^*_-+=|{}[]:;,.? Special symbol in).
    MinLength: 8
    Label: Instance Password
    NoEcho: true
    MaxLength: 30
    ConstraintDescription: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^*_-+=|{}[]:;',.?/ Special symbol in).
  NumOfNodes:
    Type: Number
    Default: 1
    MinValue: 0
    MaxValue: 300
Resources:
  Cluster:
    Type: ALIYUN::CS::ManagedEdgeKubernetesCluster
    Properties:
      NumOfNodes:
        Ref: NumOfNodes
      Name:
        Ref: ClusterName
      LoginPassword:
        Ref: Password
      VpcId:
        Ref: VpcId
      VSwitchIds:
        - Ref: VSwitchId
      ServiceCidr: 172.19.0.0/20
Outputs:
  ClusterId:
    Value:
      Fn::GetAtt:
        - Cluster
        - ClusterId
  TaskId:
    Value:
      Fn::GetAtt:
        - Cluster
        - TaskId
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "Test ManagedEdgeKubernetesCluster",
  "Parameters": {
    "VSwitchZoneId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
      "Description": "Availability ID for existing switches",
      "Label": "VSwitch Zone ID"
    },
    "VpcId": {
      "Type": "String",
      "Default": null,
      "AssociationProperty": "ALIYUN::ECS::VPC::VPCId",
      "Description": "Please search the ID starts with (vpc-xxx)from console-Virtual Private Cloud",
      "Label": "Existing VPC ID"
    },
    "VSwitchId": {
      "Type": "String",
      "Default": null,
      "AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
      "Description": "Please search the business VSwitch ID starts with(vsw-xxx)from console-Virtual Private Cloud-VSwitches",
      "Label": "VSwitch ID",
      "AssociationPropertyMetadata": {
        "ZoneId": "${VSwitchZoneId}",
        "VpcId": "${VpcId}"
      }
    },
    "ClusterName": {
      "Type": "String",
      "Default": "mytest"
    },
    "Password": {
      "Type": "String",
      "Description": "Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^*_-+=|{}[]:;,.? Special symbol in).",
      "MinLength": 8,
      "Label": "Instance Password",
      "NoEcho": true,
      "MaxLength": 30,
      "ConstraintDescription": "Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^*_-+=|{}[]:;',.?/ Special symbol in)."
    },
    "NumOfNodes": {
      "Type": "Number",
      "Default": 1,
      "MinValue": 0,
      "MaxValue": 300
    }
  },
  "Resources": {
    "Cluster": {
      "Type": "ALIYUN::CS::ManagedEdgeKubernetesCluster",
      "Properties": {
        "NumOfNodes": {
          "Ref": "NumOfNodes"
        },
        "Name": {
          "Ref": "ClusterName"
        },
        "LoginPassword": {
          "Ref": "Password"
        },
        "VpcId": {
          "Ref": "VpcId"
        },
        "VSwitchIds": [
          {
            "Ref": "VSwitchId"
          }
        ]
        "ServiceCidr": "172.19.0.0/20"
      }
    }
  },
  "Outputs": {
    "ClusterId": {
      "Value": {
        "Fn::GetAtt": [
          "Cluster",
          "ClusterId"
        ]
      }
    },
    "TaskId": {
      "Value": {
        "Fn::GetAtt": [
          "Cluster",
          "TaskId"
        ]
      }
    }
  }
}