全部產品
Search
文件中心

Enterprise Distributed Application Service:使用API管理K8s叢集

更新時間:Jun 30, 2024

本文介紹如何使用EDAS提供的Java SDK調用API匯入和取消匯入K8s叢集。

前提條件

在匯入或取消匯入K8s叢集前,您必須提前完成以下準備工作:

  • 安裝EDAS的Java SDK。更多資訊,請參見Java SDK接入指南
  • 確定匯入或取消匯入K8s叢集的地區,假設為cn-hangzhou

  • Container ServiceKubernetes版控制台建立叢集。具體操作,請參見:

    如果已經建立Container ServiceK8s叢集或Serverless K8s叢集,請調用GetK8sCluster介面查詢Container ServiceK8s叢集或Serverless K8s叢集列表,擷取目的地組群的ClusterId,假設為da60f685-558a-4e00-b549-15e9143d****

  • 建立微服務空間。具體操作,請參見建立微服務空間

    如果已經存在微服務空間,您可以調用ListUserDefineRegion介面查詢使用者自訂微服務空間列表,擷取目標微服務空間的RegionId

Kubernetes叢集功能簡介

現EDAS支援匯入在Container ServiceKubernetes版控制台建立的專有版Kubernetes叢集、託管版Kubernetes叢集和Serverless Kubernetes叢集,3種叢集形態的對比詳情,請參見什麼是Container Service Kubernetes 版

專有版Kubernetes叢集和託管版Kubernetes叢集匯入到EDAS中對應的是Container ServiceK8s叢集,Serverless Kubernetes叢集匯入到EDAS中對應的是Serverless K8s叢集。

混合雲叢集(其他雲域或IDC內自建的叢集)需要先將這些叢集註冊到Container ServiceKubernetes版控制台,然後將叢集匯入EDAS。混合雲叢集匯入到EDAS對應的是Container ServiceK8s叢集。

混合雲叢集註冊到Container ServiceKubernetes版的具體操作,請參見通過控制台建立註冊叢集

在EDAS中管理的K8s叢集相對自建K8s叢集來說有以下功能優勢:

  • 在雲原生Kubernetes之上,提供應用託管能力,以應用視角一站式完成開源微服務治理和K8s應用輕量化營運:

    • 應用為中心的視角,管理K8s的原生工作負載如Deployment、Pod等,提供多AZ執行個體打散的高可用部署。

    • 提供分批發布、按流量比例、請求參數的金絲雀灰階發布,藉助EDAS全維度監控的發布變更單,讓您的變更記錄可跟蹤。

    • EDAS對接了主流DevOps系統,助力企業CI/CD落地,降本增效。

  • 在開源微服務體系之上,對於使用市面上近五年的Spring Cloud和Dubbo架構自建的微服務應用無需修改任何代碼即可遷移至EDAS,支援所有應用程式框架的微服務治理:

    • 支援應用發布過程中的無損下線、服務壓測。

    • 應用運行時的服務鑒權、限流降級、離群執行個體摘除。

    • 應用營運的服務查詢、服務測試。

  • 通過產品化的方式,輸出阿里巴巴應用安全生產的三板斧理念,實現可觀測、可灰階、可復原,讓您的企業立即落地安全生產。

    • 可觀測:通過應用總覽、新版發布變更記錄和發布後自動產生發布報告來實現多維度全流程監控。

    • 可灰階:支援金絲雀發布,支援應用按照流量比例或請求內容策略配置實現灰階。

    • 可復原:支援發布過程一鍵復原,並支援已運行應用回退至某歷史版本。

匯入叢集

以下代碼用於匯入K8s叢集到目標微服務空間

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.ImportK8sClusterRequest;
import com.aliyuncs.edas.model.v20170801.ImportK8sClusterResponse;

public class ImportK8sCluster {

