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

创建AddonInstance

功能介绍

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

调用方法

请参见如何调用API

URI

POST /autopilot/v3/addons

请求参数

表1 请求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

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表2 请求Body参数

参数

是否必选

参数类型

描述

kind

String

API类型,固定值“Addon”,该值不可修改,该字段传入无效。

apiVersion

String

API版本,固定值“v3”,该值不可修改,该字段传入无效。

metadata

AddonMetadata object

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

spec

InstanceRequestSpec object

spec是集合类的元素类型,内容为插件实例安装/升级的具体请求信息

表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

String

集群id

version

String

插件模板版本号,如1.0.0

addonTemplateName

String

插件模板名称,如coredns

addonTemplateType

String

插件模板类型

addonTemplateLogo

String

插件模板logo图片的地址

addonTemplateLabels

Array of strings

插件模板所属类型

description

String

插件模板描述

values

Map<String,Object>

插件模板安装参数(各插件不同),请根据具体插件模板信息填写安装参数。

表8 AddonInstanceStatus

参数

参数类型

描述

status

String

插件实例状态, 取值如下

  • running:运行中,表示插件全部实例状态都在运行中,插件正常使用。

  • abnormal:不可用,表示插件状态异常,插件不可使用。可单击插件名称查看实例异常事件。

  • installing:安装中,表示插件正在安装中。

  • installFailed:安装失败,表示插件安装失败,需要卸载后重新安装。

  • upgrading:升级中,表示插件正在更新中。

  • upgradeFailed:升级失败,表示插件升级失败,可重试升级或卸载后重新安装。

  • deleting:删除中,表示插件正在删除中。

  • deleteFailed:删除失败,表示插件删除失败,可重试卸载。

  • deleteSuccess:删除成功,表示插件删除成功。

  • available:部分就绪,表示插件下只有部分实例状态为运行中,插件部分功能可用。

  • rollbacking:回滚中,表示插件正在回滚中。

  • rollbackFailed:回滚失败,表示插件回滚失败,可重试回滚或卸载后重新安装。

  • unknown:未知状态,表示插件模板实例不存在。

Reason

String

插件安装失败原因

message

String

安装错误详情

targetVersions

Array of strings

此插件版本,支持升级的集群版本

currentVersion

Versions object

当前插件实例使用的具体插件版本信息

isRollbackable

Boolean

是否支持回滚到插件升级前的插件版本

previousVersion

String

插件升级或回滚前的版本

表9 Versions

参数

参数类型

描述

version

String

插件版本号

input

Object

插件安装参数

stable

Boolean

是否为稳定版本

translate

Object

供界面使用的翻译信息

supportVersions

Array of SupportVersions objects

支持集群版本号

creationTimestamp

String

创建时间

updateTimestamp

String

更新时间

表10 SupportVersions

参数

参数类型

描述

clusterType

String

支持的集群类型

clusterVersion

Array of strings

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

请求示例

安装1.28.6版本的coredns插件,插件实例数指定为2。

