更新时间:2024-11-06 GMT+08:00

创建集群

功能介绍

该API用于创建一个空集群(即只有控制节点Master,没有工作节点Node)。请在调用本接口完成集群创建之后,通过创建节点添加节点。

  • 集群管理的URL格式为:https://Endpoint/uri。其中uri为资源路径,也即API访问的路径。

  • 调用该接口创建集群时,默认不安装ICAgent,若需安装ICAgent,可在请求Body参数的annotations中加入"cluster.install.addons.external/install":"[{"addonTemplateName":"icagent"}]"的集群注解,将在创建集群时自动安装ICAgent。ICAgent是应用性能管理APM的采集代理,运行在应用所在的服务器上,用于实时采集探针所获取的数据,安装ICAgent是使用应用性能管理APM的前提。

接口约束

调用CCE接口创建集群之前,请检查是否已满足如下条件:

  • 创建集群之前,您必须先确保已存在虚拟私有云,否则无法创建集群。若您已有虚拟私有云,可重复使用,无需重复创建。虚拟私有云为CCE集群提供一个隔离的、用户自主配置和管理的虚拟网络环境。若您没有虚拟私有云,请先进行创建,详情请参见创建VPC

  • 创建集群之前,请提前规划好容器网段和服务网段。容器隧道网络模式的集群在创建之后,无法修改网段参数;vpc网络模式/云原生网络模式的集群在创建后可以新增网段参数/子网参数,不可修改已有网段参数/子网参数,需要重新创建集群才能调整,请谨慎选择。

  • 请确保已正确创建委托,并确保委托未被删除,委托校验失败将导致集群创建失败。建议登录CCE控制台,如没有创建委托,会提示您创建,如已经创建则无提示。

  • 默认情况下,一个账户只能创建5个集群(每个Region下),如果您需要创建更多的集群,请申请增加配额。详情请参见如何申请扩大配额

调用方法

请参见如何调用API

URI

POST /api/v3/projects/{project_id}/clusters

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数解释:

项目ID,获取方式请参见如何获取接口URI中参数

约束限制:

不涉及

取值范围:

账号的项目ID

默认取值:

不涉及

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

参数解释:

消息体的类型(格式)

约束限制:

GET方法不做校验

取值范围:

  • application/json

  • application/json;charset=utf-8

  • application/x-pem-file

默认取值:

不涉及

X-Auth-Token

String

参数解释:

调用接口的认证方式分为Token和AK/SK两种,如果您使用的Token方式,此参数为必填,请填写Token的值,获取方式请参见获取token

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表3 请求Body参数

参数

是否必选

参数类型

描述

kind

String

参数解释:

API类型。

约束限制:

该值不可修改

取值范围:

  • Cluster

  • cluster

默认取值:

不涉及

apiVersion

String

参数解释:

API版本。

约束限制:

该值不可修改

取值范围:

  • v3

默认取值:

不涉及

metadata

ClusterMetadata object

参数解释:

集群的基本信息,为集合类的元素类型,包含一组由不同名称定义的属性。

约束限制:

不涉及

spec

ClusterSpec object

参数解释:

spec是集合类的元素类型,您对需要管理的集群对象进行详细描述的主体部分都在spec中给出。CCE通过spec的描述来创建或更新对象。

约束限制:

不涉及

表4 ClusterMetadata

参数

是否必选

参数类型

描述

name

String

参数解释:

集群名称。

约束限制:

不涉及

取值范围:

以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围4-128位,且不能以中划线(-)结尾。

默认取值:

不涉及

uid

String

参数解释:

集群ID,资源唯一标识。

约束限制:

创建成功后自动生成,填写无效。在创建包周期集群时,响应体不返回集群ID。

取值范围:

不涉及

默认取值:

不涉及

alias

String

参数解释:

集群显示名,用于在 CCE 界面显示,该名称创建后可修改。显示名和其他集群的名称、显示名不可以重复。

约束限制:

在创建集群、更新集群请求体中,集群显示名alias未指定或取值为空,表示与集群名称name一致。在创建集群等响应体中,集群显示名alias未配置时将不返回。

取值范围:

以中文或英文字符开头,由数字、中文、英文字符、中划线(-)组成,长度范围 4-128位,且不能以中划线(-)开头和结尾。

默认取值:

不涉及

annotations

Map<String,String>

参数解释:

集群注解,由key/value组成:

"annotations": {
   "key1" : "value1",
   "key2" : "value2"
}

约束限制:

该字段不会被数据库保存,当前仅用于指定集群待安装插件。

取值范围:

不涉及

默认取值:

不涉及

说明:
  • Annotations不用于标识和选择对象。Annotations中的元数据可以是small或large,structured或unstructured,并且可以包括标签不允许使用的字符。

  • 可通过加入"cluster.install.addons.external/install":"[{"addonTemplateName":"icagent"}]"的键值对在创建集群时安装ICAgent。

labels

Map<String,String>

参数解释:

集群标签,key/value对格式。

约束限制:

该字段值由系统自动生成,用于升级时前端识别集群支持的特性开关,用户指定无效。

取值范围:

不涉及

默认取值:

不涉及

creationTimestamp

String

参数解释:

集群创建时间。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

updateTimestamp

String

参数解释:

集群更新时间。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

timezone

String

参数解释:

集群时区。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表5 ClusterSpec

参数

是否必选

参数类型

描述

category

String

参数解释:

集群类别。

约束限制:

不涉及

取值范围:

  • CCE:CCE集群

    CCE集群支持虚拟机与裸金属服务器混合、GPU、NPU等异构节点的混合部署,基于高性能网络模型提供全方位、多场景、安全稳定的容器运行环境。

  • Turbo: CCE Turbo集群。

    全面基于云原生基础设施构建的云原生2.0的容器引擎服务,具备软硬协同、网络无损、安全可靠、调度智能的优势,为用户提供一站式、高性价比的全新容器服务体验。

默认取值:

容器网络参数设置非eni模式时,默认为CCE

容器网络参数设置为eni模式时,默认为Turbo

type

String

参数解释:

集群Master节点架构

约束限制:

不涉及

取值范围:

  • VirtualMachine:Master节点为x86架构服务器

  • ARM64: Master节点为鲲鹏(ARM架构)服务器

默认取值:

VirtualMachine

flavor

String

参数解释:

集群规格,当集群为v1.15及以上版本时支持创建后变更,详情请参见变更集群规格。请按实际业务需求进行选择

约束限制:

不涉及

取值范围:

  • cce.s1.small: 小规模单控制节点CCE集群(最大50节点)

  • cce.s1.medium: 中等规模单控制节点CCE集群(最大200节点)

  • cce.s2.small: 小规模三控制节点CCE集群(最大50节点)

  • cce.s2.medium: 中等规模三控制节点CCE集群(最大200节点)

  • cce.s2.large: 大规模三控制节点CCE集群(最大1000节点)

  • cce.s2.xlarge: 超大规模三控制节点CCE集群(最大2000节点)

默认取值:

不涉及

说明:

关于规格参数中的字段说明如下:

  • s1:单控制节点的集群,控制节点数为1。单控制节点故障后,集群将不可用,但已运行工作负载不受影响。

  • s2:三控制节点的集群,即高可用集群,控制节点数为3。当某个控制节点故障时,集群仍然可用。

  • dec:表示专属云的CCE集群规格。例如cce.dec.s1.small表示小规模单控制节点的专属云CCE集群(最大50节点)。

  • small:表示集群支持管理的最大节点规模为50节点。

  • medium:表示集群支持管理的最大节点规模为200节点。

  • large:表示集群支持管理的最大节点规模为1000节点。

  • xlarge:表示集群支持管理的最大节点规模为2000节点。

version

String

参数解释:

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

在CCE控制台支持创建三种最新版本的集群。可登录CCE控制台创建集群,在“版本”处获取到集群版本。

其它集群版本,当前仍可通过api创建,但后续会逐渐下线,具体下线策略请关注CCE官方公告。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

  • 若不配置,默认创建最新版本的集群。

  • 若指定集群基线版本但是不指定具体r版本,则系统默认选择对应集群版本的最新r版本。建议不指定具体r版本由系统选择最新版本。

说明:
  • Turbo集群支持1.19及以上版本商用。

platformVersion

String

参数解释:

CCE集群平台版本号,表示集群版本(version)下的内部版本。用于跟踪某一集群版本内的迭代,集群版本内唯一,跨集群版本重新计数。

约束限制:

不支持用户指定,集群创建时自动选择对应集群版本的最新平台版本。

取值范围:

platformVersion格式为:cce.X.Y

  • X: 表示内部特性版本。集群版本中特性或者补丁修复,或者OS支持等变更场景。其值从1开始单调递增。

  • Y: 表示内部特性版本的补丁版本。仅用于特性版本上线后的软件包更新,不涉及其他修改。其值从0开始单调递增。

默认取值:

不涉及

legacyVersion

String

参数解释:

CCE集群旧版本(已废弃),无实际功能,仅用于集群version与platformVersion组合展示,该版本号全局内唯一。如集群version为va.b, platformVersion为cce.X.Y,则legacyVersion值为va.b.X-rY。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

description

String

参数解释:

集群描述,对于集群使用目的的描述,可根据实际情况自定义,默认为空。集群创建成功后可通过接口更新指定的集群来做出修改,也可在CCE控制台中对应集群的“集群详情”下的“描述”处进行修改。

约束限制:

仅支持utf-8编码。

取值范围:

不涉及

默认取值:

不涉及

customSan

Array of strings

参数解释:

集群的API Server服务端证书中的自定义SAN(Subject Alternative Name)字段,遵从SSL标准X509定义的格式规范。

约束限制:

不允许出现同名重复。

取值范围:

格式符合IP和域名格式。

默认取值:

不涉及

示例:

SAN 1: DNS Name=example.com
SAN 2: DNS Name=www.example.com
SAN 3: DNS Name=example.net
SAN 4: IP Address=93.184.216.34

ipv6enable

Boolean

参数解释:

集群是否使用IPv6模式,1.15版本及以上支持。

约束限制:

开启IPv6后不支持iptables转发模式;VPC网络模式不支持IPv4/IPv6双栈网络。

取值范围:

  • true: 开启IPv4/IPv6双栈模式

  • false: 仅使用IPv4模式

默认取值:

false

hostNetwork

HostNetwork object

参数解释:

节点网络参数,包含了虚拟私有云VPC和子网的ID信息,而VPC是集群内节点之间的通信依赖,所以是必选的参数集。

约束限制:

不涉及

containerNetwork

ContainerNetwork object

参数解释:

容器网络参数,包含了容器网络类型和容器网段的信息。

约束限制:

不涉及

eniNetwork

EniNetwork object

参数解释:

云原生网络2.0网络配置,创建CCE Turbo集群时指定。

约束限制:

不涉及

serviceNetwork

ServiceNetwork object

参数解释:

服务网段参数,包含IPv4 CIDR。

约束限制:

不涉及

publicAccess

PublicAccess object

参数解释:

集群API访问控制。

约束限制:

不涉及

authentication

Authentication object

参数解释:

集群认证方式相关配置。

约束限制:

不涉及

billingMode

Integer

参数解释:

集群的计费方式。

约束限制:

不涉及

取值范围:

  • 0: 按需计费

  • 1: 包周期

默认取值:

默认0。

masters

Array of MasterSpec objects

参数解释:

控制节点的高级配置。

约束限制:

该参数未配置时将不返回。

kubernetesSvcIpRange

String

参数解释:

服务网段参数,kubernetes clusterIP取值范围,1.11.7版本及以上支持。创建集群时如若未传参,默认为"10.247.0.0/16"。该参数废弃中,推荐使用新字段serviceNetwork,包含IPv4服务网段。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

clusterTags

Array of ResourceTag objects

参数解释:

集群资源标签。

约束限制:

不涉及

kubeProxyMode

String

参数解释:

服务转发模式。

约束限制:

不涉及

取值范围:

  • iptables:社区传统的kube-proxy模式,完全以iptables规则的方式来实现service负载均衡。该方式最主要的问题是在服务多的时候产生太多的iptables规则,非增量式更新会引入一定的时延,大规模情况下有明显的性能问题。

  • ipvs:主导开发并在社区获得广泛支持的kube-proxy模式,采用增量式更新,吞吐更高,速度更快,并可以保证service更新期间连接保持不断开,适用于大规模场景。

默认取值:

默认使用iptables转发模式。

az

String

参数解释:

可用区(仅查询返回字段)。

CCE支持的可用区请参考地区和终端节点

约束限制:

