全部產品
Search
文件中心

Container Service for Kubernetes:通過OpenAPI建立ACK託管叢集

更新時間:Dec 07, 2024

調用CreateCluster建立一個ACK託管叢集。您可以在建立叢集的過程中,同時建立單個或多個節點池。

調試

您可以在OpenAPI Explorer中直接運行該介面,免去您計算簽名的困擾。運行成功後,OpenAPI Explorer可以自動產生SDK程式碼範例。

請求文法

POST /clusters HTTP/1.1 
Content-Type:application/json
{
  "name" : "String",
  "region_id" : "String",
  "cluster_type" : "String",
  "cluster_spec" : "String",
  "kubernetes_version" : "String",
  "resource_group_id" : "String",
  "vpcid" : "String",
  "vswitch_ids" : [ "String" ],
  "pod_vswitch_ids" : [ "String" ],
  "container_cidr" : "String",
  "service_cidr" : "String",
  "security_group_id" : "String",
  "is_enterprise_security_group" : Boolean,
  "node_cidr_mask" : "String",
  "snat_entry" : Boolean,
  "endpoint_public_access" : Boolean,
  "load_balancer_spec" :  "String",
  "timezone" : "String",
  "proxy_mode" : "String",
  "enable_rrsa" : Boolean,
  "tags" : [ {
    "key" : "String",
    "value" : "String"
  } ],
  "cluster_domain" : "String",
  "custom_san" : "String",
  "service_account_issuer" : "String",
  "api_audiences" : "String",
  "encryption_provider_key" : "String",
  "timeout_mins" : Long,
  "disable_rollback" : Boolean,
  "deletion_protection" : Boolean,
  "addons" : [ {
    "name" : "String",
    "config" : "String",
    "disabled" : Boolean
  } ],
  "controlplane_log_ttl" : "String",
  "controlplane_log_project" : "String",
  "controlplane_log_components" : [ "String" ],
  "nodepools" : [ {
    "auto_scaling" : {
      "enable" : Boolean,
      "max_instances" : Long,
      "min_instances" : Long,
      "type" : "String",
      "is_bond_eip" : Boolean,
      "eip_internet_charge_type" : "String",
      "eip_bandwidth" : Long
    },
    "kubernetes_config" : {
      "cms_enabled" : Boolean,
      "cpu_policy" : "String",
      "labels" : [ {
        "key" : "String",
        "value" : "String"
      } ],
      "runtime" : "String",
      "runtime_version" : "String",
      "taints" : [ {
        "key" : "String",
        "value" : "String",
        "effect" : "String"
      } ],
      "user_data" : "String"
    },
    "nodepool_info" : {
      "name" : "String",
      "resource_group_id" : "String"
    },
    "scaling_group" : {
      "auto_renew" : Boolean,
      "auto_renew_period" : Long,
      "data_disks" : [ {
        "category" : "String",
        "size" : Long,
        "encrypted" : "String",
        "auto_snapshot_policy_id" : "String"
      } ],
      "image_id" : "String",
      "instance_charge_type" : "String",
      "instance_types" : [ "String" ],
      "key_pair" : "String",
      "login_password" : "String",
      "period" : Long,
      "period_unit" : "String",
      "platform" : "String",
      "rds_instances" : [ "String" ],
      "spot_strategy" : "String",
      "spot_price_limit" : [ {
        "instance_type" : "String",
        "price_limit" : "String"
      } ],
      "scaling_policy" : "String",
      "security_group_id" : "String",
      "security_group_ids" : [ "String" ],
      "system_disk_category" : "String",
      "system_disk_size" : Long,
      "tags" : [ {
        "key" : "String",
        "value" : "String"
      } ],
      "vswitch_ids" : [ "String" ],
      "multi_az_policy" : "String",
      "on_demand_base_capacity" : Long,
      "on_demand_percentage_above_base_capacity" : Long,
      "spot_instance_pools" : Long,
      "spot_instance_remedy" : Boolean,
      "compensate_with_on_demand" : Boolean,
      "internet_charge_type" : "String",
      "internet_max_bandwidth_out" : Long
    },
    "tee_config" : {
      "tee_enable" : Boolean
    },
    "management" : {
      "enable" : Boolean,
      "auto_repair" : Boolean,
      "upgrade_config" : {
        "auto_upgrade" : Boolean,
        "surge" : Long,
        "surge_percentage" : Long,
        "max_unavailable" : Long
      }
    },
    "count" : Long
  } ]
}