{
  "kind" : "Addon",
  "apiVersion" : "v3",
  "metadata" : {
    "annotations" : {
      "addon.install/type" : "install"
    }
  },
  "spec" : {
    "clusterID" : "597f2d95-44ab-11ef-9e39-0255ac100115",
    "version" : "1.28.6",
    "addonTemplateName" : "coredns",
    "values" : {
      "basic" : {
        "cluster_ip" : "10.247.3.10",
        "image_version" : "1.28.6",
        "swr_addr" : "swr.cn-north-7.myhuaweicloud.com",
        "swr_user" : "autopilot-official",
        "rbac_enabled" : true,
        "cluster_version" : "v1.28"
      },
      "flavor" : {
        "category" : [ "Autopilot" ],
        "is_default" : true,
        "name" : "autopilot-flavor1",
        "replicas" : 2,
        "resources" : [ {
          "id" : "coredns",
          "name" : "coredns",
          "limitsCpu" : "1000m",
          "requestsCpu" : "1000m",
          "limitsMem" : "2048Mi",
          "requestsMem" : "2048Mi"
        } ]
      },
      "custom" : {
        "multiAZBalance" : false,
        "multiAZEnabled" : false,
        "node_match_expressions" : [ ],
        "parameterSyncStrategy" : "ensureConsistent",
        "servers" : [ {
          "plugins" : [ {
            "name" : "bind",
            "parameters" : "{$POD_IP}"
          }, {
            "configBlock" : "servfail 5s",
            "name" : "cache",
            "parameters" : 30
          }, {
            "name" : "errors"
          }, {
            "name" : "health",
            "parameters" : "{$POD_IP}:8080"
          }, {
            "name" : "ready",
            "parameters" : "{$POD_IP}:8081"
          }, {
            "configBlock" : "pods insecure\nfallthrough in-addr.arpa ip6.arpa",
            "name" : "kubernetes",
            "parameters" : "cluster.local in-addr.arpa ip6.arpa"
          }, {
            "name" : "loadbalance",
            "parameters" : "round_robin"
          }, {
            "name" : "prometheus",
            "parameters" : "{$POD_IP}:9153"
          }, {
            "configBlock" : "policy random",
            "name" : "forward",
            "parameters" : ". /etc/resolv.conf"
          }, {
            "name" : "reload"
          } ],
          "port" : 5353,
          "zones" : [ {
            "zone" : "."
          } ]
        } ],
        "stub_domains" : { },
        "tolerations" : [ {
          "key" : "node.kubernetes.io/not-ready",
          "operator" : "Exists",
          "effect" : "NoExecute",
          "tolerationSeconds" : 60
        }, {
          "key" : "node.kubernetes.io/unreachable",
          "operator" : "Exists",
          "effect" : "NoExecute",
          "tolerationSeconds" : 60
        } ],
        "upstream_nameservers" : [ ]
      }
    }
  }
}

响应示例

状态码: 201

OK

