华为云计算 云知识 创建AddonInstanceCreateAddonInstance
创建AddonInstanceCreateAddonInstance

 

功能介绍

根据提供的插件模板,安装插件实例。

调用方法

请参见如何调用API

URI

POST /api/v3/addons

请求参数

表1 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

消息体的类型(格式)

X-Auth-Token

String

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

表2 请求Body参数

参数

是否必选

参数类型

kind

String

apiVersion

String

metadata

AddonMetadata object

spec

InstanceRequestSpec object

表3 AddonMetadata

参数

是否必选

参数类型

描述

uid

String

唯一id标识

name

String

插件名称

alias

String

插件别名

labels

Map<String,String>

插件标签,key/value对格式,接口保留字段,填写不会生效

annotations

Map<String,String>

插件注解,由key/value组成

  • 安装:固定值为{"addon.install/type":"install"}

  • 升级:固定值为{"addon.upgrade/type":"upgrade"}

updateTimestamp

String

更新时间

creationTimestamp

String

创建时间

表4 InstanceRequestSpec

参数

是否必选

参数类型

描述

version

String

待安装、升级插件的版本号,例如1.0.0

  • 安装:该参数非必传,如果不传,匹配集群支持的最新版本

  • 升级:该参数必传,需指定版本号

clusterID

String

集群id

values

Map<String,Object>

插件模板安装参数(各插件不同),升级插件时需要填写全量安装参数,未填写参数将使用插件模板中的默认值,当前插件安装参数可通过查询插件实例接口获取。

addonTemplateName

String

待安装插件模板名称,如coredns

响应参数

状态码: 201

表5 响应Body参数

参数

参数类型

描述

kind

String

API类型,固定值“Addon”,该值不可修改。

apiVersion

String

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

metadata

AddonMetadata object

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

spec

InstanceSpec object

spec是集合类的元素类型,内容为插件实例具体信息,实例的详细描述主体部分都在spec中给出

status

AddonInstanceStatus object

插件实例状态

表6 AddonMetadata

参数

参数类型

描述

uid

String

唯一id标识

name

String

插件名称

alias

String

插件别名

labels

Map<String,String>

插件标签,key/value对格式,接口保留字段,填写不会生效

annotations

Map<String,String>

插件注解,由key/value组成

  • 安装:固定值为{"addon.install/type":"install"}

  • 升级:固定值为{"addon.upgrade/type":"upgrade"}

updateTimestamp

String

更新时间

creationTimestamp

String

创建时间

表7 InstanceSpec

参数

clusterID

version

addonTemplateName

addonTemplateType

addonTemplateLogo

addonTemplateLabels

description

values

表8 AddonInstanceStatus

参数

status

Reason

message

targetVersions

currentVersion

isRollbackable

previousVersion

表10 SupportVersions

参数

参数类型

描述

clusterType

String

支持的集群类型

clusterVersion

Array of strings

支持的集群版本(正则表达式)

请求示例

安装1.17.15版本的coredns插件,插件规格为2500qps,插件实例数指定为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"
      }
    }
  }
}

响应示例

状态码: 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插件,插件规格为2500qps,插件实例数指定为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插件,插件规格为2500qps,插件实例数指定为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插件,插件规格为2500qps,插件实例数指定为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的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

201

OK

错误码

请参见错误码

 

上一篇:回滚快照到云硬盘RollbackSnapshot 下一篇:华为云杯2019人工智能创新应用大赛