不涉及

extendParam

ClusterExtendParam object

参数解释:

集群扩展字段,可配置多可用区集群、专属CCE集群,以及将集群创建在特定的企业项目下等。

约束限制:

不涉及

supportIstio

Boolean

参数解释:

支持Istio。

约束限制:

不涉及

取值范围:

  • true: 支持istio

  • false: 不支持istio

默认取值:

默认true

enableDistMgt

Boolean

参数解释:

集群开启对分布式云支持。

约束限制:

目前只有Turbo集群支持。

取值范围:

  • true: 开启对分布式云支持

  • false: 关闭对分布式云支持

默认取值:

默认false

configurationsOverride

Array of PackageConfiguration objects

参数解释:

覆盖集群默认组件配置。

当前支持的可配置组件及其参数详见配置管理

约束限制:

若指定了不支持的组件或组件不支持的参数,该配置项将被忽略。

clusterOps

ClusterOps object

参数解释:

集群运维相关配置。

约束限制:

不涉及

enableAutopilot

Boolean

参数解释:

是否为Autopilot集群。

约束限制:

不涉及

取值范围:

  • true: 创建Autopilot类型集群

  • false: 创建CCE/Turbo类型集群

默认取值:

默认false

表6 HostNetwork

参数

是否必选

参数类型

描述

vpc

String

参数解释:

用于创建控制节点的VPC的ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,在虚拟私有云的详情页面查找VPC ID。

  • 方法2:通过虚拟私有云服务的API接口查询。

    链接请参见查询VPC列表

subnet

String

参数解释:

用于创建控制节点的subnet的网络ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,单击VPC下的子网,进入子网详情页面,查找网络ID。

  • 方法2:通过虚拟私有云服务的查询子网列表接口查询。

    链接请参见查询子网列表

SecurityGroup

String

参数解释:

集群默认的Node节点安全组ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

  • 不指定该字段系统将自动为用户创建默认Node节点安全组。

  • 指定该字段时集群将绑定指定的安全组。

说明:

指定Node节点安全组需要放通部分端口来保证正常通信。详细设置请参考集群安全组规则配置

controlPlaneSecurityGroup

String

参数解释:

集群控制面节点安全组ID。

约束限制:

创建成功后自动生成,填写无效。

取值范围:

不涉及

默认取值:

不涉及

表7 ContainerNetwork

参数

是否必选

参数类型

描述

mode

String

参数解释:

容器网络类型。

约束限制:

只可选择一个容器网络类型。

取值范围:

  • overlay_l2:容器隧道网络,通过OVS(OpenVSwitch)为容器构建的overlay_l2网络。

  • vpc-router:VPC网络,使用ipvlan和自定义VPC路由为容器构建的Underlay的l2网络。

  • eni:云原生网络2.0,深度整合VPC原生ENI弹性网卡能力,采用VPC网段分配容器地址,支持ELB直通容器,享有高性能,创建CCE Turbo集群时指定。

默认取值:

不涉及

cidr

String

参数解释:

容器网络网段,建议使用网段10.0.0.0/12~19,172.16.0.0/16~19,192.168.0.0/16~19,如存在网段冲突,将会报错。

约束限制:

此参数在集群创建后不可更改,请谨慎选择。(已废弃,如填写cidrs将忽略该cidr)

vpc网络模式的集群在创建后可以新增网段参数,不可修改已有网段参数,需要重新创建集群才能调整。

取值范围:

满足IPv4 CIDR格式

默认取值:

不填此参数时,将从172.(16 ~ 31).0.0/16、10.(0 | 16 | 32 | 48 | 64 | 80 | 96 | 112).0.0/12中随机分配一个不冲突的网段供用户使用。

cidrs

Array of ContainerCIDR objects

参数解释:

容器网络网段列表。1.21及新版本集群使用cidrs字段,当集群网络类型为vpc-router类型时,支持多个容器网段,最多配置20个;1.21之前版本若使用cidrs字段,则取值cidrs数组中的第一个cidr元素作为容器网络网段地址。

约束限制:

容器隧道网络模式的集群在创建之后,无法修改网段参数;

vpc网络模式的集群在创建后可以新增网段参数,不可修改已有网段参数,需要重新创建集群才能调整。

表8 ContainerCIDR

参数

是否必选

参数类型

描述

cidr

String

参数解释:

容器网络网段,建议使用网段10.0.0.0/12~19,172.16.0.0/16~19,192.168.0.0/16~19。

约束限制:

如存在网段冲突,将会报错。

取值范围:

不涉及

默认取值:

不涉及

表9 EniNetwork

参数

是否必选

参数类型

描述

eniSubnetId

String

参数解释:

ENI所在子网的IPv4子网ID。

约束限制:

暂不支持IPv6,废弃中,推荐使用新字段subnets。

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,单击VPC下的子网,进入子网详情页面,查找IPv4子网ID。

  • 方法2:通过虚拟私有云服务的查询子网列表接口查询。

    链接请参见查询子网列表

eniSubnetCIDR

String

参数解释:

ENI子网CIDR。

约束限制:

废弃中,推荐使用新字段subnets。

取值范围:

不涉及

默认取值:

不涉及

subnets

Array of NetworkSubnet objects

参数解释:

IPv4子网ID列表。

约束限制:

不涉及

表10 NetworkSubnet

参数

是否必选

参数类型

描述

subnetID

String

参数解释:

用于创建控制节点的subnet的IPv4子网ID。

约束限制:

暂不支持IPv6

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,单击VPC下的子网,进入子网详情页面,查找IPv4子网ID。

  • 方法2:通过虚拟私有云服务的查询子网列表接口查询。

    链接请参见查询子网列表

表11 ServiceNetwork

参数

是否必选

参数类型

描述

IPv4CIDR

String

参数解释:

kubernetes clusterIP IPv4 CIDR取值范围。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

默认为"10.247.0.0/16"。

IPv6CIDR

String

参数解释:

kubernetes clusterIP IPv6 CIDR取值范围。

约束限制:

仅开启IPV6双栈的Turbo集群支持配置IPv6服务网段。

取值范围:

不涉及

默认取值:

Turbo集群默认为"fc00::/112"

CCE集群默认为"fd00:1234::/120"

表12 PublicAccess

参数

是否必选

参数类型

描述

cidrs

Array of strings

参数解释:

允许访问集群API的白名单网段列表,建议对VPC网段、容器网段放通。

约束限制:

该字段仅支持创建集群时传入,更新时指定无效

取值范围:

不涉及

默认取值:

默认无白名单配置,为["0.0.0.0/0"]。

表13 Authentication

参数

是否必选

参数类型

描述

mode

String

参数解释:

集群认证模式。

约束限制:

不涉及

取值范围:

  • kubernetes 1.11及之前版本的集群支持“x509”、“rbac”和“authenticating_proxy”,默认取值为“x509”。

  • kubernetes 1.13及以上版本的集群支持“rbac”和“authenticating_proxy”,默认取值为“rbac”。

默认取值:

  • kubernetes 1.11及之前版本的集群默认取值为“x509”。

  • kubernetes 1.13及以上版本的集群默认取值为“rbac”。

authenticatingProxy

AuthenticatingProxy object

参数解释:

authenticatingProxy模式相关配置。

约束限制:

认证模式为authenticating_proxy时必选。

表14 AuthenticatingProxy

参数

是否必选

参数类型

描述

ca

String

参数解释:

authenticating_proxy模式配置的x509格式CA证书(base64编码)。

约束限制:

当集群认证模式为authenticating_proxy时,此项必须填写。

取值范围:

最大长度:1M。

默认取值:

不涉及

cert

String

参数解释:

authenticating_proxy模式配置的x509格式CA证书签发的客户端证书,用于kube-apiserver到扩展apiserver的认证。(base64编码)。

约束限制:

当集群认证模式为authenticating_proxy时,此项必须填写。

取值范围:

最大长度:1M。

默认取值:

不涉及

privateKey

String

参数解释:

authenticating_proxy模式配置的x509格式CA证书签发的客户端证书时对应的私钥,用于kube-apiserver到扩展apiserver的认证。Kubernetes集群使用的私钥尚不支持密码加密,请使用未加密的私钥。(base64编码)。

约束限制:

当集群认证模式为authenticating_proxy时,此项必须填写。

取值范围:

最大长度:1M。

默认取值:

不涉及

表15 MasterSpec

参数

是否必选

参数类型

描述

availabilityZone

String

参数解释:

可用区。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表16 ResourceTag

参数

是否必选

参数类型

描述

key

String

参数解释:

Key值。

约束限制:

不涉及

取值范围:

  • 不能为空且首尾不能包含空格,最多支持128个字符

  • 可用UTF-8格式表示的汉字、字母、数字和空格

  • 支持部分特殊字符:_.:=+-@

  • 不能以"_sys_"开头

默认取值:

不涉及

value

String

参数解释:

Value值。

约束限制:

不涉及

取值范围:

  • 可以为空但不能缺省,最多支持255个字符

  • 可用UTF-8格式表示的汉字、字母、数字和空格

  • 支持部分特殊字符:_.:/=+-@

默认取值:

不涉及

表17 ClusterExtendParam

参数

是否必选

参数类型

描述

clusterAZ

String

参数解释:

集群控制节点可用区配置。

CCE支持的可用区请参考地区和终端节点

约束限制:

不涉及

取值范围:

  • 指定局点支持可用区。

  • multi_az:多可用区,可选。仅使用多控制节点集群时才可以配置多可用区。

  • 专属云计算池可用区:用于指定专属云可用区部署集群控制节点。如果需配置专属CCE集群,该字段为必选。

默认取值:

不指定默认随机分配可用区。

dssMasterVolumes

String

参数解释:

用于指定控制节点的系统盘和数据盘使用专属分布式存储,未指定或者值为空时,默认使用EVS云硬盘。

约束限制:

如果配置专属CCE集群,该字段为必选,请按照如下格式设置:

<rootVol.dssPoolID>.<rootVol.volType>;<dataVol.dssPoolID>.<dataVol.volType>

字段说明:

  • rootVol为系统盘;dataVol为数据盘;

  • dssPoolID为专属分布式存储池ID;

  • volType为专属分布式存储池的存储类型,如SAS、SSD、SATA、ESSD、GPSDD、ESSD2、GPSSD2

    取值范围:

    不涉及

    默认取值:

    不涉及

样例:c950ee97-587c-4f24-8a74-3367e3da570f.sas;6edbc2f4-1507-44f8-ac0d-eed1d2608d38.ssd

说明:

非专属CCE集群不支持配置该字段。

enterpriseProjectId

String

参数解释:

集群所属的企业项目ID。

约束限制:

需要开通企业项目功能后才可配置企业项目。

取值范围:

不涉及

默认取值:

不涉及

kubeProxyMode

String

参数解释:

服务转发模式,支持以下两种实现:

约束限制:

此参数已废弃,若同时指定此参数和ClusterSpec下的kubeProxyMode,以ClusterSpec下的为准。

取值范围:

  • iptables:社区传统的kube-proxy模式,完全以iptables规则的方式来实现service负载均衡。该方式最主要的问题是在服务多的时候产生太多的iptables规则,非增量式更新会引入一定的时延,大规模情况下有明显的性能问题

  • ipvs:主导开发并在社区获得广泛支持的kube-proxy模式,采用增量式更新,吞吐更高,速度更快,并可以保证service更新期间连接保持不断开,适用于大规模场景。

默认取值:

默认iptables。

clusterExternalIP

String

参数解释:

master 弹性公网IP

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

alpha.cce/fixPoolMask

String

参数解释:

容器网络固定IP池掩码位数,该参数决定节点可分配容器IP数量,与创建节点时设置的maxPods参数共同决定节点最多可以创建多少个Pod,

具体请参见节点可创建的最大Pod数量说明

约束限制:

仅vpc-router网络支持。

取值范围:

整数字符串取值范围: 24 ~ 28

默认取值:

默认值24

decMasterFlavor

String

参数解释:

专属CCE集群指定可控制节点的规格。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

dockerUmaskMode

String

参数解释:

集群默认Docker的UmaskMode配置。

约束限制:

不涉及

取值范围:

  • secure

  • normal

默认取值:

默认normal

kubernetes.io/cpuManagerPolicy

String

参数解释:

集群CPU管理策略。

约束限制:

不涉及

取值范围:

  • none(或空值):关闭工作负载实例独占CPU核的功能,优点是CPU共享池的可分配核数较多

  • static:支持给节点上的工作负载实例配置CPU独占,适用于对CPU缓存和调度延迟敏感的工作负载,Turbo集群下仅对普通容器节点有效,安全容器节点无效。

