華為云計算 云知識 回滾AddonInstanceRollbackAddonInstance
回滾AddonInstanceRollbackAddonInstance

 

功能介紹

將插件實例回滾到升級前的版本。只有在當(dāng)前插件實例版本支持回滾到升級前的版本(status.isRollbackable為true),且插件實例狀態(tài)為running(運行中)、available(可用)、abnormal(不可用)、upgradeFailed(升級失敗)、rollbackFailed(回滾失?。r支持回滾。

調(diào)用方法

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

URI

POST /api/v3/addons/{id}/operation/rollback

表1 路徑參數(shù)

參數(shù)

是否必選

參數(shù)類型

描述

id

String

插件實例ID

請求參數(shù)

表2 請求Header參數(shù)

參數(shù)

是否必選

參數(shù)類型

描述

X-Auth-Token

String

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

表3 請求Body參數(shù)

參數(shù)

是否必選

參數(shù)類型

描述

clusterID

String

集群ID

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

狀態(tài)碼: 200

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

參數(shù)

參數(shù)類型

描述

kind

String

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

apiVersion

String

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

metadata

AddonMetadata object

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

spec

InstanceSpec object

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

status

AddonInstanceStatus object

插件實例狀態(tài)

表5 AddonMetadata

參數(shù)

參數(shù)類型

描述

uid

String

唯一id標(biāo)識

name

String

插件名稱

alias

String

插件別名

labels

Map<String,String>

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

annotations

Map<String,String>

插件注解,由key/value組成

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

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

updateTimestamp

String

更新時間

creationTimestamp

String

創(chuàng)建時間

表6 InstanceSpec

參數(shù)

參數(shù)類型

描述

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>

插件模板安裝參數(shù)(各插件不同),請根據(jù)具體插件模板信息填寫安裝參數(shù)。

表7 AddonInstanceStatus

參數(shù)

參數(shù)類型

描述

status

String

插件實例狀態(tài), 取值如下

  • running:運行中,表示插件全部實例狀態(tài)都在運行中,插件正常使用。

  • abnormal:不可用,表示插件狀態(tài)異常,插件不可使用??牲c擊插件名稱查看實例異常事件。

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

  • installFailed:安裝失敗,表示插件安裝失敗,需要卸載后重新安裝。

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

  • upgradeFailed:升級失敗,表示插件升級失敗,可重試升級或卸載后重新安裝。

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

  • deleteFailed:刪除失敗,表示插件刪除失敗,可重試卸載。

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

  • available:部分就緒,表示插件下只有部分實例狀態(tài)為運行中,插件部分功能可用。

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

  • rollbackFailed:回滾失敗,表示插件回滾失敗,可重試回滾或卸載后重新安裝。

  • unknown:未知狀態(tài),表示插件模板實例不存在。

Reason

String

插件安裝失敗原因

message

String

安裝錯誤詳情

targetVersions

Array of strings

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

currentVersion

Versions object

當(dāng)前插件實例使用的具體插件版本信息

isRollbackable

Boolean

是否支持回滾到插件升級前的插件版本

previousVersion

String

插件升級或回滾前的版本

表8 Versions

參數(shù)

參數(shù)類型

描述

version

String

插件版本號

input

Object

插件安裝參數(shù)

stable

Boolean

是否為穩(wěn)定版本

translate

Object

供界面使用的翻譯信息

supportVersions

Array of SupportVersions objects

支持集群版本號

creationTimestamp

String

創(chuàng)建時間

updateTimestamp

String

更新時間

表9 SupportVersions

參數(shù)

參數(shù)類型

描述

clusterType

String

支持的集群類型

clusterVersion

Array of strings

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

請求示例

{
  "clusterID" : "******"
}

響應(yīng)示例

狀態(tài)碼: 200

插件實例回滾成功

{
  "kind" : "Addon",
  "apiVersion" : "v3",
  "metadata" : {
    "uid" : "******",
    "name" : "everest",
    "alias" : "everest",
    "creationTimestamp" : "2023-03-15T02:48:01Z",
    "updateTimestamp" : "2023-03-15T04:18:45Z"
  },
  "spec" : {
    "clusterID" : "******",
    "version" : "2.1.16",
    "addonTemplateName" : "everest",
    "addonTemplateType" : "helm",
    "addonTemplateLogo" : "******",
    "addonTemplateLabels" : [ "Storage" ],
    "description" : "Everest is a cloud native container storage system based on CSI, used\nto 
support cloud storages services for Kubernetes", "values" : { "basic" : { "base_image" : "euleros", "bms_url" : "******", "cluster_version" : "v1.25", "driver_init_image_version" : "2.1.16", "ecsEndpoint" : "******", "euleros_version" : "2.2.5", "everest_image_version" : "2.1.16", "evs_url" : "******", "iam_url" : "******", "ims_url" : "******", "obs_url" : "******", "platform" : "linux-amd64", "rbac_enabled" : true, "sfs30_url" : "******", "sfs_turbo_url" : "******", "sfs_url" : "******", "supportHcs" : false, "swr_addr" : "******", "swr_user" : "******" }, "custom" : { "cluster_id" : "******", "cluster_version" : "v1.25.3-r0", "csi_attacher_detach_worker_threads" : "60", "csi_attacher_worker_threads" : "60", "default_vpc_id" : "******", "disable_auto_mount_secret" : false, "enable_node_attacher" : false, "flow_control" : { }, "multiAZEnabled" : false, "over_subscription" : "80", "project_id" : "******", "volume_attaching_flow_ctrl" : "0" }, "flavor" : { "category" : [ "CCE", "Turbo" ], "description" : "High avaiable", "name" : "HA", "replicas" : 2, "resources" : [ { "limitsCpu" : "250m", "limitsMem" : "1500Mi", "name" : "everest-csi-controller", "requestsCpu" : "250m", "requestsMem" : "600Mi" }, { "limitsCpu" : "500m", "limitsMem" : "300Mi", "name" : "everest-csi-driver", "requestsCpu" : "100m", "requestsMem" : "300Mi" } ] }, "multiAZPreferred" : { "podAntiAffinity" : { "preferredDuringSchedulingIgnoredDuringExecution" : [ { "podAffinityTerm" : { "labelSelector" : { "matchExpressions" : [ { "key" : "app", "operator" : "In", "values" : [ "everest-csi-controller" ] } ] }, "topologyKey" : "topology.kubernetes.io/zone" }, "weight" : 100 } ] } }, "multiAZRequired" : { "podAntiAffinity" : { "requiredDuringSchedulingIgnoredDuringExecution" : [ { "labelSelector" : { "matchExpressions" : [ { "key" : "app", "operator" : "In", "values" : [ "everest-csi-controller" ] } ] }, "topologyKey" : "topology.kubernetes.io/zone" } ] } }, "systemAutoInject" : { "cluster" : { "category" : "CCE", "clusterID" : "******", "clusterNetworkMode" : "vpc-router", "clusterVersion" : "v1.25.3-r0" }, "user" : { "projectID" : "******" } }, "tolerations" : [ { "effect" : "NoExecute", "key" : "node.kubernetes.io/not-ready", "operator" : "Exists", "tolerationSeconds" : 60 }, { "effect" : "NoExecute", "key" : "node.kubernetes.io/unreachable", "operator" : "Exists", "tolerationSeconds" : 60 } ] } }, "status" : { "status" : "rollbacking", "Reason" : "Rollback to 4", "message" : "", "targetVersions" : [ "2.1.18", "2.1.19" ], "isRollbackable" : false, "previousVersion" : "2.1.19", "currentVersion" : { "version" : "2.1.16", "input" : { "basic" : { "bms_url" : "******", "driver_init_image_version" : "2.1.16", "ecsEndpoint" : "******", "everest_image_version" : "2.1.16", "evs_url" : "******", "iam_url" : "******", "ims_url" : "******", "obs_url" : "******", "platform" : "linux-amd64", "sfs30_url" : "******", "sfs_turbo_url" : "******", "sfs_url" : "******", "supportHcs" : false, "swr_addr" : "******", "swr_user" : "******" }, "parameters" : { "common" : { "defaultVPCId" : 0 }, "custom" : { "cluster_id" : "", "csi_attacher_detach_worker_threads" : "60", "csi_attacher_worker_threads" : "60", "default_vpc_id" : "", "disable_auto_mount_secret" : false, "enable_node_attacher" : false, "flow_control" : { }, "multiAZEnabled" : false, "over_subscription" : "80", "project_id" : "", "volume_attaching_flow_ctrl" : "0" }, "flavor1" : { "description" : "High avaiable", "name" : "HA", "replicas" : 2, "resources" : [ { "limitsCpu" : "250m", "limitsMem" : "1500Mi", "name" : "everest-csi-controller", "requestsCpu" : "250m", "requestsMem" : "600Mi" }, { "limitsCpu" : "500m", "limitsMem" : "300Mi", "name" : "everest-csi-driver", "requestsCpu" : "100m", "requestsMem" : "300Mi" } ] }, "flavor2" : { "description" : "Has only one instance", "name" : "Single", "replicas" : 1, "resources" : [ { "limitsCpu" : "250m", "limitsMem" : "600Mi", "name" : "everest-csi-controller", "requestsCpu" : "250m", "requestsMem" : "600Mi" }, { "limitsCpu" : "100m", "limitsMem" : "300Mi", "name" : "everest-csi-driver", "requestsCpu" : "100m", "requestsMem" : "300Mi" } ] }, "flavor3" : { "description" : "custom resources", "name" : "custom-resources", "replicas" : 2, "resources" : [ { "limitsCpu" : "250m", "limitsMem" : "2000Mi", "name" : "everest-csi-controller", "requestsCpu" : "250m", "requestsMem" : "1500Mi" }, { "limitsCpu" : "500m", "limitsMem" : "300Mi", "name" : "everest-csi-driver", "requestsCpu" : "100m", "requestsMem" : "300Mi" } ] } } }, "stable" : true, "translate" : { "en_US" : { "addon" : { "changeLog" : "******", "description" : "******" }, "description" : { "Parameters.flavor1.description" : "******", "Parameters.flavor1.name" : "******", "Parameters.flavor2.description" : "******", "Parameters.flavor2.name" : "******", "Parameters.flavor3.name" : "******" } }, "zh_CN" : { "addon" : { "changeLog" : "******", "description" : "******" }, "description" : { "Parameters.flavor1.description" : "******", "Parameters.flavor1.name" : "******", "Parameters.flavor2.description" : "******", "Parameters.flavor2.name" : "******", "Parameters.flavor3.description" : "******", "Parameters.flavor3.name" : "******" } } }, "supportVersions" : null, "creationTimestamp" : "2023-02-21T16:29:02Z", "updateTimestamp" : "2023-02-22T06:49:50Z" } } }

SDK代碼示例

SDK代碼示例如下。

  • Java
  • Python
  • Go
  • 更多
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 RollbackAddonInstanceSolution {

    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();
        RollbackAddonInstanceRequest request = new RollbackAddonInstanceRequest();
        request.withId("<id>");
        AddonInstanceRollbackRequest body = new AddonInstanceRollbackRequest();
        body.withClusterID("******");
        request.withBody(body);
        try {
            RollbackAddonInstanceResponse response = client.rollbackAddonInstance(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());
        }
    }
}
# 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 = RollbackAddonInstanceRequest()
        request.id = "<id>"
        request.body = AddonInstanceRollbackRequest(
            cluster_id="******"
        )
        response = client.rollback_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)
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.RollbackAddonInstanceRequest{}
	request.Id = "<id>"
	request.Body = &model.AddonInstanceRollbackRequest{
		ClusterID: "******",
	}
	response, err := client.RollbackAddonInstance(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

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

狀態(tài)碼

狀態(tài)碼

描述

200

插件實例回滾成功

錯誤碼

請參見錯誤碼。