本文介紹如何使用EDAS提供的Java SDK調用API導入和取消導入K8s集群。
前提條件
在導入或取消導入K8s集群前,您必須提前完成以下準備工作:
- 安裝EDAS的Java SDK。更多信息,請參見Java SDK接入指南。
確定導入或取消導入K8s集群的地域,假設為cn-hangzhou。
在容器服務Kubernetes版控制臺創建集群。具體操作,請參見:
在EDAS中使用容器服務K8s集群,請在容器服務Kubernetes版控制臺創建托管版Kubernetes集群或專有版Kubernetes集群,請參見:
在EDAS中使用Serverless K8s集群,請在容器服務Kubernetes版控制臺創建Serverless Kubernetes集群,請參見創建ACK Serverless集群。
如果已經創建容器服務K8s集群或Serverless K8s集群,請調用GetK8sCluster接口查詢容器服務K8s集群或Serverless K8s集群列表,獲取目標集群的ClusterId,假設為da60f685-558a-4e00-b549-15e9143d****。
創建微服務空間。具體操作,請參見創建命名空間。
如果已經存在命名空間,您可以調用ListUserDefineRegion接口查詢用戶自定義命名空間列表,獲取目標命名空間的RegionId。
Kubernetes集群功能簡介
現EDAS支持導入在容器服務Kubernetes版控制臺創建的專有版Kubernetes集群、托管版Kubernetes集群和Serverless Kubernetes集群,3種集群形態的對比詳情,請參見什么是容器服務 Kubernetes 版。
專有版Kubernetes集群和托管版Kubernetes集群導入到EDAS中對應的是容器服務K8s集群,Serverless Kubernetes集群導入到EDAS中對應的是Serverless K8s集群。
混合云集群(其他云域或IDC內自建的集群)需要先將這些集群注冊到容器服務Kubernetes版控制臺,然后將集群導入EDAS。混合云集群導入到EDAS對應的是容器服務K8s集群。
混合云集群注冊到容器服務Kubernetes版的具體操作,請參見通過控制臺創建注冊集群。
在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接口獲取容器服務K8s集群或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:集群已刪除