默认取值:

默认none

orderID

String

参数解释:

订单ID。

约束限制:

集群付费类型为自动付费包周期类型时,响应中会返回此字段(仅创建场景涉及)。

取值范围:

不涉及

默认取值:

不涉及

periodType

String

参数解释:

订购周期单位。

约束限制:

作为请求参数,billingMode为1(包周期)时生效,且为必选。

作为响应参数,仅在创建包周期集群时返回。

取值范围:

  • month:月

  • year:年

默认取值:

不涉及

periodNum

Integer

参数解释:

订购周期数

约束限制:

作为请求参数,billingMode为1时生效,且为必选。

作为响应参数,仅在创建包周期集群时返回。

取值范围:

  • periodType=month(周期类型为月)时,取值为[1-9]。

  • periodType=year(周期类型为年)时,取值为[1-3]。

默认取值:

不涉及

isAutoRenew

String

参数解释:

是否自动续订

约束限制:

billingMode为1时生效。

取值范围:

  • "true":自动续订

  • "false":不自动续订

默认取值:

默认false

isAutoPay

String

参数解释:

是否自动扣款。

约束限制:

billingMode为1时生效。

取值范围:

  • "true":自动扣款

  • "false":不自动扣款

默认取值:

默认false

upgradefrom

String

参数解释:

记录集群通过何种升级方式升级到当前版本。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表18 PackageConfiguration

参数

是否必选

参数类型

描述

name

String

参数解释:

组件名称。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

configurations

Array of ConfigurationItem objects

参数解释:

组件配置项。

约束限制:

不涉及

表19 ConfigurationItem

参数

是否必选

参数类型

描述

name

String

参数解释:

组件配置项名称。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

value

Object

参数解释:

组件配置项值。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表20 ClusterOps

参数

是否必选

参数类型

描述

alarm

AlarmInfo object

参数解释:

告警助手参数配置。基于AOM服务的告警能力实现,提供集群内的告警快速检索、告警快速配置的能力,告警中心的指标类告警规则依赖云原生监控插件上报数据到AOM实例。

约束限制:

不涉及

表21 AlarmInfo

参数

是否必选

参数类型

描述

topics

Array of strings

参数解释:

联系组列表。填写SMN主题名称,通过配置告警联系组,分组管理订阅终端,接收告警信息。

约束限制:

不涉及

alarmRuleTemplateId

String

参数解释:

开启告警助手时传入告警模板ID。默认采用容器场景下的告警规则模板。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

promInstanceID

String

参数解释:

开启告警助手时传入AOM普罗实例的id。若未安装普罗插件或者未对接AOM实例,此参数无需指定,告警中心将不会创建指标类告警规则。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

promEnterpriseProjectID

String

参数解释:

开启告警助手时传入AOM普罗实例的企业项目id。若未安装普罗插件或者未对接AOM实例,此参数无需指定,告警中心将不会创建指标类告警规则。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

响应参数

状态码: 201

表22 响应Body参数

参数

参数类型

描述

kind

String

参数解释:

API类型。

约束限制:

该值不可修改

取值范围:

  • Cluster

  • cluster

默认取值:

不涉及

apiVersion

String

参数解释:

API版本。

约束限制:

该值不可修改

取值范围:

  • v3

默认取值:

不涉及

metadata

ClusterMetadata object

参数解释:

集群的基本信息,为集合类的元素类型,包含一组由不同名称定义的属性。

约束限制:

不涉及

spec

ClusterSpec object

参数解释:

spec是集合类的元素类型,您对需要管理的集群对象进行详细描述的主体部分都在spec中给出。CCE通过spec的描述来创建或更新对象。

约束限制:

不涉及

status

ClusterStatus object

参数解释:

不涉及集合类的元素类型,用于记录对象在系统中的当前状态信息,包含了集群状态和本次创建集群作业的jobID

约束限制:

不涉及

表23 ClusterMetadata

参数

参数类型

描述

name

String

参数解释:

集群名称。

约束限制:

不涉及

取值范围:

以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围4-128位,且不能以中划线(-)结尾。

默认取值:

不涉及

uid

String

参数解释:

集群ID,资源唯一标识。

约束限制:

创建成功后自动生成,填写无效。在创建包周期集群时,响应体不返回集群ID。

取值范围:

不涉及

默认取值:

不涉及

alias

String

参数解释:

集群显示名,用于在 CCE 界面显示,该名称创建后可修改。显示名和其他集群的名称、显示名不可以重复。

约束限制:

在创建集群、更新集群请求体中,集群显示名alias未指定或取值为空,表示与集群名称name一致。在创建集群等响应体中,集群显示名alias未配置时将不返回。

取值范围:

以中文或英文字符开头,由数字、中文、英文字符、中划线(-)组成,长度范围 4-128位,且不能以中划线(-)开头和结尾。

默认取值:

不涉及

annotations

Map<String,String>

参数解释:

集群注解,由key/value组成:

"annotations": {
   "key1" : "value1",
   "key2" : "value2"
}

约束限制:

该字段不会被数据库保存,当前仅用于指定集群待安装插件。

取值范围:

不涉及

默认取值:

不涉及

说明:
  • Annotations不用于标识和选择对象。Annotations中的元数据可以是small或large,structured或unstructured,并且可以包括标签不允许使用的字符。

  • 可通过加入"cluster.install.addons.external/install":"[{"addonTemplateName":"icagent"}]"的键值对在创建集群时安装ICAgent。

labels

Map<String,String>

参数解释:

集群标签,key/value对格式。

约束限制:

该字段值由系统自动生成,用于升级时前端识别集群支持的特性开关,用户指定无效。

取值范围:

不涉及

默认取值:

不涉及

creationTimestamp

String

参数解释:

集群创建时间。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

updateTimestamp

String

参数解释:

集群更新时间。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

timezone

String

参数解释:

集群时区。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表24 ClusterSpec

参数

参数类型

描述

category

String

参数解释:

集群类别。

约束限制:

不涉及

取值范围:

  • CCE:CCE集群

    CCE集群支持虚拟机与裸金属服务器混合、GPU、NPU等异构节点的混合部署,基于高性能网络模型提供全方位、多场景、安全稳定的容器运行环境。

  • Turbo: CCE Turbo集群。

    全面基于云原生基础设施构建的云原生2.0的容器引擎服务,具备软硬协同、网络无损、安全可靠、调度智能的优势,为用户提供一站式、高性价比的全新容器服务体验。

默认取值:

容器网络参数设置非eni模式时,默认为CCE

容器网络参数设置为eni模式时,默认为Turbo

type

String

参数解释:

集群Master节点架构

约束限制:

不涉及

取值范围:

  • VirtualMachine:Master节点为x86架构服务器

  • ARM64: Master节点为鲲鹏(ARM架构)服务器

默认取值:

VirtualMachine

flavor

String

参数解释:

集群规格,当集群为v1.15及以上版本时支持创建后变更,详情请参见变更集群规格。请按实际业务需求进行选择

约束限制:

不涉及

取值范围:

  • cce.s1.small: 小规模单控制节点CCE集群(最大50节点)

  • cce.s1.medium: 中等规模单控制节点CCE集群(最大200节点)

  • cce.s2.small: 小规模三控制节点CCE集群(最大50节点)

  • cce.s2.medium: 中等规模三控制节点CCE集群(最大200节点)

  • cce.s2.large: 大规模三控制节点CCE集群(最大1000节点)

  • cce.s2.xlarge: 超大规模三控制节点CCE集群(最大2000节点)

默认取值:

不涉及

说明:

关于规格参数中的字段说明如下:

  • s1:单控制节点的集群,控制节点数为1。单控制节点故障后,集群将不可用,但已运行工作负载不受影响。

  • s2:三控制节点的集群,即高可用集群,控制节点数为3。当某个控制节点故障时,集群仍然可用。

  • dec:表示专属云的CCE集群规格。例如cce.dec.s1.small表示小规模单控制节点的专属云CCE集群(最大50节点)。

  • small:表示集群支持管理的最大节点规模为50节点。

  • medium:表示集群支持管理的最大节点规模为200节点。

  • large:表示集群支持管理的最大节点规模为1000节点。

  • xlarge:表示集群支持管理的最大节点规模为2000节点。

version

String

参数解释:

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

在CCE控制台支持创建三种最新版本的集群。可登录CCE控制台创建集群,在“版本”处获取到集群版本。

其它集群版本,当前仍可通过api创建,但后续会逐渐下线,具体下线策略请关注CCE官方公告。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

  • 若不配置,默认创建最新版本的集群。

  • 若指定集群基线版本但是不指定具体r版本,则系统默认选择对应集群版本的最新r版本。建议不指定具体r版本由系统选择最新版本。

说明:
  • Turbo集群支持1.19及以上版本商用。

platformVersion

String

参数解释:

CCE集群平台版本号,表示集群版本(version)下的内部版本。用于跟踪某一集群版本内的迭代,集群版本内唯一,跨集群版本重新计数。

约束限制:

不支持用户指定,集群创建时自动选择对应集群版本的最新平台版本。

取值范围:

platformVersion格式为:cce.X.Y

  • X: 表示内部特性版本。集群版本中特性或者补丁修复,或者OS支持等变更场景。其值从1开始单调递增。

  • Y: 表示内部特性版本的补丁版本。仅用于特性版本上线后的软件包更新,不涉及其他修改。其值从0开始单调递增。

默认取值:

不涉及

legacyVersion

String

参数解释:

CCE集群旧版本(已废弃),无实际功能,仅用于集群version与platformVersion组合展示,该版本号全局内唯一。如集群version为va.b, platformVersion为cce.X.Y,则legacyVersion值为va.b.X-rY。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

description

String

参数解释:

集群描述,对于集群使用目的的描述,可根据实际情况自定义,默认为空。集群创建成功后可通过接口更新指定的集群来做出修改,也可在CCE控制台中对应集群的“集群详情”下的“描述”处进行修改。

约束限制:

仅支持utf-8编码。

取值范围:

不涉及

默认取值:

不涉及

customSan

Array of strings

参数解释:

集群的API Server服务端证书中的自定义SAN(Subject Alternative Name)字段,遵从SSL标准X509定义的格式规范。

约束限制:

不允许出现同名重复。

取值范围:

格式符合IP和域名格式。

默认取值:

不涉及

示例:

SAN 1: DNS Name=example.com
SAN 2: DNS Name=www.example.com
SAN 3: DNS Name=example.net
SAN 4: IP Address=93.184.216.34

ipv6enable

Boolean

参数解释:

集群是否使用IPv6模式,1.15版本及以上支持。

约束限制:

开启IPv6后不支持iptables转发模式;VPC网络模式不支持IPv4/IPv6双栈网络。

取值范围:

  • true: 开启IPv4/IPv6双栈模式

  • false: 仅使用IPv4模式

默认取值:

false

hostNetwork

HostNetwork object

参数解释:

节点网络参数,包含了虚拟私有云VPC和子网的ID信息,而VPC是集群内节点之间的通信依赖,所以是必选的参数集。

约束限制:

不涉及

containerNetwork

ContainerNetwork object

参数解释:

容器网络参数,包含了容器网络类型和容器网段的信息。

约束限制:

不涉及

eniNetwork

EniNetwork object

参数解释:

云原生网络2.0网络配置,创建CCE Turbo集群时指定。

约束限制:

不涉及

serviceNetwork

ServiceNetwork object

参数解释:

服务网段参数,包含IPv4 CIDR。

约束限制:

不涉及

publicAccess

PublicAccess object

参数解释:

集群API访问控制。

约束限制:

不涉及

authentication

Authentication object

参数解释:

集群认证方式相关配置。

约束限制:

不涉及

billingMode

Integer

参数解释:

集群的计费方式。

约束限制:

不涉及

取值范围:

  • 0: 按需计费

  • 1: 包周期

默认取值:

默认0。

masters

Array of MasterSpec objects

参数解释:

控制节点的高级配置。

约束限制:

该参数未配置时将不返回。

kubernetesSvcIpRange

String

参数解释:

服务网段参数,kubernetes clusterIP取值范围,1.11.7版本及以上支持。创建集群时如若未传参,默认为"10.247.0.0/16"。该参数废弃中,推荐使用新字段serviceNetwork,包含IPv4服务网段。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

clusterTags

Array of ResourceTag objects

参数解释:

集群资源标签。

约束限制:

不涉及

kubeProxyMode

String

参数解释:

服务转发模式。

约束限制:

不涉及