請求參數

表 1. 請求Body參數

分類

名稱

類型

是否必選

樣本值

描述

基本配置

name

String

cluster-demo

叢集名稱。

命名規則:由數字、漢字、英文字元、短劃線(-)或底線(_)組成,長度範圍1~63個字元,且不能以底線(_)開頭。

region_id

String

cn-beijing

叢集所在的地區ID。

cluster_type

String

ManagedKubernetes

叢集類型為ManagedKubernetes。取值:

  • ManagedKubernetes:建立ACK託管叢集(Pro版和基礎版)、ACK Serverless叢集(Pro版和基礎版)、ACK Edge叢集(Pro版和基礎版)。

  • KubernetesACK專有叢集

  • ExternalKubernetes:註冊叢集。

cluster_spec

String

ack.pro.small

託管叢集類型,面向託管叢集。取值:

  • ack.pro.smallACK託管叢集Pro版

  • ack.standardACK託管叢集基礎版

預設值:ack.standard。取值可以為空白,為空白時則建立ACK託管叢集基礎版

更多資訊,請參見ACK託管叢集Pro版概述

kubernetes_version

String

1.28.9-aliyun.1

叢集版本,與Kubernetes社區基準版本保持一致。建議選擇最新版本,若不指定,預設使用最新版本。

目前您可以在ACK控制台建立兩種最新版本的叢集。您可以通過API建立其他Kubernetes版本叢集。關於ACK支援的Kubernetes版本,請參見Kubernetes版本概覽及機制

runtime

Array of runtime

{"name": "containerd", "version": "1.6.20"}

容器運行時名稱,ACK支援以下三種容器運行時。

  • containerd:推薦使用,支援所有叢集版本。

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

  • docker:支援1.22版本及以下叢集。

預設值:containerd

resource_group_id

String

rg-acfm3mkrure****

叢集所屬資源群組ID,實現不同資源的隔離。

charge_type

String

PostPaid

API Server所使用的CLB執行個體的付費類型,預設值為PostPaid。取值:

  • PostPaid:隨用隨付。

  • PrePaid:訂用帳戶,建立CLB付費類型已不支援訂用帳戶,存量不受影響。

重要

取值:

  • PrePaid:訂用帳戶。

  • PostPaid:隨用隨付。

預設值:PostPaid

period

Long

1

【該欄位已廢棄】

購買時間長度。訂用帳戶時間長度,當charge_type取值為PrePaid時才生效,且為必選值。

取值範圍:{1, 2, 3, 6, 12, 24, 36, 48, 60}。

預設值:1。

重要

period_unit

String

Month

【該欄位已廢棄】

付費周期,當charge_type取值為PrePaid時,需要指定周期。

取值:Month,當前僅支援以月為周期。

重要

auto_renew

boolean

true

【該欄位已廢棄】

是否開啟自動續約,當charge_type取值為PrePaid時才生效。取值:

  • true:自動續約。

  • false:不自動續約。

預設值:false

重要

auto_renew_period

long

1

【該欄位已廢棄】

自動續約周期,當選擇預付費和自動續約時才生效。當PeriodUnit=Month時,取值範圍:{1, 2, 3, 6, 12}。

預設值:1。

重要

網路參數

vpcid

String

vpc-2zeik9h3ahvv2zz95****

叢集使用的VPC執行個體ID。

vswitch_ids

Array of String

["vsw-2ze48rkq464rsdts1****"]

交換器ID。List長度範圍為[1,5]。

pod_vswitch_ids

Array of String

["vsw-2ze97jwri7cei0mpw****"]

僅在選擇使用Terway外掛程式時需要配置。

為Pod分配IP的虛擬交換器。每個Pod虛擬交換器分別對應一個Worker節點的虛擬交換器,Pod虛擬交換器和Worker節點的虛擬交換器的可用性區域需保持一致。

重要

Pod虛擬交換器的網段掩碼建議不超過19,最大不超過25,否則叢集網路可分配的Pod IP地址非常有限,會影響叢集的正常使用。