    public static void main(String[] args)  {
        // 阿里雲帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM使用者進行API訪問或日常營運,請登入RAM控制台建立RAM使用者。
        // 此處以把AccessKey和AccessKeySecret儲存在環境變數為例說明。您可以根據業務需要,儲存到設定檔裡。
        // 強烈建議不要把AccessKey和AccessKeySecret儲存到代碼裡,會存在密鑰泄漏風險。
        String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
        String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
        //匯入K8s叢集的所在地區ID。
        String region_id = "cn-hangzhou";

        DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
        DefaultAcsClient client = new DefaultAcsClient(defaultProfile);

        //建立API請求,並設定參數。
        ImportK8sClusterRequest request = new ImportK8sClusterRequest();
        //指定K8s叢集的叢集ID。
        request.setClusterId("da60f685-558a-4e00-b549-15e9143d****");
        //指定K8s叢集匯入到的目標微服務空間。
        request.setNamespaceId("cn-hangzhou:doc");
        //是否安裝服務網格,true表示安裝,false表示不安裝。
        request.setEnableAsm(true);


        try {
            ImportK8sClusterResponse response = client.getAcsResponse(request);
            System.out.println("Data=" + response.getData() + "\nMessage=" + response.getMessage()+ "\nRequestId=" + response.getRequestId());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

運行程式,返回的執行結果如下:

Data=4d45f6db-2942-4747-a7ba-b0d43273****
Message=success
RequestId=847CF607-B352-4A71-828A-C0F8DECDEDF6

取消匯入叢集

以下代碼用於取消匯入叢集。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.DeleteClusterRequest;
import com.aliyuncs.edas.model.v20170801.DeleteClusterResponse;

public class DeleteCluster {

    public static void main(String[] args)  {
        // 阿里雲帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM使用者進行API訪問或日常營運,請登入RAM控制台建立RAM使用者。
        // 此處以把AccessKey和AccessKeySecret儲存在環境變數為例說明。您可以根據業務需要,儲存到設定檔裡。
        // 強烈建議不要把AccessKey和AccessKeySecret儲存到代碼裡,會存在密鑰泄漏風險。
        String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
        String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
        //取消匯入K8s叢集的所在地區ID。
        String region_id = "cn-hangzhou";

        DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
        DefaultAcsClient client = new DefaultAcsClient(defaultProfile);

        //建立API請求,並設定參數。
        DeleteClusterRequest request = new DeleteClusterRequest();
        //需要取消匯入叢集的叢集ID。
        request.setClusterId("da60f685-558a-4e00-b549-15e9143d****");


        try {
            DeleteClusterResponse response = client.getAcsResponse(request);
            System.out.println("Data=" + response.getData() + "\nMessage=" + response.getMessage()+ "\nRequestId=" + response.getRequestId());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

運行程式,返回的執行結果如下:

Data=true
Message=success
RequestId=68CDDEC0-593E-4C1A-9CDC-96F9FEF0924E

結果驗證

在匯入或者取消匯入K8s叢集的操作後,您可以調用GetK8sCluster介面擷取Container ServiceK8s叢集或Serverless K8s叢集列表,根據返回結果中的叢集匯入狀態(ClusterImportStatus)參數值判斷您是否操作成功。

調用GetK8sCluster介面返回的結果如下:

{
  "RequestId": "809FCC08-FFE1-417D-8ADF-F5D5BFD968D7",
  "Message": "success",
  "ClusterPage": {
    "ClusterList": {
      "Cluster": [
        {
          "ClusterImportStatus": 1,
          "NodeNum": 6,
          "ClusterId": "da60f685-558a-4e00-b549-15e9143d****",
          ......
        },
        {
          "ClusterImportStatus": 0,
          "NodeNum": 3,
          "ClusterId": "6dca9bc0-b928-4f2c-ae76-396bd108****",
          ......
        }
      ]
    },
    "PageSize": 12,
    "CurrentPage": 0,
    "TotalSize": 12
  },
  "Code": 200
}

請查看上述執行結果中的叢集匯入狀態ClusterImportStatus參數值,通過該值判斷匯入或取消匯入K8s叢集是否成功。ClusterImportStatus的取值如下:

  • 0:沒有匯入

  • 1:匯入成功

  • 2:匯入失敗

  • 3:正在匯入

  • 4:叢集已刪除