取值范围:

  • iptables:社区传统的kube-proxy模式,完全以iptables规则的方式来实现service负载均衡。该方式最主要的问题是在服务多的时候产生太多的iptables规则,非增量式更新会引入一定的时延,大规模情况下有明显的性能问题。

  • ipvs:主导开发并在社区获得广泛支持的kube-proxy模式,采用增量式更新,吞吐更高,速度更快,并可以保证service更新期间连接保持不断开,适用于大规模场景。

默认取值:

默认使用iptables转发模式。

az

String

参数解释:

可用区(仅查询返回字段)。

CCE支持的可用区请参考地区和终端节点

约束限制:

不涉及

extendParam

ClusterExtendParam object

参数解释:

集群扩展字段,可配置多可用区集群、专属CCE集群,以及将集群创建在特定的企业项目下等。

约束限制:

不涉及

supportIstio

Boolean

参数解释:

支持Istio。

约束限制:

不涉及

取值范围:

  • true: 支持istio

  • false: 不支持istio

默认取值:

默认true

enableDistMgt

Boolean

参数解释:

集群开启对分布式云支持。

约束限制:

目前只有Turbo集群支持。

取值范围:

  • true: 开启对分布式云支持

  • false: 关闭对分布式云支持

默认取值:

默认false

configurationsOverride

Array of PackageConfiguration objects

参数解释:

覆盖集群默认组件配置。

当前支持的可配置组件及其参数详见配置管理

约束限制:

若指定了不支持的组件或组件不支持的参数,该配置项将被忽略。

clusterOps

ClusterOps object

参数解释:

集群运维相关配置。

约束限制:

不涉及

enableAutopilot

Boolean

参数解释:

是否为Autopilot集群。

约束限制:

不涉及

取值范围:

  • true: 创建Autopilot类型集群

  • false: 创建CCE/Turbo类型集群

默认取值:

默认false

表25 HostNetwork

参数

参数类型

描述

vpc

String

参数解释:

用于创建控制节点的VPC的ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,在虚拟私有云的详情页面查找VPC ID。

  • 方法2:通过虚拟私有云服务的API接口查询。

    链接请参见查询VPC列表

subnet

String

参数解释:

用于创建控制节点的subnet的网络ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,单击VPC下的子网,进入子网详情页面,查找网络ID。

  • 方法2:通过虚拟私有云服务的查询子网列表接口查询。

    链接请参见查询子网列表

SecurityGroup

String

参数解释:

集群默认的Node节点安全组ID。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

  • 不指定该字段系统将自动为用户创建默认Node节点安全组。

  • 指定该字段时集群将绑定指定的安全组。

说明:

指定Node节点安全组需要放通部分端口来保证正常通信。详细设置请参考集群安全组规则配置

controlPlaneSecurityGroup

String

参数解释:

集群控制面节点安全组ID。

约束限制:

创建成功后自动生成,填写无效。

取值范围:

不涉及

默认取值:

不涉及

表26 ContainerNetwork

参数

参数类型

描述

mode

String

参数解释:

容器网络类型。

约束限制:

只可选择一个容器网络类型。

取值范围:

  • overlay_l2:容器隧道网络,通过OVS(OpenVSwitch)为容器构建的overlay_l2网络。

  • vpc-router:VPC网络,使用ipvlan和自定义VPC路由为容器构建的Underlay的l2网络。

  • eni:云原生网络2.0,深度整合VPC原生ENI弹性网卡能力,采用VPC网段分配容器地址,支持ELB直通容器,享有高性能,创建CCE Turbo集群时指定。

默认取值:

不涉及

cidr

String

参数解释:

容器网络网段,建议使用网段10.0.0.0/12~19,172.16.0.0/16~19,192.168.0.0/16~19,如存在网段冲突,将会报错。

约束限制:

此参数在集群创建后不可更改,请谨慎选择。(已废弃,如填写cidrs将忽略该cidr)

vpc网络模式的集群在创建后可以新增网段参数,不可修改已有网段参数,需要重新创建集群才能调整。

取值范围:

满足IPv4 CIDR格式

默认取值:

不填此参数时,将从172.(16 ~ 31).0.0/16、10.(0 | 16 | 32 | 48 | 64 | 80 | 96 | 112).0.0/12中随机分配一个不冲突的网段供用户使用。

cidrs

Array of ContainerCIDR objects

参数解释:

容器网络网段列表。1.21及新版本集群使用cidrs字段,当集群网络类型为vpc-router类型时,支持多个容器网段,最多配置20个;1.21之前版本若使用cidrs字段,则取值cidrs数组中的第一个cidr元素作为容器网络网段地址。

约束限制:

容器隧道网络模式的集群在创建之后,无法修改网段参数;

vpc网络模式的集群在创建后可以新增网段参数,不可修改已有网段参数,需要重新创建集群才能调整。

表27 ContainerCIDR

参数

参数类型

描述

cidr

String

参数解释:

容器网络网段,建议使用网段10.0.0.0/12~19,172.16.0.0/16~19,192.168.0.0/16~19。

约束限制:

如存在网段冲突,将会报错。

取值范围:

不涉及

默认取值:

不涉及

表28 EniNetwork

参数

参数类型

描述

eniSubnetId

String

参数解释:

ENI所在子网的IPv4子网ID。

约束限制:

暂不支持IPv6,废弃中,推荐使用新字段subnets。

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,单击VPC下的子网,进入子网详情页面,查找IPv4子网ID。

  • 方法2:通过虚拟私有云服务的查询子网列表接口查询。

    链接请参见查询子网列表

eniSubnetCIDR

String

参数解释:

ENI子网CIDR。

约束限制:

废弃中,推荐使用新字段subnets。

取值范围:

不涉及

默认取值:

不涉及

subnets

Array of NetworkSubnet objects

参数解释:

IPv4子网ID列表。

约束限制:

不涉及

表29 NetworkSubnet

参数

参数类型

描述

subnetID

String

参数解释:

用于创建控制节点的subnet的IPv4子网ID。

约束限制:

暂不支持IPv6

取值范围:

不涉及

默认取值:

不涉及

获取方法如下:

  • 方法1:登录虚拟私有云服务的控制台界面,单击VPC下的子网,进入子网详情页面,查找IPv4子网ID。

  • 方法2:通过虚拟私有云服务的查询子网列表接口查询。

    链接请参见查询子网列表

表30 ServiceNetwork

参数

参数类型

描述

IPv4CIDR

String

参数解释:

kubernetes clusterIP IPv4 CIDR取值范围。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

默认为"10.247.0.0/16"。

IPv6CIDR

String

参数解释:

kubernetes clusterIP IPv6 CIDR取值范围。

约束限制:

仅开启IPV6双栈的Turbo集群支持配置IPv6服务网段。

取值范围:

不涉及

默认取值:

Turbo集群默认为"fc00::/112"

CCE集群默认为"fd00:1234::/120"

表31 PublicAccess

参数

参数类型

描述

cidrs

Array of strings

参数解释:

允许访问集群API的白名单网段列表,建议对VPC网段、容器网段放通。

约束限制:

该字段仅支持创建集群时传入,更新时指定无效

取值范围:

不涉及

默认取值:

默认无白名单配置,为["0.0.0.0/0"]。

表32 Authentication

参数

参数类型

描述

mode

String

参数解释:

集群认证模式。

约束限制:

不涉及

取值范围:

  • kubernetes 1.11及之前版本的集群支持“x509”、“rbac”和“authenticating_proxy”,默认取值为“x509”。

  • kubernetes 1.13及以上版本的集群支持“rbac”和“authenticating_proxy”,默认取值为“rbac”。

默认取值:

  • kubernetes 1.11及之前版本的集群默认取值为“x509”。

  • kubernetes 1.13及以上版本的集群默认取值为“rbac”。

authenticatingProxy

AuthenticatingProxy object

参数解释:

authenticatingProxy模式相关配置。

约束限制:

认证模式为authenticating_proxy时必选。

表33 AuthenticatingProxy

参数

参数类型

描述

ca

String

参数解释:

authenticating_proxy模式配置的x509格式CA证书(base64编码)。

约束限制:

当集群认证模式为authenticating_proxy时,此项必须填写。

取值范围:

最大长度:1M。

默认取值:

不涉及

cert

String

参数解释:

authenticating_proxy模式配置的x509格式CA证书签发的客户端证书,用于kube-apiserver到扩展apiserver的认证。(base64编码)。

约束限制:

当集群认证模式为authenticating_proxy时,此项必须填写。

取值范围:

最大长度:1M。

默认取值:

不涉及

privateKey

String

参数解释:

authenticating_proxy模式配置的x509格式CA证书签发的客户端证书时对应的私钥,用于kube-apiserver到扩展apiserver的认证。Kubernetes集群使用的私钥尚不支持密码加密,请使用未加密的私钥。(base64编码)。

约束限制:

当集群认证模式为authenticating_proxy时,此项必须填写。

取值范围:

最大长度:1M。

默认取值:

不涉及

表34 MasterSpec

参数

参数类型

描述

availabilityZone

String

参数解释:

可用区。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表35 ResourceTag

参数

参数类型

描述

key

String

参数解释:

Key值。

约束限制:

不涉及

取值范围:

  • 不能为空且首尾不能包含空格,最多支持128个字符

  • 可用UTF-8格式表示的汉字、字母、数字和空格

  • 支持部分特殊字符:_.:=+-@

  • 不能以"_sys_"开头

默认取值:

不涉及

value

String

参数解释:

Value值。

约束限制:

不涉及

取值范围:

  • 可以为空但不能缺省,最多支持255个字符

  • 可用UTF-8格式表示的汉字、字母、数字和空格

  • 支持部分特殊字符:_.:/=+-@

默认取值:

不涉及

表36 ClusterExtendParam

参数

参数类型

描述

clusterAZ

String

参数解释:

集群控制节点可用区配置。

CCE支持的可用区请参考地区和终端节点

约束限制:

不涉及

取值范围:

  • 指定局点支持可用区。

  • multi_az:多可用区,可选。仅使用多控制节点集群时才可以配置多可用区。

  • 专属云计算池可用区:用于指定专属云可用区部署集群控制节点。如果需配置专属CCE集群,该字段为必选。

默认取值:

不指定默认随机分配可用区。

dssMasterVolumes

String

参数解释:

用于指定控制节点的系统盘和数据盘使用专属分布式存储,未指定或者值为空时,默认使用EVS云硬盘。

约束限制:

如果配置专属CCE集群,该字段为必选,请按照如下格式设置:

<rootVol.dssPoolID>.<rootVol.volType>;<dataVol.dssPoolID>.<dataVol.volType>

字段说明:

  • rootVol为系统盘;dataVol为数据盘;

  • dssPoolID为专属分布式存储池ID;

  • volType为专属分布式存储池的存储类型,如SAS、SSD、SATA、ESSD、GPSDD、ESSD2、GPSSD2

    取值范围:

    不涉及

    默认取值:

    不涉及

样例:c950ee97-587c-4f24-8a74-3367e3da570f.sas;6edbc2f4-1507-44f8-ac0d-eed1d2608d38.ssd

说明:

非专属CCE集群不支持配置该字段。

enterpriseProjectId

String

参数解释:

集群所属的企业项目ID。

约束限制:

需要开通企业项目功能后才可配置企业项目。

取值范围:

不涉及

默认取值:

不涉及

kubeProxyMode

String

参数解释:

服务转发模式,支持以下两种实现:

约束限制:

此参数已废弃,若同时指定此参数和ClusterSpec下的kubeProxyMode,以ClusterSpec下的为准。

取值范围:

  • iptables:社区传统的kube-proxy模式,完全以iptables规则的方式来实现service负载均衡。该方式最主要的问题是在服务多的时候产生太多的iptables规则,非增量式更新会引入一定的时延,大规模情况下有明显的性能问题

  • ipvs:主导开发并在社区获得广泛支持的kube-proxy模式,采用增量式更新,吞吐更高,速度更快,并可以保证service更新期间连接保持不断开,适用于大规模场景。

默认取值:

默认iptables。

clusterExternalIP

String

参数解释:

master 弹性公网IP

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

alpha.cce/fixPoolMask

String

参数解释:

容器网络固定IP池掩码位数,该参数决定节点可分配容器IP数量,与创建节点时设置的maxPods参数共同决定节点最多可以创建多少个Pod,

具体请参见节点可创建的最大Pod数量说明

约束限制:

仅vpc-router网络支持。

取值范围:

整数字符串取值范围: 24 ~ 28

默认取值:

默认值24

decMasterFlavor

