華為云計(jì)算 云知識 創(chuàng)建AddonInstanceCreateAddonInstance
創(chuàng)建AddonInstanceCreateAddonInstance

 

功能介紹

根據(jù)提供的插件模板,安裝插件實(shí)例。

調(diào)用方法

請參見如何調(diào)用API。

URI

POST /api/v3/addons

請求參數(shù)

表1 請求Header參數(shù)

參數(shù)

是否必選

參數(shù)類型

描述

Content-Type

String

消息體的類型(格式)

X-Auth-Token

String

調(diào)用接口的認(rèn)證方式分為Token和AK/SK兩種,如果您使用的Token方式,此參數(shù)為必填,請?zhí)顚慣oken的值,獲取方式請參見獲取token

表2 請求Body參數(shù)

參數(shù)

是否必選

參數(shù)類型

kind

String

apiVersion

String

metadata

AddonMetadata object

spec

InstanceRequestSpec object

表3 AddonMetadata

參數(shù)

是否必選

參數(shù)類型

描述

uid

String

唯一id標(biāo)識

name

String

插件名稱

alias

String

插件別名

labels

Map<String,String>

插件標(biāo)簽,key/value對格式,接口保留字段,填寫不會(huì)生效

annotations

Map<String,String>

插件注解,由key/value組成

  • 安裝:固定值為{"addon.install/type":"install"}

  • 升級:固定值為{"addon.upgrade/type":"upgrade"}

updateTimestamp

String

更新時(shí)間

creationTimestamp

String

創(chuàng)建時(shí)間

表4 InstanceRequestSpec

參數(shù)

是否必選

參數(shù)類型

描述

version

String

待安裝、升級插件的版本號,例如1.0.0

  • 安裝:該參數(shù)非必傳,如果不傳,匹配集群支持的最新版本

  • 升級:該參數(shù)必傳,需指定版本號

clusterID

String

集群id

values

Map<String,Object>

插件模板安裝參數(shù)(各插件不同),升級插件時(shí)需要填寫全量安裝參數(shù),未填寫參數(shù)將使用插件模板中的默認(rèn)值,當(dāng)前插件安裝參數(shù)可通過查詢插件實(shí)例接口獲取。

addonTemplateName

String

待安裝插件模板名稱,如coredns

響應(yīng)參數(shù)

狀態(tài)碼: 201

表5 響應(yīng)Body參數(shù)

參數(shù)

參數(shù)類型

描述

kind

String

API類型,固定值“Addon”,該值不可修改。

apiVersion

String

API版本,固定值“v3”,該值不可修改。

metadata

AddonMetadata object

基本信息,為集合類的元素類型,包含一組由不同名稱定義的屬性

spec

InstanceSpec object

spec是集合類的元素類型,內(nèi)容為插件實(shí)例具體信息,實(shí)例的詳細(xì)描述主體部分都在spec中給出

status

AddonInstanceStatus object

插件實(shí)例狀態(tài)

表6 AddonMetadata

參數(shù)

參數(shù)類型

描述

uid

String

唯一id標(biāo)識

name

String

插件名稱

alias

String

插件別名

labels

Map<String,String>

插件標(biāo)簽,key/value對格式,接口保留字段,填寫不會(huì)生效

annotations

Map<String,String>

插件注解,由key/value組成

  • 安裝:固定值為{"addon.install/type":"install"}

  • 升級:固定值為{"addon.upgrade/type":"upgrade"}

updateTimestamp

String

更新時(shí)間

creationTimestamp

String

創(chuàng)建時(shí)間

表7 InstanceSpec

參數(shù)

clusterID

version

addonTemplateName

addonTemplateType

addonTemplateLogo

addonTemplateLabels

description

values

表8 AddonInstanceStatus

參數(shù)

status

Reason

message

targetVersions

currentVersion

isRollbackable

previousVersion

表10 SupportVersions

參數(shù)

參數(shù)類型

描述

clusterType

String

