本文介绍如何使用EDAS提供的Java SDK调用API在K8s集群中创建多语言应用。

前提条件

调用API创建多语言应用前,您必须提前完成以下准备工作:
  • 安装EDAS的Java SDK。更多信息,请参见Java SDK接入指南
  • 确定应用部署地域,假设为cn-hangzhou
  • 创建微服务空间。具体操作,请参见创建命名空间

    如果已经存在命名空间,您可以调用ListUserDefineRegion接口查询用户自定义命名空间列表,获取目标命名空间的RegionId

  • 导入目标集群(假设集群ID为da60f685-558a-4e00-b549-15e9143d****)到命名空间。具体操作,请参见导入集群

    如果已经导入集群到目标命名空间,您可以调用ListCluster接口查询集群列表,获取目标集群的ClusterId

  • 已将多语言应用镜像保存在目标镜像仓库中。假设镜像仓库为image-demo-project,其中一个应用的镜像地址为registry-vpc.cn-hangzhou.aliyuncs.com/image-demo-project/productpage-python:v1

创建多语言应用

以下代码适用于在EDAS K8s环境快速创建多语言应用。代码中未设置调度规则、启动命令、环境变量等高级参数,如需了解更多API参数信息,请参见InsertK8sApplication
说明 本示例以创建一个名为Productpage的应用为例,如需创建多语言中的其他应用,请修改应用名称和镜像地址并重新运行程序。
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)  {
        //阿里云账号或RAM用户的AccessKey ID。
        String aliyun_user_ak = "<yourAccessKeyId>";
        //阿里云账号或RAM用户的AccessKey Secret。
        String aliyun_user_sk = "<yourAccessKeySecret>";
        //需要创建应用的目标地域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个字符。
        //此处以Productpage为例,应用名称在微服务空间内必须唯一。
        request.setAppName("Productpage");
        //集群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");
        //镜像仓库和镜像地址。
        request.setImageUrl("registry-vpc.cn-hangzhou.aliyuncs.com/image-demo-project/productpage-python:v1");
        request.setRepoId("image-demo-project");

        try {
            InsertK8sApplicationResponse response = client.getAcsResponse(request);
            System.out.println("AppId=" + response.getApplicationInfo().getAppId() + "\nAppName=" + response.getApplicationInfo().getAppName());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}
运行代码,返回示例如下:
AppId=3a2a3a70-fcb2-491c-a8cf-fd68097a****
AppName=Productpage

结果验证

您在创建应用后,可以调用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参数的值分析错误原因,解决问题后重新创建应用。