String

参数解释:

专属CCE集群指定可控制节点的规格。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

dockerUmaskMode

String

参数解释:

集群默认Docker的UmaskMode配置。

约束限制:

不涉及

取值范围:

  • secure

  • normal

默认取值:

默认normal

kubernetes.io/cpuManagerPolicy

String

参数解释:

集群CPU管理策略。

约束限制:

不涉及

取值范围:

  • none(或空值):关闭工作负载实例独占CPU核的功能,优点是CPU共享池的可分配核数较多

  • static:支持给节点上的工作负载实例配置CPU独占,适用于对CPU缓存和调度延迟敏感的工作负载,Turbo集群下仅对普通容器节点有效,安全容器节点无效。

默认取值:

默认none

orderID

String

参数解释:

订单ID。

约束限制:

集群付费类型为自动付费包周期类型时,响应中会返回此字段(仅创建场景涉及)。

取值范围:

不涉及

默认取值:

不涉及

periodType

String

参数解释:

订购周期单位。

约束限制:

作为请求参数,billingMode为1(包周期)时生效,且为必选。

作为响应参数,仅在创建包周期集群时返回。

取值范围:

  • month:月

  • year:年

默认取值:

不涉及

periodNum

Integer

参数解释:

订购周期数

约束限制:

作为请求参数,billingMode为1时生效,且为必选。

作为响应参数,仅在创建包周期集群时返回。

取值范围:

  • periodType=month(周期类型为月)时,取值为[1-9]。

  • periodType=year(周期类型为年)时,取值为[1-3]。

默认取值:

不涉及

isAutoRenew

String

参数解释:

是否自动续订

约束限制:

billingMode为1时生效。

取值范围:

  • "true":自动续订

  • "false":不自动续订

默认取值:

默认false

isAutoPay

String

参数解释:

是否自动扣款。

约束限制:

billingMode为1时生效。

取值范围:

  • "true":自动扣款

  • "false":不自动扣款

默认取值:

默认false

upgradefrom

String

参数解释:

记录集群通过何种升级方式升级到当前版本。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表37 PackageConfiguration

参数

参数类型

描述

name

String

参数解释:

组件名称。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

configurations

Array of ConfigurationItem objects

参数解释:

组件配置项。

约束限制:

不涉及

表38 ConfigurationItem

参数

参数类型

描述

name

String

参数解释:

组件配置项名称。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

value

Object

参数解释:

组件配置项值。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表39 ClusterOps

参数

参数类型

描述

alarm

AlarmInfo object

参数解释:

告警助手参数配置。基于AOM服务的告警能力实现,提供集群内的告警快速检索、告警快速配置的能力,告警中心的指标类告警规则依赖云原生监控插件上报数据到AOM实例。

约束限制:

不涉及

表40 AlarmInfo

参数

参数类型

描述

topics

Array of strings

参数解释:

联系组列表。填写SMN主题名称,通过配置告警联系组,分组管理订阅终端,接收告警信息。

约束限制:

不涉及

alarmRuleTemplateId

String

参数解释:

开启告警助手时传入告警模板ID。默认采用容器场景下的告警规则模板。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

promInstanceID

String

参数解释:

开启告警助手时传入AOM普罗实例的id。若未安装普罗插件或者未对接AOM实例,此参数无需指定,告警中心将不会创建指标类告警规则。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

promEnterpriseProjectID

String

参数解释:

开启告警助手时传入AOM普罗实例的企业项目id。若未安装普罗插件或者未对接AOM实例,此参数无需指定,告警中心将不会创建指标类告警规则。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表41 ClusterStatus

参数

参数类型

描述

phase

String

参数解释:

集群状态。

约束限制:

不涉及

取值范围:

  • Available:可用,表示集群处于正常状态。

  • Unavailable:不可用,表示集群异常,需手动删除。

  • ScalingUp:扩容中,表示集群正处于扩容过程中。

  • ScalingDown:缩容中,表示集群正处于缩容过程中。

  • Creating:创建中,表示集群正处于创建过程中。

  • Deleting:删除中,表示集群正处于删除过程中。

  • Upgrading:升级中,表示集群正处于升级过程中。

  • Resizing:规格变更中,表示集群正处于变更规格中。

  • ResizeFailed:规格变更异常,表示集群变更规格异常。

  • RollingBack:回滚中,表示集群正处于回滚过程中。

  • RollbackFailed:回滚异常,表示集群回滚异常。

  • Hibernating:休眠中,表示集群正处于休眠过程中。

  • Hibernation:已休眠,表示集群正处于休眠状态。

  • Freezing:冻结中,表示集群正处于冻结过程中。

  • Frozen:已冻结,表示集群正处于冻结状态。

  • UnFreezing:解冻中,表示集群正处于解冻过程中。

  • Awaking:唤醒中,表示集群正处于从休眠状态唤醒的过程中。

  • Empty:集群无任何资源(已废弃)

  • Error:错误,表示集群资源异常,可尝试手动删除。

jobID

String

参数解释:

任务ID,集群当前状态关联的任务ID。当前支持:

  • 创建集群时返回关联的任务ID,可通过任务ID查询创建集群的附属任务信息;

  • 删除集群或者删除集群失败时返回关联的任务ID,此字段非空时,可通过任务ID查询删除集群的附属任务信息。

约束限制:

不涉及

取值范围:

不涉及

说明:

任务信息具有一定时效性,仅用于短期跟踪任务进度,请勿用于集群状态判断等额外场景。

reason

String

参数解释:

及集群变为当前状态的原因,在集群在非“Available”状态下时,会返回此参数。

约束限制:

不涉及

取值范围:

不涉及

message

String

参数解释:

集群变为当前状态的原因的详细信息,在集群在非“Available”状态下时,会返回此参数。

约束限制:

不涉及

取值范围:

不涉及

endpoints

Array of ClusterEndpoints objects

参数解释:

集群中 kube-apiserver 的访问地址。

约束限制:

不涉及

isLocked

Boolean

参数解释:

CBC资源锁定

约束限制:

不涉及

取值范围:

  • true: 是CBC锁定资源

  • false: 非CBC锁定资源

lockScene

String

参数解释:

CBC资源锁定场景

约束限制:

不涉及

取值范围:

不涉及

lockSource

String

参数解释:

锁定资源

约束限制:

不涉及

取值范围:

不涉及

lockSourceId

String

参数解释:

锁定的资源ID

约束限制:

不涉及

取值范围:

不涉及

deleteOption

Object

参数解释:

删除配置状态(仅删除请求响应包含)

约束限制:

不涉及

取值范围:

不涉及

deleteStatus

Object

参数解释:

删除状态信息(仅删除请求响应包含)

约束限制:

不涉及

取值范围:

不涉及

表42 ClusterEndpoints

参数

参数类型

描述

url

String

参数解释:

集群中 kube-apiserver 的访问地址。

约束限制:

不涉及

取值范围:

不涉及

type

String

参数解释:

集群访问地址的类型。

约束限制:

不涉及

取值范围:

  • Internal:用户子网内访问的地址

  • External:公网访问的地址

请求示例

  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

    /api/v3/projects/{project_id}/clusters
    
    {
      "kind" : "Cluster",
      "apiVersion" : "v3",
      "metadata" : {
        "name" : "cluster"
      },
      "spec" : {
        "category" : "CCE",
        "flavor" : "cce.s2.small",
        "version" : "v1.29",
        "hostNetwork" : {
          "vpc" : "030bfb19-5fa7-42ad-8a0d-c0721d268867",
          "subnet" : "ca964acf-8468-4735-8229-97940ef6c881"
        },
        "containerNetwork" : {
          "mode" : "vpc-router",
          "cidr" : "10.0.0.0/16"
        },
        "kubernetesSvcIpRange" : "10.247.0.0/16",
        "description" : "",
        "billingMode" : 0,
        "extendParam" : {
          "kubeProxyMode" : "iptables",
          "alpha.cce/fixPoolMask" : "25",
          "enterpriseProjectId" : "0"
        },
        "authentication" : {
          "mode" : "rbac"
        },
        "ipv6enable" : false
      }
    }
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并在集群中安装ICAgent。

    /api/v3/projects/{project_id}/clusters
    
    {
      "kind" : "Cluster",
      "apiVersion" : "v3",
      "metadata" : {
        "name" : "cluster",
        "annotations" : {
          "cluster.install.addons.external/install" : "[{\"addonTemplateName\":\"icagent\"}]"
        }
      },
      "spec" : {
        "category" : "CCE",
        "flavor" : "cce.s2.small",
        "version" : "v1.29",
        "hostNetwork" : {
          "vpc" : "030bfb19-5fa7-42ad-8a0d-c0721d268867",
          "subnet" : "ca964acf-8468-4735-8229-97940ef6c881"
        },
        "containerNetwork" : {
          "mode" : "vpc-router",
          "cidr" : "10.0.0.0/16"
        },
        "kubernetesSvcIpRange" : "10.247.0.0/16",
        "description" : "",
        "billingMode" : 0,
        "extendParam" : {
          "kubeProxyMode" : "iptables",
          "alpha.cce/fixPoolMask" : "25",
          "enterpriseProjectId" : "0"
        },
        "authentication" : {
          "mode" : "rbac"
        },
        "ipv6enable" : false
      }
    }
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并指定自定义的节点默认安全组。

    /api/v3/projects/{project_id}/clusters
    
    {
      "kind" : "Cluster",
      "apiVersion" : "v3",
      "metadata" : {
        "name" : "cluster"
      },
      "spec" : {
        "category" : "CCE",
        "flavor" : "cce.s2.small",
        "version" : "v1.29",
        "hostNetwork" : {
          "vpc" : "030bfb19-5fa7-42ad-8a0d-c0721d268867",
          "subnet" : "ca964acf-8468-4735-8229-97940ef6c881",
          "SecurityGroup" : "a4ef108c-2ec6-492f-a6c4-7b64e25ae490"
        },
        "containerNetwork" : {
          "mode" : "vpc-router",
          "cidr" : "10.0.0.0/16"
        },
        "kubernetesSvcIpRange" : "10.247.0.0/16",
        "description" : "",
        "billingMode" : 0,
        "extendParam" : {
          "kubeProxyMode" : "iptables",
          "alpha.cce/fixPoolMask" : "25",
          "enterpriseProjectId" : "0"
        },
        "authentication" : {
          "mode" : "rbac"
        },
        "ipv6enable" : false
      }
    }
  • 创建一个v1.25版本的CCE Turbo集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

    /api/v3/projects/{project_id}/clusters
    
    {
      "kind" : "Cluster",
      "apiVersion" : "v3",
      "metadata" : {
        "name" : "cluster"
      },
      "spec" : {
        "category" : "Turbo",
        "flavor" : "cce.s2.small",
        "version" : "v1.25",
        "type" : "VirtualMachine",
        "hostNetwork" : {
          "vpc" : "030bfb19-5fa7-42ad-8a0d-c0721d268867",
          "subnet" : "ca964acf-8468-4735-8229-97940ef6c881"
        },
        "containerNetwork" : {
          "mode" : "eni"
        },
        "eniNetwork" : {
          "eniSubnetId" : "861fb11d-2f0e-4c10-a98a-166dc26e4ff7",
          "eniSubnetCIDR" : "192.168.0.0/24",
          "subnets" : [ {
            "subnetID" : "861fb11d-2f0e-4c10-a98a-166dc26e4ff7"
          } ]
        },
        "serviceNetwork" : {
          "IPv4CIDR" : "10.247.0.0/16"
        },
        "description" : "",
        "billingMode" : 0,
        "extendParam" : {
          "kubeProxyMode" : "iptables",
          "enterpriseProjectId" : "0"
        },
        "authentication" : {
          "mode" : "rbac"
        },
        "ipv6enable" : false
      }
    }
  • 创建集群时配置允许访问集群API白名单网段

    /api/v3/projects/{project_id}/clusters
    
    {
      "kind" : "Cluster",
      "apiVersion" : "v3",
      "metadata" : {
        "name" : "cluster"
      },
      "spec" : {
        "category" : "CCE",
        "flavor" : "cce.s2.small",
        "version" : "v1.19",
        "hostNetwork" : {
          "vpc" : "030bfb19-5fa7-42ad-8a0d-c0721d268867",
          "subnet" : "ca964acf-8468-4735-8229-97940ef6c881"
        },
        "publicAccess" : {
          "cidrs" : [ "192.168.0.0/16" ]
        },
        "containerNetwork" : {
          "mode" : "vpc-router",
          "cidr" : "10.0.0.0/16"
        },
        "serviceNetwork" : {
          "IPv4CIDR" : "10.247.0.0/16",
          "IPv6CIDR" : "fc00::/112"
        },
        "kubernetesSvcIpRange" : "10.247.0.0/16",
        "description" : "",
        "billingMode" : 0,
        "extendParam" : {
          "kubeProxyMode" : "iptables",
          "alpha.cce/fixPoolMask" : "25",
          "enterpriseProjectId" : "0"
        },
        "authentication" : {
          "mode" : "rbac"
        },
        "ipv6enable" : false
      }
    }

