本文介绍如何使用EDAS提供的Java SDK调用API在K8s集群中创建Java应用(JAR包或WAR包)。
前提条件
调用API创建应用前,您必须提前完成以下准备工作:
安装EDAS的Java SDK。更多信息,请参见Java SDK接入指南。
确定应用部署地域。
创建微服务空间。具体操作,请参见创建命名空间。
如果已经存在命名空间,您可以调用ListUserDefineRegion接口查询用户自定义命名空间列表,获取目标命名空间的RegionId。
导入目标集群(假设集群ID为da60f685-558a-4e00-b549-15e9143d****)到命名空间。具体操作,请参见导入集群。
如果已经导入集群到目标命名空间,您可以调用ListCluster接口查询集群列表,获取目标集群的ClusterId。
已将应用部署包(JAR包或WAR包)上传至目标地址。本示例以OSS存储路径为例,假设为https://doc***.oss-cn-hangzhou.aliyuncs.com/sc-****-D-0.0.1-SNAPSHOT.jar。
创建Java应用(JAR包或WAR包)
以下代码适用于在EDAS K8s环境中快速创建Java应用(JAR包或WAR包)。代码中未设置调度规则、启动命令、环境变量等高级参数,如需了解更多API参数信息,请参见InsertK8sApplication。
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.InsertK8sApplicationRequest;
import com.aliyuncs.edas.model.v20170801.InsertK8sApplicationResponse;
public class InsertK8sApplication {
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");
//需要创建应用的目标地域ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//创建API请求,并设置参数。
InsertK8sApplicationRequest request = new InsertK8sApplicationRequest();
//自定义设置应用名称。必须以字母开头,允许数字、字母、短划线(-)组合。最多可输入36个字符。
request.setAppName("edas-SDK0414java");
//集群ID。
request.setClusterId("da60f685-558a-4e00-b549-15e9143d****");
//应用实例数。
request.setReplicas(2);
//应用运行过程中,应用实例的CPU限额、内存限额等,0表示不限制。
request.setLimitCpu(0);
request.setLimitMem(0);
request.setRequestsCpu(0);
request.setRequestsMem(0);
//EDAS微服务空间对应ID,非默认微服务空间须填写。
request.setLogicalRegionId("cn-hangzhou:doc");
//部署包类型、地址和版本,支持设置为FatJar和WAR。
request.setPackageType("FatJar");
request.setPackageUrl("https:doc***.oss-cn-hangzhou.aliyuncs.com/sc-****-D-0.0.1-SNAPSHOT.jar");
request.setPackageVersion("20210423:1442");
//部署的包依赖的JDK版本。可选的参数值为Open JDK 7和Open JDK 8。
request.setJDK( "Open JDK 8");
try {
InsertK8sApplicationResponse response = client.getAcsResponse(request);
System.out.println("AppId=" + response.getApplicationInfo().getAppId() + "\nAppName=" + response.getApplicationInfo().getAppName() + "\nChangeOrderId=" + response.getApplicationInfo().getChangeOrderId());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
运行代码,返回示例如下:
AppId=8ae9cfdb-c20c-4de0-9b21-2b31e7b6****
AppName=edas-SDK0414java
ChangeOrderId=44a1402a-9e59-4494-baa9-f18877e0****
结果验证
您在创建应用后,可以调用GetChangeOrderInfo接口查看应用变更流程详情,获取创建应用的变更状态。具体API参数详情,请参见GetChangeOrderInfo。
调用GetChangeOrderInfo接口查看应用变更流程详情,返回的执行结果如下:
{
"Message": "success",
"RequestId": "C26DBA1C-9A38-442D-A4D5-587515C5E522",
"Code": 200,
"changeOrderInfo": {
"Status": 3,
"Desc": "Version: 20210423:1442 | Package Name: sc-provider-D-0.0.1-SNAPSHOT.jar",
"PipelineInfoList": {
"PipelineInfo": [
{
......
"TaskMessage": "Apply success. <br>application is ready at desired state, version: 1"
......
//此处未罗列全部执行结果,仅供参考。
请查看上述执行结果中的changeOrderInfo.Status参数值,通过该值判断创建应用是否成功。changeOrderInfo.Status的取值如下:
0:准备
1:执行中
2:执行成功
3:执行失败
6:终止
8:手动分批发布模式下,等待手工确认执行下一批。
9:自动分批发布模式下,等待下一批执行中。
10:系统异常执行失败
如果返回结果中的changeOrderInfo.Status值为3,即表示创建应用失败。您可以根据返回结果中的TaskMessage参数的值分析错误原因,解决问题后重新创建应用。