container_cidr

String

172.20.0.0/16

Pod網路位址區段,不能和VPC網段衝突。當選擇系統自動建立VPC時,預設使用172.16.0.0/16網段。

重要
  • 當建立Flannel網路類型的叢集時,該欄位為必填。

  • 當建立Terway網路類型的叢集時,該欄位不需要填寫。

service_cidr

String

172.21.0.0/20

Service網路位址區段,不能和VPC網段及Pod網路網段衝突。當選擇系統自動建立VPC時,預設使用172.19.0.0/20網段。

security_group_id

String

sg-bp1bdue0qc1g7k****

使用已有安全性群組建立叢集時需要指定安全性群組ID,和is_enterprise_security_group二選一,叢集節點自動加入到此安全性群組。

is_enterprise_security_group

Boolean

true

自動建立企業級安全性群組,當security_group_id為空白的時生效。

說明

使用普通安全性群組時,叢集內節點與Terway Pod數量之和不能超過2000。所以建立Terway網路類型叢集時,建議使用企業安全性群組。

  • true:建立並使用企業級安全性群組。

  • false:不使用企業級安全性群組。

預設值:true

node_cidr_mask

String

25

節點IP數量,通過指定網路的CIDR來確定IP的數量,只對Flannel網路類型叢集生效。

預設值:25

snat_entry

Boolean

true

是否為網路設定SNAT。

  • 當已有VPC能訪問公網環境時,設定為false

  • 當已有VPC不能訪問公網環境時:

    • 設定為true,表示配置SNAT,此時可以訪問公網環境。

    • 設定為false,表示不配置SNAT,此時不能訪問公網環境。

如果您需要訪問公網,建議配置為true。

預設值:false。

說明

如果建立叢集時未開啟,後續業務需要訪問公網,可為已有叢集開啟公網訪問能力

endpoint_public_access

Boolean

true

是否開啟公網訪問。通過EIP暴露API Server,實現叢集公網訪問。

  • true:開啟公網訪問。

  • false:不開啟公網訪問。選擇不開放時,則無法通過外網訪問叢集API Server。

預設值:true

load_balancer_spec

String

slb.s2.small

API Server負載平衡規格,取值:

  • slb.s1.small

  • slb.s2.small

  • slb.s2.medium

  • slb.s3.small

  • slb.s3.medium

  • slb.s3.large

預設值:slb.s2.small

進階選項

timezone

String

Asia/Shanghai

叢集使用的時區。更多資訊,請參見支援時區

proxy_mode

String

ipvs

kube-proxy代理模式:

  • iptables: 成熟穩定的kube-proxy代理模式,Kubernetes Service的服務發現和負載平衡使用iptables規則配置,但是效能一般,受規模影響較大,適用於叢集存在少量的service。

  • ipvs:高效能的kube-proxy代理模式,Kubernetes Service的服務發現和負載平衡使用Linux IPVS模組進行配置,適用於叢集存在大量的Service,對負載平衡有高效能要求的情境。

預設值:ipvs

enable_rrsa

Boolean

true

是否啟用RRSA功能。

tags

Array of tag

[{"key": "env", "value": "prod"}]

給叢集打tag標籤。包含以下資訊:

  • key:標籤名稱。

  • value:標籤值。

cluster_domain

String

cluster.local

叢集本地區名。

命名規則:網域名稱由小數點(.)分隔的一個或多個部分構成,每個部分最長為63個字元,可以使用小寫字母、數字和短劃線(-),且首尾必須為小寫字母或數字。

custom_san

String

cs.aliyun.com

自訂認證SAN,多個IP或網域名稱以英文逗號(,)分隔。

service_account_issuer

String

kubernetes.default.svc

ServiceAccount是Pod和叢集apiserver通訊的訪問憑證。而service-account-issuerserviceaccount token中的簽發身份,即token payload中的iss欄位。

關於ServiceAccount更多詳情,請參見使用ServiceAccount Token卷投影

api_audiences

String

kubernetes.default.svc

ServiceAccount是Pod和叢集apiserver通訊的訪問憑證,而api-audiences是合法的請求token身份,用於apiserver服務端認證請求token是否合法。支援配置多個audience,通過英文逗號(,)分割。