响应示例

状态码: 201

表示创建集群作业下发成功。

{
  "kind" : "Cluster",
  "apiVersion" : "v3",
  "metadata" : {
    "name" : "cluster",
    "uid" : "1df09f9a-5b9e-11ef-8f52-0255ac10003e",
    "creationTimestamp" : "2024-08-16 07:06:53.704389459 +0000 UTC",
    "updateTimestamp" : "2024-08-16 07:06:53.704389529 +0000 UTC",
    "annotations" : {
      "jobid" : "1e50bfbe-5b9e-11ef-8f52-0255ac10003e",
      "resourceJobId" : "1df0ec6b-5b9e-11ef-8f52-0255ac10003e"
    },
    "timezone" : "Asia/Shanghai"
  },
  "spec" : {
    "publicAccess" : { },
    "category" : "CCE",
    "type" : "VirtualMachine",
    "enableAutopilot" : false,
    "flavor" : "cce.s1.small",
    "version" : "v1.29",
    "platformVersion" : "cce.4.0",
    "configurationsOverride" : [ {
      "name" : "kube-apiserver",
      "configurations" : [ {
        "name" : "support-overload",
        "value" : true
      } ]
    } ],
    "hostNetwork" : {
      "vpc" : "0538a5d0-9a65-4c1d-a8bf-e9acee237980",
      "subnet" : "bc81be88-6e34-4b02-83bd-df0a1f7672c5"
    },
    "containerNetwork" : {
      "mode" : "vpc-router",
      "cidr" : "172.17.0.0/16",
      "cidrs" : [ {
        "cidr" : "172.17.0.0/16"
      } ]
    },
    "eniNetwork" : { },
    "serviceNetwork" : {
      "IPv4CIDR" : "10.247.0.0/16"
    },
    "authentication" : {
      "mode" : "rbac",
      "authenticatingProxy" : { }
    },
    "billingMode" : 0,
    "kubernetesSvcIpRange" : "10.247.0.0/16",
    "kubeProxyMode" : "iptables",
    "extendParam" : {
      "alpha.cce/fixPoolMask" : "25",
      "enterpriseProjectId" : "0",
      "orderID" : ""
    }
  },
  "status" : {
    "phase" : "Creating",
    "jobID" : "1e50bfbe-5b9e-11ef-8f52-0255ac10003e"
  }
}

SDK代码示例