支持的集群類型

clusterVersion

Array of strings

支持的集群版本(正則表達(dá)式)

請求示例

安裝1.17.15版本的coredns插件,插件規(guī)格為2500qps,插件實(shí)例數(shù)指定為2。

{
  "kind" : "Addon",
  "apiVersion" : "v3",
  "metadata" : {
    "annotations" : {
      "addon.install/type" : "install"
    }
  },
  "spec" : {
    "clusterID" : "1b2ec02d-a3b2-11ec-b0d0-0255ac100099",
    "version" : "1.17.15",
    "addonTemplateName" : "coredns",
    "values" : {
      "basic" : {
        "cluster_ip" : "10.247.3.10",
        "image_version" : "1.17.15",
        "platform" : "linux-amd64",
        "swr_addr" : "<Replace_SWR_address>",
        "swr_user" : "hwofficial",
        "rbac_enabled" : true
      },
      "flavor" : {
        "name" : 2500,
        "replicas" : 2,
        "resources" : [ {
          "limitsCpu" : "500m",
          "limitsMem" : "512Mi",
          "name" : "coredns",
          "requestsCpu" : "500m",
          "requestsMem" : "512Mi"
        } ]
      },
      "custom" : {
        "stub_domains" : { },
        "upstream_nameservers" : [ ],
        "cluster_id" : "1b2ec02d-a3b2-11ec-b0d0-0255ac100099",
        "tenant_id" : "0504201b6c80256b2f08c0099f0c8fe4"
      }
    }
  }
}

響應(yīng)示例

狀態(tài)碼: 201

OK