關於ServiceAccount更多詳情,請參見使用ServiceAccount Token卷投影

encryption_provider_key

String

0fe64791-55eb-4fc7-84c5-c6c7cdca****

KMS密鑰ID,使用該金鑰組Secret資料進行加密。更多詳情,請參見什麼是Key Management Service

說明

該功能只在專業託管版叢集(ACK Pro版叢集)中生效。

timeout_mins

Long

60

叢集建立逾時時間,單位分鐘。

預設值:60

disable_rollback

Boolean

true

叢集建立失敗是否復原。取值:

  • true:當叢集建立失敗時,進行復原操作。

  • false:當叢集建立失敗時,不進行復原操作。

預設值:true

deletion_protection

Boolean

true

叢集刪除保護,防止通過控制台或API誤刪除叢集。取值:

  • true:啟用叢集刪除保護,將不能通過控制台或API刪除叢集。

  • false:不啟用叢集刪除保護,則能通過控制台或API刪除叢集。

預設值:false

組件配置

addons

Array of addon

[{"name": "terway-eniip","config": ""}, {"name": "logtail-ds","config": "{\"IngressDashboardEnabled\":\"true\",\"sls_project_name\":\"your_sls_project_name\"}"}, {"name":"nginx-ingress-controller","config":"{\"IngressSlbNetworkType\":\"internet\"}"}]

Kubernetes叢集安裝的組件列表,建立叢集時通過addons指定想要安裝的叢集組件。

  • name:必填,組件名稱。

  • config:可選,取值為空白時表示無需配置。

  • disabled:可選,是否禁止預設安裝。

網路組件:必選,包含Flannel和Terway兩種網路類型,建立叢集時二選一:

  • Flannel網路:[{"name":"flannel","config":""}]。

  • Terway網路:[{"name": "terway-eniip","config": ""}] 。

儲存群組件:可選,僅支援csi類型:

csi:[{"name":"csi-plugin","config": ""},{"name": "csi-provisioner","config": ""}]。

日誌組件:可選。推薦開啟,如果不開啟Log Service時,將無法使用叢集審計功能。

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

  • 建立新的SLS Project:[{"name": "logtail-ds","config": "{\"IngressDashboardEnabled\":\"true\"}"}] 。

Ingress組件:可選,ACK專有版叢集預設安裝Ingress組件nginx-ingress-controller

  • 安裝Ingress並且開啟公網:[{"name":"nginx-ingress-controller","config":"{\"IngressSlbNetworkType\":\"internet\"}"}] 。

  • 禁止預設安裝Ingress:[{"name": "nginx-ingress-controller","config": "","disabled": true}] 。

事件中心:可選,預設開啟。

事件中心提供對Kubernetes事件的儲存、查詢、警示等能力。Kubernetes事件中心關聯的Logstore在90天內免費。關於免費策略的更多資訊,請參見建立並使用K8s事件中心

開啟事件中心:[{"name":"ack-node-problem-detector","config":"{\"sls_project_name\":\"your_sls_project_name\"}"}]。

controlplane_log_ttl

String

30

控制平面組件日誌收集周期。取值範圍:1~3000,單位:天。

預設值:30

controlplane_log_project

String

k8s-log-xxx

控制面組件Log ServiceProject,可以使用已有Project用於日誌儲存,也可以使用系統自動建立Project使用者日誌儲存。如果選擇自動建立Log ServiceProject將會自動建立一個名稱為k8s-log-{ClusterID}的Log ServiceProject。

controlplane_log_components

Array of String

["apiserver","kcm","scheduler","ccm"]

組件名稱列表,指定哪些控制平面的組件日誌需要被收集。

預設採集API Server、KCM、Scheduler、CCM組件的日誌。

節點池配置

nodepools

Array of nodepool

節點池的參數配置。

響應體文法

HTTP/1.1 200
Content-Type:application/json
{
  "cluster_id" : "String",
  "request_id" : "String",
  "task_id" : "String"
}

響應參數

表 2. 響應Body參數

名稱

類型

樣本值

描述

cluster_id

String

cb95aa626a47740afbf6aa099b650****

叢集ID。

request_id

String

687C5BAA-D103-4993-884B-C35E4314A1E1

請求ID。

task_id

String

T-5a54309c80282e39ea00002f