SDK代码示例如下。

  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.cce.v3.region.CceRegion;
    import com.huaweicloud.sdk.cce.v3.*;
    import com.huaweicloud.sdk.cce.v3.model.*;
    
    
    public class CreateClusterSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    .withAk(ak)
                    .withSk(sk);
    
            CceClient client = CceClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(CceRegion.valueOf("<YOUR REGION>"))
                    .build();
            CreateClusterRequest request = new CreateClusterRequest();
            Cluster body = new Cluster();
            ClusterExtendParam extendParamSpec = new ClusterExtendParam();
            extendParamSpec.withEnterpriseProjectId("0")
                .withKubeProxyMode("iptables")
                .withAlphaCceFixPoolMask("25");
            Authentication authenticationSpec = new Authentication();
            authenticationSpec.withMode("rbac");
            ContainerNetwork containerNetworkSpec = new ContainerNetwork();
            containerNetworkSpec.withMode(ContainerNetwork.ModeEnum.fromValue("vpc-router"))
                .withCidr("10.0.0.0/16");
            HostNetwork hostNetworkSpec = new HostNetwork();
            hostNetworkSpec.withVpc("030bfb19-5fa7-42ad-8a0d-c0721d268867")
                .withSubnet("ca964acf-8468-4735-8229-97940ef6c881");
            ClusterSpec specbody = new ClusterSpec();
            specbody.withCategory(ClusterSpec.CategoryEnum.fromValue("CCE"))
                .withFlavor("cce.s2.small")
                .withVersion("v1.29")
                .withDescription("")
                .withIpv6enable(false)
                .withHostNetwork(hostNetworkSpec)
                .withContainerNetwork(containerNetworkSpec)
                .withAuthentication(authenticationSpec)
                .withBillingMode(0)
                .withKubernetesSvcIpRange("10.247.0.0/16")
                .withExtendParam(extendParamSpec);
            ClusterMetadata metadatabody = new ClusterMetadata();
            metadatabody.withName("cluster");
            body.withSpec(specbody);
            body.withMetadata(metadatabody);
            body.withApiVersion("v3");
            body.withKind("Cluster");
            request.withBody(body);
            try {
                CreateClusterResponse response = client.createCluster(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并在集群中安装ICAgent。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.cce.v3.region.CceRegion;
    import com.huaweicloud.sdk.cce.v3.*;
    import com.huaweicloud.sdk.cce.v3.model.*;
    
    import java.util.Map;
    import java.util.HashMap;
    
    public class CreateClusterSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    .withAk(ak)
                    .withSk(sk);
    
            CceClient client = CceClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(CceRegion.valueOf("<YOUR REGION>"))
                    .build();
            CreateClusterRequest request = new CreateClusterRequest();
            Cluster body = new Cluster();
            ClusterExtendParam extendParamSpec = new ClusterExtendParam();
            extendParamSpec.withEnterpriseProjectId("0")
                .withKubeProxyMode("iptables")
                .withAlphaCceFixPoolMask("25");
            Authentication authenticationSpec = new Authentication();
            authenticationSpec.withMode("rbac");
            ContainerNetwork containerNetworkSpec = new ContainerNetwork();
            containerNetworkSpec.withMode(ContainerNetwork.ModeEnum.fromValue("vpc-router"))
                .withCidr("10.0.0.0/16");
            HostNetwork hostNetworkSpec = new HostNetwork();
            hostNetworkSpec.withVpc("030bfb19-5fa7-42ad-8a0d-c0721d268867")
                .withSubnet("ca964acf-8468-4735-8229-97940ef6c881");
            ClusterSpec specbody = new ClusterSpec();
            specbody.withCategory(ClusterSpec.CategoryEnum.fromValue("CCE"))
                .withFlavor("cce.s2.small")
                .withVersion("v1.29")
                .withDescription("")
                .withIpv6enable(false)
                .withHostNetwork(hostNetworkSpec)
                .withContainerNetwork(containerNetworkSpec)
                .withAuthentication(authenticationSpec)
                .withBillingMode(0)
                .withKubernetesSvcIpRange("10.247.0.0/16")
                .withExtendParam(extendParamSpec);
            Map<String, String> listMetadataAnnotations = new HashMap<>();
            listMetadataAnnotations.put("cluster.install.addons.external/install", "[{"addonTemplateName":"icagent"}]");
            ClusterMetadata metadatabody = new ClusterMetadata();
            metadatabody.withName("cluster")
                .withAnnotations(listMetadataAnnotations);
            body.withSpec(specbody);
            body.withMetadata(metadatabody);
            body.withApiVersion("v3");
            body.withKind("Cluster");
            request.withBody(body);
            try {
                CreateClusterResponse response = client.createCluster(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并指定自定义的节点默认安全组。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.cce.v3.region.CceRegion;
    import com.huaweicloud.sdk.cce.v3.*;
    import com.huaweicloud.sdk.cce.v3.model.*;
    
    
    public class CreateClusterSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    .withAk(ak)
                    .withSk(sk);
    
            CceClient client = CceClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(CceRegion.valueOf("<YOUR REGION>"))
                    .build();
            CreateClusterRequest request = new CreateClusterRequest();
            Cluster body = new Cluster();
            ClusterExtendParam extendParamSpec = new ClusterExtendParam();
            extendParamSpec.withEnterpriseProjectId("0")
                .withKubeProxyMode("iptables")
                .withAlphaCceFixPoolMask("25");
            Authentication authenticationSpec = new Authentication();
            authenticationSpec.withMode("rbac");
            ContainerNetwork containerNetworkSpec = new ContainerNetwork();
            containerNetworkSpec.withMode(ContainerNetwork.ModeEnum.fromValue("vpc-router"))
                .withCidr("10.0.0.0/16");
            HostNetwork hostNetworkSpec = new HostNetwork();
            hostNetworkSpec.withVpc("030bfb19-5fa7-42ad-8a0d-c0721d268867")
                .withSubnet("ca964acf-8468-4735-8229-97940ef6c881")
                .withSecurityGroup("a4ef108c-2ec6-492f-a6c4-7b64e25ae490");
            ClusterSpec specbody = new ClusterSpec();
            specbody.withCategory(ClusterSpec.CategoryEnum.fromValue("CCE"))
                .withFlavor("cce.s2.small")
                .withVersion("v1.29")
                .withDescription("")
                .withIpv6enable(false)
                .withHostNetwork(hostNetworkSpec)
                .withContainerNetwork(containerNetworkSpec)
                .withAuthentication(authenticationSpec)
                .withBillingMode(0)
                .withKubernetesSvcIpRange("10.247.0.0/16")
                .withExtendParam(extendParamSpec);
            ClusterMetadata metadatabody = new ClusterMetadata();
            metadatabody.withName("cluster");
            body.withSpec(specbody);
            body.withMetadata(metadatabody);
            body.withApiVersion("v3");
            body.withKind("Cluster");
            request.withBody(body);
            try {
                CreateClusterResponse response = client.createCluster(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建一个v1.25版本的CCE Turbo集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.cce.v3.region.CceRegion;
    import com.huaweicloud.sdk.cce.v3.*;
    import com.huaweicloud.sdk.cce.v3.model.*;
    
    import java.util.List;
    import java.util.ArrayList;
    
    public class CreateClusterSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    .withAk(ak)
                    .withSk(sk);
    
            CceClient client = CceClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(CceRegion.valueOf("<YOUR REGION>"))
                    .build();
            CreateClusterRequest request = new CreateClusterRequest();
            Cluster body = new Cluster();
            ClusterExtendParam extendParamSpec = new ClusterExtendParam();
            extendParamSpec.withEnterpriseProjectId("0")
                .withKubeProxyMode("iptables");
            Authentication authenticationSpec = new Authentication();
            authenticationSpec.withMode("rbac");
            ServiceNetwork serviceNetworkSpec = new ServiceNetwork();
            serviceNetworkSpec.withIpv4CIDR("10.247.0.0/16");
            List<NetworkSubnet> listEniNetworkSubnets = new ArrayList<>();
            listEniNetworkSubnets.add(
                new NetworkSubnet()
                    .withSubnetID("861fb11d-2f0e-4c10-a98a-166dc26e4ff7")
            );
            EniNetwork eniNetworkSpec = new EniNetwork();
            eniNetworkSpec.withEniSubnetId("861fb11d-2f0e-4c10-a98a-166dc26e4ff7")
                .withEniSubnetCIDR("192.168.0.0/24")
                .withSubnets(listEniNetworkSubnets);
            ContainerNetwork containerNetworkSpec = new ContainerNetwork();
            containerNetworkSpec.withMode(ContainerNetwork.ModeEnum.fromValue("eni"));
            HostNetwork hostNetworkSpec = new HostNetwork();
            hostNetworkSpec.withVpc("030bfb19-5fa7-42ad-8a0d-c0721d268867")
                .withSubnet("ca964acf-8468-4735-8229-97940ef6c881");
            ClusterSpec specbody = new ClusterSpec();
            specbody.withCategory(ClusterSpec.CategoryEnum.fromValue("Turbo"))
                .withType(ClusterSpec.TypeEnum.fromValue("VirtualMachine"))
                .withFlavor("cce.s2.small")
                .withVersion("v1.25")
                .withDescription("")
                .withIpv6enable(false)
                .withHostNetwork(hostNetworkSpec)
                .withContainerNetwork(containerNetworkSpec)
                .withEniNetwork(eniNetworkSpec)
                .withServiceNetwork(serviceNetworkSpec)
                .withAuthentication(authenticationSpec)
                .withBillingMode(0)
                .withExtendParam(extendParamSpec);
            ClusterMetadata metadatabody = new ClusterMetadata();
            metadatabody.withName("cluster");
            body.withSpec(specbody);
            body.withMetadata(metadatabody);
            body.withApiVersion("v3");
            body.withKind("Cluster");
            request.withBody(body);
            try {
                CreateClusterResponse response = client.createCluster(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建集群时配置允许访问集群API白名单网段

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.BasicCredentials;
    import com.huaweicloud.sdk.core.exception.ConnectionException;
    import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
    import com.huaweicloud.sdk.core.exception.ServiceResponseException;
    import com.huaweicloud.sdk.cce.v3.region.CceRegion;
    import com.huaweicloud.sdk.cce.v3.*;
    import com.huaweicloud.sdk.cce.v3.model.*;
    
    
    public class CreateClusterSolution {
    
        public static void main(String[] args) {
            // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
            // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
            String ak = System.getenv("CLOUD_SDK_AK");
            String sk = System.getenv("CLOUD_SDK_SK");
            String projectId = "{project_id}";
    
            ICredential auth = new BasicCredentials()
                    .withProjectId(projectId)
                    .withAk(ak)
                    .withSk(sk);
    
            CceClient client = CceClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(CceRegion.valueOf("<YOUR REGION>"))
                    .build();
            CreateClusterRequest request = new CreateClusterRequest();
            Cluster body = new Cluster();
            ClusterExtendParam extendParamSpec = new ClusterExtendParam();
            extendParamSpec.withEnterpriseProjectId("0")
                .withKubeProxyMode("iptables")
                .withAlphaCceFixPoolMask("25");
            Authentication authenticationSpec = new Authentication();
            authenticationSpec.withMode("rbac");
            ServiceNetwork serviceNetworkSpec = new ServiceNetwork();
            serviceNetworkSpec.withIpv4CIDR("10.247.0.0/16");
            ContainerNetwork containerNetworkSpec = new ContainerNetwork();
            containerNetworkSpec.withMode(ContainerNetwork.ModeEnum.fromValue("vpc-router"))
                .withCidr("10.0.0.0/16");
            HostNetwork hostNetworkSpec = new HostNetwork();
            hostNetworkSpec.withVpc("030bfb19-5fa7-42ad-8a0d-c0721d268867")
                .withSubnet("ca964acf-8468-4735-8229-97940ef6c881");
            ClusterSpec specbody = new ClusterSpec();
            specbody.withCategory(ClusterSpec.CategoryEnum.fromValue("CCE"))
                .withFlavor("cce.s2.small")
                .withVersion("v1.19")
                .withDescription("")
                .withIpv6enable(false)
                .withHostNetwork(hostNetworkSpec)
                .withContainerNetwork(containerNetworkSpec)
                .withServiceNetwork(serviceNetworkSpec)
                .withAuthentication(authenticationSpec)
                .withBillingMode(0)
                .withKubernetesSvcIpRange("10.247.0.0/16")
                .withExtendParam(extendParamSpec);
            ClusterMetadata metadatabody = new ClusterMetadata();
            metadatabody.withName("cluster");
            body.withSpec(specbody);
            body.withMetadata(metadatabody);
            body.withApiVersion("v3");
            body.withKind("Cluster");
            request.withBody(body);
            try {
                CreateClusterResponse response = client.createCluster(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcce.v3.region.cce_region import CceRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkcce.v3 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId)
    
        client = CceClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(CceRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = CreateClusterRequest()
            extendParamSpec = ClusterExtendParam(
                enterprise_project_id="0",
                kube_proxy_mode="iptables",
                alpha_cce_fix_pool_mask="25"
            )
            authenticationSpec = Authentication(
                mode="rbac"
            )
            containerNetworkSpec = ContainerNetwork(
                mode="vpc-router",
                cidr="10.0.0.0/16"
            )
            hostNetworkSpec = HostNetwork(
                vpc="030bfb19-5fa7-42ad-8a0d-c0721d268867",
                subnet="ca964acf-8468-4735-8229-97940ef6c881"
            )
            specbody = ClusterSpec(
                category="CCE",
                flavor="cce.s2.small",
                version="v1.29",
                description="",
                ipv6enable=False,
                host_network=hostNetworkSpec,
                container_network=containerNetworkSpec,
                authentication=authenticationSpec,
                billing_mode=0,
                kubernetes_svc_ip_range="10.247.0.0/16",
                extend_param=extendParamSpec
            )
            metadatabody = ClusterMetadata(
                name="cluster"
            )
            request.body = Cluster(
                spec=specbody,
                metadata=metadatabody,
                api_version="v3",
                kind="Cluster"
            )
            response = client.create_cluster(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并在集群中安装ICAgent。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcce.v3.region.cce_region import CceRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkcce.v3 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId)
    
        client = CceClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(CceRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = CreateClusterRequest()
            extendParamSpec = ClusterExtendParam(
                enterprise_project_id="0",
                kube_proxy_mode="iptables",
                alpha_cce_fix_pool_mask="25"
            )
            authenticationSpec = Authentication(
                mode="rbac"
            )
            containerNetworkSpec = ContainerNetwork(
                mode="vpc-router",
                cidr="10.0.0.0/16"
            )
            hostNetworkSpec = HostNetwork(
                vpc="030bfb19-5fa7-42ad-8a0d-c0721d268867",
                subnet="ca964acf-8468-4735-8229-97940ef6c881"
            )
            specbody = ClusterSpec(
                category="CCE",
                flavor="cce.s2.small",
                version="v1.29",
                description="",
                ipv6enable=False,
                host_network=hostNetworkSpec,
                container_network=containerNetworkSpec,
                authentication=authenticationSpec,
                billing_mode=0,
                kubernetes_svc_ip_range="10.247.0.0/16",
                extend_param=extendParamSpec
            )
            listAnnotationsMetadata = {
                "cluster.install.addons.external/install": "[{"addonTemplateName":"icagent"}]"
            }
            metadatabody = ClusterMetadata(
                name="cluster",
                annotations=listAnnotationsMetadata
            )
            request.body = Cluster(
                spec=specbody,
                metadata=metadatabody,
                api_version="v3",
                kind="Cluster"
            )
            response = client.create_cluster(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并指定自定义的节点默认安全组。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcce.v3.region.cce_region import CceRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkcce.v3 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId)
    
        client = CceClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(CceRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = CreateClusterRequest()
            extendParamSpec = ClusterExtendParam(
                enterprise_project_id="0",
                kube_proxy_mode="iptables",
                alpha_cce_fix_pool_mask="25"
            )
            authenticationSpec = Authentication(
                mode="rbac"
            )
            containerNetworkSpec = ContainerNetwork(
                mode="vpc-router",
                cidr="10.0.0.0/16"
            )
            hostNetworkSpec = HostNetwork(
                vpc="030bfb19-5fa7-42ad-8a0d-c0721d268867",
                subnet="ca964acf-8468-4735-8229-97940ef6c881",
                security_group="a4ef108c-2ec6-492f-a6c4-7b64e25ae490"
            )
            specbody = ClusterSpec(
                category="CCE",
                flavor="cce.s2.small",
                version="v1.29",
                description="",
                ipv6enable=False,
                host_network=hostNetworkSpec,
                container_network=containerNetworkSpec,
                authentication=authenticationSpec,
                billing_mode=0,
                kubernetes_svc_ip_range="10.247.0.0/16",
                extend_param=extendParamSpec
            )
            metadatabody = ClusterMetadata(
                name="cluster"
            )
            request.body = Cluster(
                spec=specbody,
                metadata=metadatabody,
                api_version="v3",
                kind="Cluster"
            )
            response = client.create_cluster(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建一个v1.25版本的CCE Turbo集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcce.v3.region.cce_region import CceRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkcce.v3 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId)
    
        client = CceClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(CceRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = CreateClusterRequest()
            extendParamSpec = ClusterExtendParam(
                enterprise_project_id="0",
                kube_proxy_mode="iptables"
            )
            authenticationSpec = Authentication(
                mode="rbac"
            )
            serviceNetworkSpec = ServiceNetwork(
                i_pv4_cidr="10.247.0.0/16"
            )
            listSubnetsEniNetwork = [
                NetworkSubnet(
                    subnet_id="861fb11d-2f0e-4c10-a98a-166dc26e4ff7"
                )
            ]
            eniNetworkSpec = EniNetwork(
                eni_subnet_id="861fb11d-2f0e-4c10-a98a-166dc26e4ff7",
                eni_subnet_cidr="192.168.0.0/24",
                subnets=listSubnetsEniNetwork
            )
            containerNetworkSpec = ContainerNetwork(
                mode="eni"
            )
            hostNetworkSpec = HostNetwork(
                vpc="030bfb19-5fa7-42ad-8a0d-c0721d268867",
                subnet="ca964acf-8468-4735-8229-97940ef6c881"
            )
            specbody = ClusterSpec(
                category="Turbo",
                type="VirtualMachine",
                flavor="cce.s2.small",
                version="v1.25",
                description="",
                ipv6enable=False,
                host_network=hostNetworkSpec,
                container_network=containerNetworkSpec,
                eni_network=eniNetworkSpec,
                service_network=serviceNetworkSpec,
                authentication=authenticationSpec,
                billing_mode=0,
                extend_param=extendParamSpec
            )
            metadatabody = ClusterMetadata(
                name="cluster"
            )
            request.body = Cluster(
                spec=specbody,
                metadata=metadatabody,
                api_version="v3",
                kind="Cluster"
            )
            response = client.create_cluster(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建集群时配置允许访问集群API白名单网段

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import BasicCredentials
    from huaweicloudsdkcce.v3.region.cce_region import CceRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdkcce.v3 import *
    
    if __name__ == "__main__":
        # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak = os.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
        projectId = "{project_id}"
    
        credentials = BasicCredentials(ak, sk, projectId)
    
        client = CceClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(CceRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = CreateClusterRequest()
            extendParamSpec = ClusterExtendParam(
                enterprise_project_id="0",
                kube_proxy_mode="iptables",
                alpha_cce_fix_pool_mask="25"
            )
            authenticationSpec = Authentication(
                mode="rbac"
            )
            serviceNetworkSpec = ServiceNetwork(
                i_pv4_cidr="10.247.0.0/16"
            )
            containerNetworkSpec = ContainerNetwork(
                mode="vpc-router",
                cidr="10.0.0.0/16"
            )
            hostNetworkSpec = HostNetwork(
                vpc="030bfb19-5fa7-42ad-8a0d-c0721d268867",
                subnet="ca964acf-8468-4735-8229-97940ef6c881"
            )
            specbody = ClusterSpec(
                category="CCE",
                flavor="cce.s2.small",
                version="v1.19",
                description="",
                ipv6enable=False,
                host_network=hostNetworkSpec,
                container_network=containerNetworkSpec,
                service_network=serviceNetworkSpec,
                authentication=authenticationSpec,
                billing_mode=0,
                kubernetes_svc_ip_range="10.247.0.0/16",
                extend_param=extendParamSpec
            )
            metadatabody = ClusterMetadata(
                name="cluster"
            )
            request.body = Cluster(
                spec=specbody,
                metadata=metadatabody,
                api_version="v3",
                kind="Cluster"
            )
            response = client.create_cluster(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            Build()
    
        client := cce.NewCceClient(
            cce.CceClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.CreateClusterRequest{}
    	enterpriseProjectIdExtendParam:= "0"
    	kubeProxyModeExtendParam:= "iptables"
    	alphaCceFixPoolMaskExtendParam:= "25"
    	extendParamSpec := &model.ClusterExtendParam{
    		EnterpriseProjectId: &enterpriseProjectIdExtendParam,
    		KubeProxyMode: &kubeProxyModeExtendParam,
    		AlphaCceFixPoolMask: &alphaCceFixPoolMaskExtendParam,
    	}
    	modeAuthentication:= "rbac"
    	authenticationSpec := &model.Authentication{
    		Mode: &modeAuthentication,
    	}
    	cidrContainerNetwork:= "10.0.0.0/16"
    	containerNetworkSpec := &model.ContainerNetwork{
    		Mode: model.GetContainerNetworkModeEnum().VPC_ROUTER,
    		Cidr: &cidrContainerNetwork,
    	}
    	hostNetworkSpec := &model.HostNetwork{
    		Vpc: "030bfb19-5fa7-42ad-8a0d-c0721d268867",
    		Subnet: "ca964acf-8468-4735-8229-97940ef6c881",
    	}
    	categorySpec:= model.GetClusterSpecCategoryEnum().CCE
    	versionSpec:= "v1.29"
    	descriptionSpec:= ""
    	ipv6enableSpec:= false
    	billingModeSpec:= int32(0)
    	kubernetesSvcIpRangeSpec:= "10.247.0.0/16"
    	specbody := &model.ClusterSpec{
    		Category: &categorySpec,
    		Flavor: "cce.s2.small",
    		Version: &versionSpec,
    		Description: &descriptionSpec,
    		Ipv6enable: &ipv6enableSpec,
    		HostNetwork: hostNetworkSpec,
    		ContainerNetwork: containerNetworkSpec,
    		Authentication: authenticationSpec,
    		BillingMode: &billingModeSpec,
    		KubernetesSvcIpRange: &kubernetesSvcIpRangeSpec,
    		ExtendParam: extendParamSpec,
    	}
    	metadatabody := &model.ClusterMetadata{
    		Name: "cluster",
    	}
    	request.Body = &model.Cluster{
    		Spec: specbody,
    		Metadata: metadatabody,
    		ApiVersion: "v3",
    		Kind: "Cluster",
    	}
    	response, err := client.CreateCluster(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并在集群中安装ICAgent。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            Build()
    
        client := cce.NewCceClient(
            cce.CceClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.CreateClusterRequest{}
    	enterpriseProjectIdExtendParam:= "0"
    	kubeProxyModeExtendParam:= "iptables"
    	alphaCceFixPoolMaskExtendParam:= "25"
    	extendParamSpec := &model.ClusterExtendParam{
    		EnterpriseProjectId: &enterpriseProjectIdExtendParam,
    		KubeProxyMode: &kubeProxyModeExtendParam,
    		AlphaCceFixPoolMask: &alphaCceFixPoolMaskExtendParam,
    	}
    	modeAuthentication:= "rbac"
    	authenticationSpec := &model.Authentication{
    		Mode: &modeAuthentication,
    	}
    	cidrContainerNetwork:= "10.0.0.0/16"
    	containerNetworkSpec := &model.ContainerNetwork{
    		Mode: model.GetContainerNetworkModeEnum().VPC_ROUTER,
    		Cidr: &cidrContainerNetwork,
    	}
    	hostNetworkSpec := &model.HostNetwork{
    		Vpc: "030bfb19-5fa7-42ad-8a0d-c0721d268867",
    		Subnet: "ca964acf-8468-4735-8229-97940ef6c881",
    	}
    	categorySpec:= model.GetClusterSpecCategoryEnum().CCE
    	versionSpec:= "v1.29"
    	descriptionSpec:= ""
    	ipv6enableSpec:= false
    	billingModeSpec:= int32(0)
    	kubernetesSvcIpRangeSpec:= "10.247.0.0/16"
    	specbody := &model.ClusterSpec{
    		Category: &categorySpec,
    		Flavor: "cce.s2.small",
    		Version: &versionSpec,
    		Description: &descriptionSpec,
    		Ipv6enable: &ipv6enableSpec,
    		HostNetwork: hostNetworkSpec,
    		ContainerNetwork: containerNetworkSpec,
    		Authentication: authenticationSpec,
    		BillingMode: &billingModeSpec,
    		KubernetesSvcIpRange: &kubernetesSvcIpRangeSpec,
    		ExtendParam: extendParamSpec,
    	}
    	var listAnnotationsMetadata = map[string]string{
            "cluster.install.addons.external/install": "[{"addonTemplateName":"icagent"}]",
        }
    	metadatabody := &model.ClusterMetadata{
    		Name: "cluster",
    		Annotations: listAnnotationsMetadata,
    	}
    	request.Body = &model.Cluster{
    		Spec: specbody,
    		Metadata: metadatabody,
    		ApiVersion: "v3",
    		Kind: "Cluster",
    	}
    	response, err := client.CreateCluster(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • 创建一个v1.29版本的CCE集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群,并指定自定义的节点默认安全组。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            Build()
    
        client := cce.NewCceClient(
            cce.CceClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.CreateClusterRequest{}
    	enterpriseProjectIdExtendParam:= "0"
    	kubeProxyModeExtendParam:= "iptables"
    	alphaCceFixPoolMaskExtendParam:= "25"
    	extendParamSpec := &model.ClusterExtendParam{
    		EnterpriseProjectId: &enterpriseProjectIdExtendParam,
    		KubeProxyMode: &kubeProxyModeExtendParam,
    		AlphaCceFixPoolMask: &alphaCceFixPoolMaskExtendParam,
    	}
    	modeAuthentication:= "rbac"
    	authenticationSpec := &model.Authentication{
    		Mode: &modeAuthentication,
    	}
    	cidrContainerNetwork:= "10.0.0.0/16"
    	containerNetworkSpec := &model.ContainerNetwork{
    		Mode: model.GetContainerNetworkModeEnum().VPC_ROUTER,
    		Cidr: &cidrContainerNetwork,
    	}
    	securityGroupHostNetwork:= "a4ef108c-2ec6-492f-a6c4-7b64e25ae490"
    	hostNetworkSpec := &model.HostNetwork{
    		Vpc: "030bfb19-5fa7-42ad-8a0d-c0721d268867",
    		Subnet: "ca964acf-8468-4735-8229-97940ef6c881",
    		SecurityGroup: &securityGroupHostNetwork,
    	}
    	categorySpec:= model.GetClusterSpecCategoryEnum().CCE
    	versionSpec:= "v1.29"
    	descriptionSpec:= ""
    	ipv6enableSpec:= false
    	billingModeSpec:= int32(0)
    	kubernetesSvcIpRangeSpec:= "10.247.0.0/16"
    	specbody := &model.ClusterSpec{
    		Category: &categorySpec,
    		Flavor: "cce.s2.small",
    		Version: &versionSpec,
    		Description: &descriptionSpec,
    		Ipv6enable: &ipv6enableSpec,
    		HostNetwork: hostNetworkSpec,
    		ContainerNetwork: containerNetworkSpec,
    		Authentication: authenticationSpec,
    		BillingMode: &billingModeSpec,
    		KubernetesSvcIpRange: &kubernetesSvcIpRangeSpec,
    		ExtendParam: extendParamSpec,
    	}
    	metadatabody := &model.ClusterMetadata{
    		Name: "cluster",
    	}
    	request.Body = &model.Cluster{
    		Spec: specbody,
    		Metadata: metadatabody,
    		ApiVersion: "v3",
    		Kind: "Cluster",
    	}
    	response, err := client.CreateCluster(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • 创建一个v1.25版本的CCE Turbo集群,计费模式为按需计费,集群规模为50节点,且为三控制节点高可用集群。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            Build()
    
        client := cce.NewCceClient(
            cce.CceClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.CreateClusterRequest{}
    	enterpriseProjectIdExtendParam:= "0"
    	kubeProxyModeExtendParam:= "iptables"
    	extendParamSpec := &model.ClusterExtendParam{
    		EnterpriseProjectId: &enterpriseProjectIdExtendParam,
    		KubeProxyMode: &kubeProxyModeExtendParam,
    	}
    	modeAuthentication:= "rbac"
    	authenticationSpec := &model.Authentication{
    		Mode: &modeAuthentication,
    	}
    	iPv4CIDRServiceNetwork:= "10.247.0.0/16"
    	serviceNetworkSpec := &model.ServiceNetwork{
    		IPv4CIDR: &iPv4CIDRServiceNetwork,
    	}
    	var listSubnetsEniNetwork = []model.NetworkSubnet{
            {
                SubnetID: "861fb11d-2f0e-4c10-a98a-166dc26e4ff7",
            },
        }
    	eniSubnetCIDREniNetwork:= "192.168.0.0/24"
    	eniNetworkSpec := &model.EniNetwork{
    		EniSubnetId: "861fb11d-2f0e-4c10-a98a-166dc26e4ff7",
    		EniSubnetCIDR: &eniSubnetCIDREniNetwork,
    		Subnets: listSubnetsEniNetwork,
    	}
    	containerNetworkSpec := &model.ContainerNetwork{
    		Mode: model.GetContainerNetworkModeEnum().ENI,
    	}
    	hostNetworkSpec := &model.HostNetwork{
    		Vpc: "030bfb19-5fa7-42ad-8a0d-c0721d268867",
    		Subnet: "ca964acf-8468-4735-8229-97940ef6c881",
    	}
    	categorySpec:= model.GetClusterSpecCategoryEnum().TURBO
    	typeSpec:= model.GetClusterSpecTypeEnum().VIRTUAL_MACHINE
    	versionSpec:= "v1.25"
    	descriptionSpec:= ""
    	ipv6enableSpec:= false
    	billingModeSpec:= int32(0)
    	specbody := &model.ClusterSpec{
    		Category: &categorySpec,
    		Type: &typeSpec,
    		Flavor: "cce.s2.small",
    		Version: &versionSpec,
    		Description: &descriptionSpec,
    		Ipv6enable: &ipv6enableSpec,
    		HostNetwork: hostNetworkSpec,
    		ContainerNetwork: containerNetworkSpec,
    		EniNetwork: eniNetworkSpec,
    		ServiceNetwork: serviceNetworkSpec,
    		Authentication: authenticationSpec,
    		BillingMode: &billingModeSpec,
    		ExtendParam: extendParamSpec,
    	}
    	metadatabody := &model.ClusterMetadata{
    		Name: "cluster",
    	}
    	request.Body = &model.Cluster{
    		Spec: specbody,
    		Metadata: metadatabody,
    		ApiVersion: "v3",
    		Kind: "Cluster",
    	}
    	response, err := client.CreateCluster(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • 创建集群时配置允许访问集群API白名单网段

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        cce "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/region"
    )
    
    func main() {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        ak := os.Getenv("CLOUD_SDK_AK")
        sk := os.Getenv("CLOUD_SDK_SK")
        projectId := "{project_id}"
    
        auth := basic.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            WithProjectId(projectId).
            Build()
    
        client := cce.NewCceClient(
            cce.CceClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.CreateClusterRequest{}
    	enterpriseProjectIdExtendParam:= "0"
    	kubeProxyModeExtendParam:= "iptables"
    	alphaCceFixPoolMaskExtendParam:= "25"
    	extendParamSpec := &model.ClusterExtendParam{
    		EnterpriseProjectId: &enterpriseProjectIdExtendParam,
    		KubeProxyMode: &kubeProxyModeExtendParam,
    		AlphaCceFixPoolMask: &alphaCceFixPoolMaskExtendParam,
    	}
    	modeAuthentication:= "rbac"
    	authenticationSpec := &model.Authentication{
    		Mode: &modeAuthentication,
    	}
    	iPv4CIDRServiceNetwork:= "10.247.0.0/16"
    	serviceNetworkSpec := &model.ServiceNetwork{
    		IPv4CIDR: &iPv4CIDRServiceNetwork,
    	}
    	cidrContainerNetwork:= "10.0.0.0/16"
    	containerNetworkSpec := &model.ContainerNetwork{
    		Mode: model.GetContainerNetworkModeEnum().VPC_ROUTER,
    		Cidr: &cidrContainerNetwork,
    	}
    	hostNetworkSpec := &model.HostNetwork{
    		Vpc: "030bfb19-5fa7-42ad-8a0d-c0721d268867",
    		Subnet: "ca964acf-8468-4735-8229-97940ef6c881",
    	}
    	categorySpec:= model.GetClusterSpecCategoryEnum().CCE
    	versionSpec:= "v1.19"
    	descriptionSpec:= ""
    	ipv6enableSpec:= false
    	billingModeSpec:= int32(0)
    	kubernetesSvcIpRangeSpec:= "10.247.0.0/16"
    	specbody := &model.ClusterSpec{
    		Category: &categorySpec,
    		Flavor: "cce.s2.small",
    		Version: &versionSpec,
    		Description: &descriptionSpec,
    		Ipv6enable: &ipv6enableSpec,
    		HostNetwork: hostNetworkSpec,
    		ContainerNetwork: containerNetworkSpec,
    		ServiceNetwork: serviceNetworkSpec,
    		Authentication: authenticationSpec,
    		BillingMode: &billingModeSpec,
    		KubernetesSvcIpRange: &kubernetesSvcIpRangeSpec,
    		ExtendParam: extendParamSpec,
    	}
    	metadatabody := &model.ClusterMetadata{
    		Name: "cluster",
    	}
    	request.Body = &model.Cluster{
    		Spec: specbody,
    		Metadata: metadatabody,
    		ApiVersion: "v3",
    		Kind: "Cluster",
    	}
    	response, err := client.CreateCluster(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

201

表示创建集群作业下发成功。

错误码

请参见错误码