{
  "kind" : "Addon",
  "apiVersion" : "v3",
  "metadata" : {
    "uid" : "90b775e0-5774-4e1d-ab3b-516332ba047a",
    "name" : "coredns",
    "alias" : "coredns",
    "creationTimestamp" : "2024-07-18T04:04:21Z",
    "updateTimestamp" : "2024-07-18T04:04:21Z"
  },
  "spec" : {
    "clusterID" : "597f2d95-44ab-11ef-9e39-0255ac100115",
    "version" : "1.28.6",
    "addonTemplateName" : "coredns",
    "addonTemplateType" : "helm",
    "addonTemplateLogo" : "",
    "addonTemplateLabels" : [ "ContainerNetwork" ],
    "description" : "CoreDNS is a DNS server that chains plugins and provides Kubernetes DNS Services",
    "values" : {
      "basic" : {
        "cluster_ip" : "10.247.3.10",
        "cluster_version" : "v1.28",
        "image_version" : "1.28.6",
        "platform" : "linux-amd64",
        "rbac_enabled" : true,
        "swr_addr" : "swr.cn-north-7.myhuaweicloud.com",
        "swr_user" : "autopilot-official"
      },
      "custom" : {
        "multiAZBalance" : false,
        "multiAZEnabled" : false,
        "node_match_expressions" : [ ],
        "parameterSyncStrategy" : "ensureConsistent",
        "servers" : [ {
          "plugins" : [ {
            "name" : "bind",
            "parameters" : "{$POD_IP}"
          }, {
            "configBlock" : "servfail 5s",
            "name" : "cache",
            "parameters" : 30
          }, {
            "name" : "errors"
          }, {
            "name" : "health",
            "parameters" : "{$POD_IP}:8080"
          }, {
            "name" : "ready",
            "parameters" : "{$POD_IP}:8081"
          }, {
            "configBlock" : "pods insecure\nfallthrough in-addr.arpa ip6.arpa",
            "name" : "kubernetes",
            "parameters" : "cluster.local in-addr.arpa ip6.arpa"
          }, {
            "name" : "loadbalance",
            "parameters" : "round_robin"
          }, {
            "name" : "prometheus",
            "parameters" : "{$POD_IP}:9153"
          }, {
            "configBlock" : "policy random",
            "name" : "forward",
            "parameters" : ". /etc/resolv.conf"
          }, {
            "name" : "reload"
          } ],
          "port" : 5353,
          "zones" : [ {
            "zone" : "."
          } ]
        } ],
        "stub_domains" : { },
        "tolerations" : [ {
          "effect" : "NoExecute",
          "key" : "node.kubernetes.io/not-ready",
          "operator" : "Exists",
          "tolerationSeconds" : 60
        }, {
          "effect" : "NoExecute",
          "key" : "node.kubernetes.io/unreachable",
          "operator" : "Exists",
          "tolerationSeconds" : 60
        } ],
        "upstream_nameservers" : [ ]
      },
      "flavor" : {
        "category" : [ "Autopilot" ],
        "is_default" : true,
        "name" : "autopilot-flavor1",
        "replicas" : 2,
        "resources" : [ {
          "id" : "coredns",
          "limitsCpu" : "1000m",
          "limitsMem" : "2048Mi",
          "name" : "coredns",
          "requestsCpu" : "1000m",
          "requestsMem" : "2048Mi"
        } ]
      },
      "systemAutoInject" : {
        "cluster" : {
          "clusterID" : "597f2d95-44ab-11ef-9e39-0255ac100115",
          "clusterNetworkMode" : "eni",
          "clusterVersion" : "v1.28.5-r0"
        },
        "user" : {
          "projectID" : "47eb1d64cbeb45cfa01ae20af4f4b563"
        }
      }
    }
  },
  "status" : {
    "status" : "installing",
    "Reason" : "",
    "message" : "",
    "targetVersions" : null,
    "isRollbackable" : false,
    "currentVersion" : {
      "version" : "1.28.6",
      "input" : {
        "basic" : {
          "cluster_ip" : "10.247.3.10",
          "image_version" : "1.28.6",
          "swr_addr" : "swr.cn-north-7.myhuaweicloud.com",
          "swr_user" : "autopilot-official"
        },
        "parameters" : {
          "autopilot-flavor1" : {
            "category" : [ "Autopilot" ],
            "is_default" : true,
            "name" : "autopilot-flavor1",
            "replicas" : 2,
            "resources" : [ {
              "limitsCpu" : 1,
              "limitsMem" : "2Gi",
              "name" : "coredns",
              "requestsCpu" : 1,
              "requestsMem" : "2Gi"
            } ]
          },
          "custom" : {
            "multiAZBalance" : false,
            "multiAZEnabled" : false,
            "node_match_expressions" : [ ],
            "parameterSyncStrategy" : "ensureConsistent",
            "servers" : [ {
              "plugins" : [ {
                "name" : "bind",
                "parameters" : "{$POD_IP}"
              }, {
                "configBlock" : "servfail 5s",
                "name" : "cache",
                "parameters" : 30
              }, {
                "name" : "errors"
              }, {
                "name" : "health",
                "parameters" : "{$POD_IP}:8080"
              }, {
                "name" : "ready",
                "parameters" : "{$POD_IP}:8081"
              }, {
                "configBlock" : "pods insecure\nfallthrough in-addr.arpa ip6.arpa",
                "name" : "kubernetes",
                "parameters" : "cluster.local in-addr.arpa ip6.arpa"
              }, {
                "name" : "loadbalance",
                "parameters" : "round_robin"
              }, {
                "name" : "prometheus",
                "parameters" : "{$POD_IP}:9153"
              }, {
                "configBlock" : "policy random",
                "name" : "forward",
                "parameters" : ". /etc/resolv.conf"
              }, {
                "name" : "reload"
              } ],
              "port" : 5353,
              "zones" : [ {
                "zone" : "."
              } ]
            } ],
            "stub_domains" : { },
            "tolerations" : [ {
              "effect" : "NoExecute",
              "key" : "node.kubernetes.io/not-ready",
              "operator" : "Exists",
              "tolerationSeconds" : 60
            }, {
              "effect" : "NoExecute",
              "key" : "node.kubernetes.io/unreachable",
              "operator" : "Exists",
              "tolerationSeconds" : 60
            } ],
            "upstream_nameservers" : [ ]
          },
          "flavor1" : {
            "is_default" : true,
            "name" : 2500,
            "recommend_cluster_flavor_types" : [ "small" ],
            "replicas" : 2,
            "resources" : [ {
              "limitsCpu" : "500m",
              "limitsMem" : "512Mi",
              "name" : "coredns",
              "requestsCpu" : "500m",
              "requestsMem" : "512Mi"
            } ]
          },
          "flavor2" : {
            "name" : 5000,
            "recommend_cluster_flavor_types" : [ "medium" ],
            "replicas" : 2,
            "resources" : [ {
              "limitsCpu" : "1000m",
              "limitsMem" : "1024Mi",
              "name" : "coredns",
              "requestsCpu" : "1000m",
              "requestsMem" : "1024Mi"
            } ]
          },
          "flavor3" : {
            "name" : 10000,
            "recommend_cluster_flavor_types" : [ "large" ],
            "replicas" : 2,
            "resources" : [ {
              "limitsCpu" : "2000m",
              "limitsMem" : "2048Mi",
              "name" : "coredns",
              "requestsCpu" : "2000m",
              "requestsMem" : "2048Mi"
            } ]
          },
          "flavor4" : {
            "name" : 20000,
            "recommend_cluster_flavor_types" : [ "xlarge" ],
            "replicas" : 4,
            "resources" : [ {
              "limitsCpu" : "2000m",
              "limitsMem" : "2048Mi",
              "name" : "coredns",
              "requestsCpu" : "2000m",
              "requestsMem" : "2048Mi"
            } ]
          }
        }
      },
      "stable" : true,
      "translate" : {
        "en_US" : {
          "addon" : {
            "changeLog" : "Support autopilot cluster",
            "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" : "les spécifications du plugin peuvent être associées aux spécifications du cluster. le fuseau horaire du plug-in est le même que celui du noeud",
            "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" : "支持autopilot集群",
            "description" : "CoreDNS是一款通过链式插件的方式给Kubernetes提供DNS解析服务的DNS服务器"
          },
          "description" : {
            "Parameters.custom.stub_domains" : "用户可对自定义的域名配置域名服务器,格式为一个键值对,键为DNS后缀域名,值为一个或一组DNS IP地址,如\"acme.local -- 1.2.3.4,6.7.8.9\"。",
            "Parameters.custom.upstream_nameservers" : "解析除集群内服务域名以及自定义域名之外的域名地址,格式为一个或一组DNS IP地址,如\"8.8.8.8\",\"8.8.4.4\"。",
            "Parameters.flavor1.description" : "并发域名解析能力 - 外部域名:2500 qps,内部域名:10000 qps",
            "Parameters.flavor1.name" : 2500,
            "Parameters.flavor2.description" : "并发域名解析能力 - 外部域名:5000 qps,内部域名:20000 qps",
            "Parameters.flavor2.name" : 5000,
            "Parameters.flavor3.description" : "并发域名解析能力 - 外部域名:10000 qps,内部域名:40000 qps",
            "Parameters.flavor3.name" : 10000,
            "Parameters.flavor4.description" : "并发域名解析能力 - 外部域名:20000 qps,内部域名:80000 qps",
            "Parameters.flavor4.name" : 20000
          },
          "key" : {
            "Parameters.custom.stub_domains" : "存根域",
            "Parameters.custom.upstream_nameservers" : "上游域名服务器"
          }
        }
      },
      "supportVersions" : null,
      "creationTimestamp" : "2024-02-19T11:33:46Z",
      "updateTimestamp" : "2024-02-21T01:24:05Z"
    }
  }
}