任務ID。

建立ACK託管叢集樣本

請求樣本

POST /clusters 
<公用要求標頭>
{
    "name":"ACK託管版",                      // 叢集名稱 #required
    "region_id":"cn-zhangjiakou",           // 地區ID, #required
    "cluster_type":"ManagedKubernetes",     // 叢集類型 #required
    "cluster_spec":"ack.pro.small",        // 託管版叢集類型。ack.pro.small:ACK Pro版叢集;ack.standard:ACK基礎版叢集。
    "kubernetes_version":"1.28.9-aliyun.1",  // 叢集版本,只維護最新的3個版本。
    "resource_group_id":"rg-acfm3mkrure****",
    "vpcid":"vpc-8vbh3b9a2f38urhls****",          // 叢集專用網路ID。 #required
    "vswitch_ids":[                               // 叢集虛擬交換器ID。 #required
        "vsw-8vbmoffowsztjaawj****"
    ],
    "pod_vswitch_ids":[                                // Terway網路類型的叢集,需要指定Pod所在的虛擬交換,因為Pod獨佔一個機器IP。                     
        "vsw-8vbo5fwyqiw0bbtlq****"
    ],
    "container_cidr":"172.20.0.0/16",             // 叢集Pod網段#required, 網路模式是terway外掛程式的情況下不必須。
    "service_cidr":"172.21.0.0/20",               // 叢集Service網段。 #required
    "security_group_id":"sg-8vb7grbyvlb10j0i****",     // 使用已有安全性群組。和is_enterprise_security_group二選一。
    "is_enterprise_security_group":true,               // 自動建立企業安全性群組,和security_group_id二選一。
    "node_cidr_mask":"25",                // 節點IP數量,通過指定節點網段的掩碼來決定。  
    "snat_entry":true,                 // 為專用網路配置SNAT規則,以開啟叢集公網訪問。
    "endpoint_public_access":true,      // 開啟公網訪問。
    "load_balancer_spec":slb.s2.small,   
    "timezone":"Asia/Shanghai",   // 時區
    "proxy_mode":"ipvs",           // kube-proxy代理模式,取值:iptables或者ipvs。
    "enable_rrsa":true,
    "tags":[                       // 叢集標籤。標籤將同時作用於 ACK叢集、ECS執行個體和Kubernetes節點。
        {
            "key":"tag-k",
            "value":"tag-v"
        }
    ],
    "cluster_domain":"cluster.local",    // 叢集本地區名,預設:cluster.local。
    "custom_san":"cs.aliyuncs.com",      // 叢集自訂認證SAN。
    "service_account_issuer":"kubernetes.default.svc", // 服務賬戶令牌卷投影。serviceaccount token中的簽發身份,即token payload中的iss欄位。
    "api_audiences":"kubernetes.default.svc",          // 服務賬戶令牌卷投影。合法的請求token身份,用於apiserver服務端認證請求token是否合法。
    "encryption_provider_key":"8734596c-c0d6-4a63-a76e-fe72c7b0****", // Secret落盤加密的密鑰ID。
    "timeout_mins":60,                      // 叢集建立逾時時間。
    "disable_rollback":true,                // 失敗是否復原。
    "deletion_protection":true,    // 叢集刪除保護。
    "addons":[                    // 組件配置
        {
            "name":"flannel"      // 當叢集網路類型是Terway時,設定為{"name":"terway-eniip"}。
        },
        {
            "name":"csi-plugin"
        },
        {
            "name":"csi-provisioner"
        },
        {
            "name":"logtail-ds",
            "config":"{\"IngressDashboardEnabled\":\"true\"}"
        },
        {
            "name":"ack-node-problem-detector",
            "config":"{\"sls_project_name\":\"\"}"
        },
        {
            "name":"nginx-ingress-controller",                      // 組件名稱
            "config":"{\"IngressSlbNetworkType\":\"internet\"}",    // 組件配置
            "disabled": true                                        // 是否禁止預設安裝。
        },
        {
            "name":"arms-prometheus"
        }
    ],
    "controlplane_log_ttl" : "30",
    "controlplane_log_project" : "k8s-log-xxx",
    "controlplane_log_components" : ["apiserver","kcm","scheduler"],
    "nodepools" : [ {
      "auto_scaling" : {
        "enable" : true,
        "max_instances" : 10,
        "min_instances" : 1,
        "type" : "cpu"
      },
      "kubernetes_config" : {
        "cms_enabled" : true,
        "cpu_policy" : "none",
        "labels" : [ {
          "key" : "env",
          "value" : "prod"
        } ],
        "runtime" : "containerd",
        "runtime_version" : "1.6.20",
        "taints" : [ {
          "key" : "key",
          "value" : "value",
          "effect" : "NoSchedule"
        } ],
        "user_data" : "dGhpcyBpcyBhIGV4YW1wbGU=",
        "node_name_mode" : "aliyun.com00055test"
      },
      "nodepool_info" : {
        "name" : "cluster-demo",
        "resource_group_id" : "rg-acfmyvw3wjmb****",
        "type" : "ess"
      },
      "scaling_group" : {
        "auto_renew" : true,
        "auto_renew_period" : 1,
        "data_disks" : [ {
          "category" : "cloud_ssd",
          "size" : 40,
          "encrypted" : "true",
          "auto_snapshot_policy_id" : "sp-2zej1nogjvovnz4z****",
          "performance_level" : "PL1"
        } ],
        "image_id" : "aliyun_2_1903_x64_20G_alibase_20200529.vhd",
        "instance_charge_type" : "PrePaid",
        "instance_types" : [ "ecs.d1ne.2xlarge" ],
        "key_pair" : "np-key-name",
        "login_password" : "Hello1234",
        "period" : 1,
        "period_unit" : "Month",
        "platform" : "AliyunLinux",
        "rds_instances" : [ "rds-****" ],
        "spot_strategy" : "NoSpot",
        "spot_price_limit" : [ {
          "instance_type" : "ecs.c6.large",
          "price_limit" : "0.39"
        } ],
        "scaling_policy" : "release",
        "security_group_id" : "sg-wz9a8g2mt6x5llu0****",
        "security_group_ids" : [ "sg-wz9a8g2mt6x5llu0****" ],
        "system_disk_category" : "cloud_efficiency",
        "system_disk_size" : 120,
        "system_disk_performance_level" : "PL1",
        "tags" : [ {
          "key" : "node-k-1",
          "value" : "node-v-1"
        } ],
        "vswitch_ids" : [ "vsw-wz9mfnhmssud6eicu****" ],
        "multi_az_policy" : "COST_OPTIMIZED",
        "on_demand_base_capacity" : 0,
        "on_demand_percentage_above_base_capacity" : 20,
        "spot_instance_pools" : 5,
        "spot_instance_remedy" : false,
        "compensate_with_on_demand" : true,
        "internet_charge_type" : "PayByTraffic",
        "internet_max_bandwidth_out" : 5,
        "image_type" : "AliyunLinux",
        "deploymentset_id" : "ds-bp1d19mmbsv3jf6xxxxx",
        "desired_size" : 0
      },
      "tee_config" : {
        "tee_enable" : true
      },
      "management" : {
        "enable" : false,
        "auto_repair" : false,
        "upgrade_config" : {
          "auto_upgrade" : false,
          "surge" : 0,
          "surge_percentage" : 0,
          "max_unavailable" : 1
        }
      },
      "count" : 1,
      "interconnect_mode" : "basic",
      "interconnect_config" : {
        "cen_id" : "cen-ey9k9nfhz0f*******",
        "ccn_id" : "ccn-qm5i0i0q9yi*******",
        "ccn_region_id" : "cn-shanghai",
        "bandwidth" : 10,
        "improved_period" : "1"
      },
      "max_nodes" : 10
  } ]
}

返回樣本

XML格式

<cluster_id>cb95aa626a47740afbf6aa099b65****</cluster_id>
<task_id>687C5BAA-D103-4993-884B-C35E4314A1E1</task_id>
<request_id>T-5a54309c80282e39ea00002f</request_id>

JSON格式

{
    "cluster_id": "cb95aa626a47740afbf6aa099b65****",
    "request_id": "687C5BAA-D103-4993-884B-C35E4314A1E1",
    "task_id": "T-5a54309c80282e39ea00002f"
}

錯誤碼

訪問錯誤中心查看更多錯誤碼。