{
  "kind" : "Addon",
  "apiVersion" : "v3",
  "metadata" : {
    "uid" : "b748aaea-a984-11ec-987b-0255ac1000bc",
    "name" : "coredns",
    "alias" : "coredns",
    "creationTimestamp" : "2022-03-22T02:06:41Z",
    "updateTimestamp" : "2022-03-22T02:06:41Z"
  },
  "spec" : {
    "clusterID" : "1b2ec02d-a3b2-11ec-b0d0-0255ac100099",
    "version" : "1.17.15",
    "addonTemplateName" : "coredns",
    "addonTemplateType" : "helm",
    "addonTemplateLogo" : "",
    "addonTemplateLabels" : [ "ServiceDiscovery" ],
    "description" : "CoreDNS is a DNS server that chains plugins and provides Kubernetes
DNS Services", "values" : { "basic" : { "cluster_ip" : "10.247.3.10", "image_version" : "1.17.15", "platform" : "linux-amd64", "rbac_enabled" : true, "swr_addr" : "", "swr_user" : "hwofficial" }, "custom" : { "cluster_id" : "1b2ec02d-a3b2-11ec-b0d0-0255ac100099", "stub_domains" : { }, "tenant_id" : "0504201b6c80256b2f08c0099f0c8fe4", "upstream_nameservers" : [ ] }, "flavor" : { "name" : 2500, "replicas" : 2, "resources" : [ { "limitsCpu" : "500m", "limitsMem" : "512Mi", "name" : "coredns", "requestsCpu" : "500m", "requestsMem" : "512Mi" } ] } } }, "status" : { "status" : "installing", "Reason" : "", "message" : "", "targetVersions" : null, "currentVersion" : { "version" : "1.17.15", "input" : { "basic" : { "cluster_ip" : "10.247.3.10", "image_version" : "1.17.15", "platform" : "linux-amd64", "swr_addr" : "", "swr_user" : "hwofficial" }, "parameters" : { "custom" : { "stub_domains" : "", "upstream_nameservers" : "" }, "flavor1" : { "name" : 2500, "replicas" : 2, "resources" : [ { "limitsCpu" : "500m", "limitsMem" : "512Mi", "name" : "coredns", "requestsCpu" : "500m", "requestsMem" : "512Mi" } ] }, "flavor2" : { "name" : 5000, "replicas" : 2, "resources" : [ { "limitsCpu" : "1000m", "limitsMem" : "1024Mi", "name" : "coredns", "requestsCpu" : "1000m", "requestsMem" : "1024Mi" } ] }, "flavor3" : { "name" : 10000, "replicas" : 2, "resources" : [ { "limitsCpu" : "2000m", "limitsMem" : "2048Mi", "name" : "coredns", "requestsCpu" : "2000m", "requestsMem" : "2048Mi" } ] }, "flavor4" : { "name" : 20000, "replicas" : 4, "resources" : [ { "limitsCpu" : "2000m", "limitsMem" : "2048Mi", "name" : "coredns", "requestsCpu" : "2000m", "requestsMem" : "2048Mi" } ] } } }, "stable" : true, "translate" : { "en_US" : { "addon" : { "changeLog" : "Supported CCE clusters of v1.21.", "description" : "CoreDNS is a DNS server that chains plugins and provides Kubernetes DNS Services" }, "description" : { "Parameters.custom.stub_domains" : "The target nameserver may itself be a Kubernetes
service. For instance, you can run your own copy of dnsmasq to export custom DNS names into the ClusterDNS
namespace, a JSON map using a DNS suffix key (e.g. “acme.local”) and a value consisting of a JSON array of DNS IPs.", "Parameters.custom.upstream_nameservers" : "If specified, then the values specified
replace the nameservers taken by default from the node’s /etc/resolv.conf. Limits:a maximum of three
upstream nameservers can be specified, A JSON array of DNS IPs.", "Parameters.flavor1.description" : "Concurrent domain name resolution ability - External
domain name:2500 qps, Internal domain name:10000 qps", "Parameters.flavor1.name" : 2500,

"Parameters.flavor2.description" : "Concurrent domain name resolution ability -
External domain name:5000 qps, Internal domain name:20000 qps", "Parameters.flavor2.name" : 5000, "Parameters.flavor3.description" : "Concurrent domain name resolution ability -
External domain name:10000 qps, Internal domain name:40000 qps", "Parameters.flavor3.name" : 10000, "Parameters.flavor4.description" : "Concurrent domain name resolution ability -
External domain name:20000 qps, Internal domain name:80000 qps", "Parameters.flavor4.name" : 20000 }, "key" : { "Parameters.custom.stub_domains" : "stub domain", "Parameters.custom.upstream_nameservers" : "upstream nameservers" } }, "fr_FR" : { "addon" : { "changeLog" : "Prise en charge du cluster 1.21.", "description" : "Un serveur DNS qui encha?ne les plug-ins et fournit des services DNS Kubernetes." }, "description" : { "Parameters.custom.stub_domains" : "Le serveur de noms cible peut lui-même être un service
Kubernetes. Par exemple, vous pouvez exécuter votre propre copie de dnsmasq pour exporter des noms
DNS personnalisés dans l'espace de noms ClusterDNS, une carte JSON à l'aide d'une clé de suffixe DNS
(par exemple, ?acme.local?) et une valeur constituée d'un tableau JSON d'adresses IP DNS.", "Parameters.custom.upstream_nameservers" : "Si spécifié, les valeurs spécifiées remplacent
les serveurs de noms pris par défaut dans le fichier /etc/resolv.conf du n?ud. Limites: un maximum de trois
serveurs de noms en amont peuvent être spécifiés, un tableau JSON d'adresses IP DNS.", "Parameters.flavor1.description" : "Capacité de résolution de nom de domaine simultanée -

Nom de domaine externe: 2500 qps, Nom de domaine interne: 10000 qp", "Parameters.flavor1.name" : 2500, "Parameters.flavor2.description" : "Capacité de résolution de nom de domaine simultanée -
Nom de domaine externe: 5000 qps, Nom de domaine interne: 20000 qp", "Parameters.flavor2.name" : 5000, "Parameters.flavor3.description" : "Capacité de résolution de nom de domaine simultanée -
Nom de domaine externe: 10000 qps, Nom de domaine interne: 40000 qp", "Parameters.flavor3.name" : 10000, "Parameters.flavor4.description" : "Capacité de résolution de nom de domaine simultanée -
Nom de domaine externe: 20000 qps, Nom de domaine interne: 80000 qp", "Parameters.flavor4.name" : 20000 }, "key" : { "Parameters.custom.stub_domains" : "domaine stub", "Parameters.custom.upstream_nameservers" : "serveurs de noms en amont" } }, "zh_CN" : { "addon" : { "changeLog" : "", "description" : "" }, "description" : { "Parameters.custom.stub_domains" : "", "Parameters.custom.upstream_nameservers" : "", "Parameters.flavor1.description" : "", "Parameters.flavor1.name" : 2500, "Parameters.flavor2.description" : "", "Parameters.flavor2.name" : 5000, "Parameters.flavor3.description" : "", "Parameters.flavor3.name" : 10000, "Parameters.flavor4.description" : "", "Parameters.flavor4.name" : 20000 }, "key" : { "Parameters.custom.stub_domains" : "", "Parameters.custom.upstream_nameservers" : "" } } }, "supportVersions" : null, "creationTimestamp" : "2021-12-14T13:43:15Z", "updateTimestamp" : "2022-01-11T14:32:10Z" } } }

SDK代碼示例

SDK代碼示例如下。

  • Java
  • Python
  • Go
  • 更多

安裝1.17.15版本的coredns插件,插件規(guī)格為2500qps,插件實(shí)例數(shù)指定為2。

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 CreateAddonInstanceSolution {

    public static void main(String[] args) {
        String ak = "<YOUR AK>";
        String sk = "<YOUR SK>";

        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);

        CceClient client = CceClient.newBuilder()
                .withCredential(auth)
                .withRegion(CceRegion.valueOf("cn-north-4"))
                .build();
        CreateAddonInstanceRequest request = new CreateAddonInstanceRequest();
        InstanceRequest body = new InstanceRequest();
        Map<String, Object> listSpecValues = new HashMap<>();
        listSpecValues.put("basic", "{\"rbac_enabled\":true,\"swr_user\":\"hwofficial\",
\"image_version\":\"1.17.15\",\"cluster_ip\":\"10.247.3.10\",\"platform\":\"linux-amd64\",
\"swr_addr\":\"<Replace_SWR_address>\"}"); listSpecValues.put("flavor", "{\"replicas\":2,\"name\":2500,\"resources\":[{\"limitsCpu\":
\"500m\",\"name\":\"coredns\",\"limitsMem\":\"512Mi\",\"requestsMem\":\"512Mi\",\"requestsCpu\":\"500m\"}]}"); listSpecValues.put("custom", "{\"tenant_id\":\"0504201b6c80256b2f08c0099f0c8fe4\",\"cluster_id\"
:\"1b2ec02d-a3b2-11ec-b0d0-0255ac100099\",\"stub_domains\":{},\"upstream_nameservers\":[]}"); InstanceRequestSpec specbody = new InstanceRequestSpec(); specbody.withVersion("1.17.15") .withClusterID("1b2ec02d-a3b2-11ec-b0d0-0255ac100099") .withValues(listSpecValues) .withAddonTemplateName("coredns"); Map<String, String> listMetadataAnnotations = new HashMap<>(); listMetadataAnnotations.put("addon.install/type", "install"); AddonMetadata metadatabody = new AddonMetadata(); metadatabody.withAnnotations(listMetadataAnnotations); body.withSpec(specbody); body.withMetadata(metadatabody); body.withApiVersion("v3"); body.withKind("Addon"); request.withBody(body); try { CreateAddonInstanceResponse response = client.createAddonInstance(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()); } } }

安裝1.17.15版本的coredns插件,插件規(guī)格為2500qps,插件實(shí)例數(shù)指定為2。

# coding: utf-8

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__":
    ak = "<YOUR AK>"
    sk = "<YOUR SK>"

    credentials = BasicCredentials(ak, sk) \

    client = CceClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(CceRegion.value_of("cn-north-4")) \
        .build()

    try:
        request = CreateAddonInstanceRequest()
        listValuesSpec = {
            "basic": "{\"rbac_enabled\":true,\"swr_user\":\"hwofficial\",\"image_version\":\"1.17.15\",
\"cluster_ip\":\"10.247.3.10\",\"platform\":\"linux-amd64\",\"swr_addr\":\"<Replace_SWR_address>\"}", "flavor": "{\"replicas\":2,\"name\":2500,\"resources\":[{\"limitsCpu\":\"500m\",\"name\":
\"coredns\",\"limitsMem\":\"512Mi\",\"requestsMem\":\"512Mi\",\"requestsCpu\":\"500m\"}]}", "custom": "{\"tenant_id\":\"0504201b6c80256b2f08c0099f0c8fe4\",\"cluster_id\":
\"1b2ec02d-a3b2-11ec-b0d0-0255ac100099\",\"stub_domains\":{},\"upstream_nameservers\":[]}" } specbody = InstanceRequestSpec( version="1.17.15", cluster_id="1b2ec02d-a3b2-11ec-b0d0-0255ac100099", values=listValuesSpec, addon_template_name="coredns" ) listAnnotationsMetadata = { "addon.install/type": "install" } metadatabody = AddonMetadata( annotations=listAnnotationsMetadata ) request.body = InstanceRequest( spec=specbody, metadata=metadatabody, api_version="v3", kind="Addon" ) response = client.create_addon_instance(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

安裝1.17.15版本的coredns插件,插件規(guī)格為2500qps,插件實(shí)例數(shù)指定為2。

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() {
    ak := "<YOUR AK>"
    sk := "<YOUR SK>"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        Build()

    client := cce.NewCceClient(
        cce.CceClientBuilder().
            WithRegion(region.ValueOf("cn-north-4")).
            WithCredential(auth).
            Build())

    request := &model.CreateAddonInstanceRequest{}
	var listValuesSpec = map[string]interface{}{
        "basic": "{\"rbac_enabled\":true,\"swr_user\":\"hwofficial\",\"image_version\":\"1.17.15\",
\"cluster_ip\":\"10.247.3.10\",\"platform\":\"linux-amd64\",\"swr_addr\":\"<Replace_SWR_address>\"}", "flavor": "{\"replicas\":2,\"name\":2500,\"resources\":[{\"limitsCpu\":\"500m\",\"name\":\"coredns\",
\"limitsMem\":\"512Mi\",\"requestsMem\":\"512Mi\",\"requestsCpu\":\"500m\"}]}", "custom": "{\"tenant_id\":\"0504201b6c80256b2f08c0099f0c8fe4\",\"cluster_id\":
\"1b2ec02d-a3b2-11ec-b0d0-0255ac100099\",\"stub_domains\":{},\"upstream_nameservers\":[]}", } versionSpec:= "1.17.15" specbody := &model.InstanceRequestSpec{ Version: &versionSpec, ClusterID: "1b2ec02d-a3b2-11ec-b0d0-0255ac100099", Values: listValuesSpec, AddonTemplateName: "coredns", } var listAnnotationsMetadata = map[string]string{ "addon.install/type": "install", } metadatabody := &model.AddonMetadata{ Annotations: listAnnotationsMetadata, } request.Body = &model.InstanceRequest{ Spec: specbody, Metadata: metadatabody, ApiVersion: "v3", Kind: "Addon", } response, err := client.CreateAddonInstance(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } }

更多編程語言的SDK代碼示例,請參見API Explorer的代碼示例頁簽,可生成自動(dòng)對應(yīng)的SDK代碼示例。

狀態(tài)碼

狀態(tài)碼

描述

201

OK

錯(cuò)誤碼

請參見錯(cuò)誤碼。