SDK代码示例

SDK代码示例如下。

安装1.28.6版本的coredns插件,插件实例数指定为2。

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

    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");

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

        CceClient client = CceClient.newBuilder()
                .withCredential(auth)
                .withRegion(CceRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateAutopilotAddonInstanceRequest request = new CreateAutopilotAddonInstanceRequest();
        InstanceRequest body = new InstanceRequest();
        Map<String, Object> listSpecValues = new HashMap<>();
        listSpecValues.put("basic", "{\"cluster_version\":\"v1.28\",\"rbac_enabled\":true,\"swr_user\":\"autopilot-official\",\"image_version\":\"1.28.6\",\"cluster_ip\":\"10.247.3.10\",\"swr_addr\":\"swr.cn-north-7.myhuaweicloud.com\"}");
        listSpecValues.put("flavor", "{\"replicas\":2,\"name\":\"autopilot-flavor1\",\"resources\":[{\"limitsCpu\":\"1000m\",\"name\":\"coredns\",\"id\":\"coredns\",\"limitsMem\":\"2048Mi\",\"requestsMem\":\"2048Mi\",\"requestsCpu\":\"1000m\"}],\"category\":[\"Autopilot\"],\"is_default\":true}");
        listSpecValues.put("custom", "{\"servers\":[{\"port\":5353,\"plugins\":[{\"name\":\"bind\",\"parameters\":\"{$POD_IP}\"},{\"configBlock\":\"servfail 5s\",\"name\":\"cache\",\"parameters\":30},{\"name\":\"errors\"},{\"name\":\"health\",\"parameters\":\"{$POD_IP}:8080\"},{\"name\":\"ready\",\"parameters\":\"{$POD_IP}:8081\"},{\"configBlock\":\"pods insecure\nfallthrough in-addr.arpa ip6.arpa\",\"name\":\"kubernetes\",\"parameters\":\"cluster.local in-addr.arpa ip6.arpa\"},{\"name\":\"loadbalance\",\"parameters\":\"round_robin\"},{\"name\":\"prometheus\",\"parameters\":\"{$POD_IP}:9153\"},{\"configBlock\":\"policy random\",\"name\":\"forward\",\"parameters\":\". /etc/resolv.conf\"},{\"name\":\"reload\"}],\"zones\":[{\"zone\":\".\"}]}],\"tolerations\":[{\"effect\":\"NoExecute\",\"tolerationSeconds\":60,\"key\":\"node.kubernetes.io/not-ready\",\"operator\":\"Exists\"},{\"effect\":\"NoExecute\",\"tolerationSeconds\":60,\"key\":\"node.kubernetes.io/unreachable\",\"operator\":\"Exists\"}],\"multiAZBalance\":false,\"node_match_expressions\":[],\"stub_domains\":{},\"multiAZEnabled\":false,\"parameterSyncStrategy\":\"ensureConsistent\",\"upstream_nameservers\":[]}");
        InstanceRequestSpec specbody = new InstanceRequestSpec();
        specbody.withVersion("1.28.6")
            .withClusterID("597f2d95-44ab-11ef-9e39-0255ac100115")
            .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 {
            CreateAutopilotAddonInstanceResponse response = client.createAutopilotAddonInstance(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.28.6版本的coredns插件,插件实例数指定为2。

 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
# 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"]

    credentials = BasicCredentials(ak, sk)

    client = CceClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(CceRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CreateAutopilotAddonInstanceRequest()
        listValuesSpec = {
            "basic": "{\"cluster_version\":\"v1.28\",\"rbac_enabled\":true,\"swr_user\":\"autopilot-official\",\"image_version\":\"1.28.6\",\"cluster_ip\":\"10.247.3.10\",\"swr_addr\":\"swr.cn-north-7.myhuaweicloud.com\"}",
            "flavor": "{\"replicas\":2,\"name\":\"autopilot-flavor1\",\"resources\":[{\"limitsCpu\":\"1000m\",\"name\":\"coredns\",\"id\":\"coredns\",\"limitsMem\":\"2048Mi\",\"requestsMem\":\"2048Mi\",\"requestsCpu\":\"1000m\"}],\"category\":[\"Autopilot\"],\"is_default\":true}",
            "custom": "{\"servers\":[{\"port\":5353,\"plugins\":[{\"name\":\"bind\",\"parameters\":\"{$POD_IP}\"},{\"configBlock\":\"servfail 5s\",\"name\":\"cache\",\"parameters\":30},{\"name\":\"errors\"},{\"name\":\"health\",\"parameters\":\"{$POD_IP}:8080\"},{\"name\":\"ready\",\"parameters\":\"{$POD_IP}:8081\"},{\"configBlock\":\"pods insecure\nfallthrough in-addr.arpa ip6.arpa\",\"name\":\"kubernetes\",\"parameters\":\"cluster.local in-addr.arpa ip6.arpa\"},{\"name\":\"loadbalance\",\"parameters\":\"round_robin\"},{\"name\":\"prometheus\",\"parameters\":\"{$POD_IP}:9153\"},{\"configBlock\":\"policy random\",\"name\":\"forward\",\"parameters\":\". /etc/resolv.conf\"},{\"name\":\"reload\"}],\"zones\":[{\"zone\":\".\"}]}],\"tolerations\":[{\"effect\":\"NoExecute\",\"tolerationSeconds\":60,\"key\":\"node.kubernetes.io/not-ready\",\"operator\":\"Exists\"},{\"effect\":\"NoExecute\",\"tolerationSeconds\":60,\"key\":\"node.kubernetes.io/unreachable\",\"operator\":\"Exists\"}],\"multiAZBalance\":false,\"node_match_expressions\":[],\"stub_domains\":{},\"multiAZEnabled\":false,\"parameterSyncStrategy\":\"ensureConsistent\",\"upstream_nameservers\":[]}"
        }
        specbody = InstanceRequestSpec(
            version="1.28.6",
            cluster_id="597f2d95-44ab-11ef-9e39-0255ac100115",
            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_autopilot_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.28.6版本的coredns插件,插件实例数指定为2。

 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
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")

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

    client := cce.NewCceClient(
        cce.CceClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.CreateAutopilotAddonInstanceRequest{}
	var listValuesSpec = map[string]interface{}{
        "basic": "{\"cluster_version\":\"v1.28\",\"rbac_enabled\":true,\"swr_user\":\"autopilot-official\",\"image_version\":\"1.28.6\",\"cluster_ip\":\"10.247.3.10\",\"swr_addr\":\"swr.cn-north-7.myhuaweicloud.com\"}",
        "flavor": "{\"replicas\":2,\"name\":\"autopilot-flavor1\",\"resources\":[{\"limitsCpu\":\"1000m\",\"name\":\"coredns\",\"id\":\"coredns\",\"limitsMem\":\"2048Mi\",\"requestsMem\":\"2048Mi\",\"requestsCpu\":\"1000m\"}],\"category\":[\"Autopilot\"],\"is_default\":true}",
        "custom": "{\"servers\":[{\"port\":5353,\"plugins\":[{\"name\":\"bind\",\"parameters\":\"{$POD_IP}\"},{\"configBlock\":\"servfail 5s\",\"name\":\"cache\",\"parameters\":30},{\"name\":\"errors\"},{\"name\":\"health\",\"parameters\":\"{$POD_IP}:8080\"},{\"name\":\"ready\",\"parameters\":\"{$POD_IP}:8081\"},{\"configBlock\":\"pods insecure\nfallthrough in-addr.arpa ip6.arpa\",\"name\":\"kubernetes\",\"parameters\":\"cluster.local in-addr.arpa ip6.arpa\"},{\"name\":\"loadbalance\",\"parameters\":\"round_robin\"},{\"name\":\"prometheus\",\"parameters\":\"{$POD_IP}:9153\"},{\"configBlock\":\"policy random\",\"name\":\"forward\",\"parameters\":\". /etc/resolv.conf\"},{\"name\":\"reload\"}],\"zones\":[{\"zone\":\".\"}]}],\"tolerations\":[{\"effect\":\"NoExecute\",\"tolerationSeconds\":60,\"key\":\"node.kubernetes.io/not-ready\",\"operator\":\"Exists\"},{\"effect\":\"NoExecute\",\"tolerationSeconds\":60,\"key\":\"node.kubernetes.io/unreachable\",\"operator\":\"Exists\"}],\"multiAZBalance\":false,\"node_match_expressions\":[],\"stub_domains\":{},\"multiAZEnabled\":false,\"parameterSyncStrategy\":\"ensureConsistent\",\"upstream_nameservers\":[]}",
    }
	versionSpec:= "1.28.6"
	specbody := &model.InstanceRequestSpec{
		Version: &versionSpec,
		ClusterID: "597f2d95-44ab-11ef-9e39-0255ac100115",
		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.CreateAutopilotAddonInstance(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

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

状态码

状态码

描述

201

OK

错误码

请参见错误码

相关文档