刘伟业 阿里云智能混合云PDSA团队 高级解决方案工程师

曾就职于新华三云做软件定义数据中心解决方案,负责多个省级云平台的架构设计和落地。现就职于阿里云智能混合云PDSA团队负责容器和云原生产品的方案设计、POC和最佳实践工作。

前言

上期本文对基于专有云EDAS OpenAPI构建企业级云原生CICD的前期工作进行了介绍,本期将对调用EDAS OpenAPI拉取镜像部署应用进行详细介绍。

流程

Jenkins构建完项目可以按版本号把镜像上传到镜像仓库,调用EDAS OpenAPI拉取镜像部署应用、通知相关人员等。

CICD流程调用EDAS OpenAPI接口:
  • 调用GetK8sApplication接口获取容器服务Kubernetes中部署的应用镜像URL信息。
  • 调用DeployK8sApplication接口拉取应用镜像部署容器服务K8S应用。

准备工作

  • 说明
    在专有云中调用EDAS的OpenAPI需要完成以下3件事:
    • 在JAVA项目工程中声明并引入EDAS-SDK。
    • 获取EDAS-OpenAPI对外的服务域名,即专有云EDAS-endpoint地址。
    • 在适配插件中拼装请求报文,完成API调用的指令。
  • 在适配插件中引入EDAS-SDK

    在IDE工具上打开Maven项目下的pom.xml文件,在文件中添加sdk:aliyun-java-sdk-core和sdk:aliyun-java-sdk-edas依赖。

    图1:添加依赖
  • 获取部门信息

    登录Apsara Stack控制台,在左侧导航栏选择用户中心-->部门管理,选择对应的部门,单击“获取accesskey”。获取RegionId、AccessKey ID和AccessKey Secret。

    图2:Apsara Stack控制台部门管理图3:部门相关信息
  • 获取EDAS API服务地址endpoint

    登录天基平台,选择报表-->全部报表-->资源申请报表,全局搜索edas,如下图中Parameters详情界面domain即endpoint的值。

    图4:天基获取EDAS API服务地址endpoint-1图5:天基获取EDAS API服务地址endpoint-2

GetK8sApplication获取容器服务中部署的应用信息

获取容器服务Kubernetes中部署的应用信息。
  • 请求URL

    /pop/v5/changeorder/co_application

  • 请求参数3.请求参数
  • 返回参数3.返回参数
  • 请求示例
    public class GetK8sApplicationSimpleInfo {
        public String getK8sApplication() throws ClientException {
            //请填写要执行 API 调用的应用所在地域 ID.
            String regionId = "your_ regionId";
            //请填写阿里云主账号或子账号 AccessKey ID.
            String accessKeyId = "your_accessKeyId ";
            //请填写阿里云主账号或子账号 AccessKey Secret.
            String accessKeySecret = "your_accessKeySecret ";
            String productName = "Edas";
            String domain = "edas-api.console.cn-neimeng-poc2-d01.cloud.poc2.com";
            DefaultProfile defaultProfile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            DefaultAcsClient defaultAcsClient = new DefaultAcsClient(defaultProfile);
            GetK8sApplicationRequest request = new GetK8sApplicationRequest();
            request.setAppId("f66a22ec-c98d-4b79-ab41-c8641bf9ac87");
            request.setEndpoint("edas-api.console.your_regionId.cloud.poc2.com");
            GetK8sApplicationResponse response;
            String resp = "";
            try {
                response = defaultAcsClient.getAcsResponse(request);
                resp = "返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage()
                + "镜像URL:" + response.getApplcation().getImageInfo().getImageUrl();
                System.out.printf("返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage()
                    + "镜像URL:" + response.getApplcation().getImageInfo().getImageUrl());
            } catch (ClientException e) {
                e.printStackTrace();
            }
            return resp;
        }
    }
  • 返回示例图6:GetK8sApplication返回示例

DeployK8sApplication部署容器服务K8S应用

部署容器服务K8S应用。
  • 请求URL

    /pop/v5/k8s/acs/k8s_apps

  • 请求参数4.请求参数
  • 返回参数4.返回参数
  • 请求示例
    public class DeployK8sApplictionSimpleInfo {
        public String deployK8sApplication() {
            //请填写阿里云主账号或子账号 AccessKey ID.
            String aliyun_user_ak = "your_AccessKey ID ";
            //请填写阿里云主账号或子账号 AccessKey Secret.
            String aliyun_user_sk = "your_ AccessKey Secret ";
            //请填写要执行 API 调用的应用所在地域 ID.
            String region_id ="your_regionid";
            DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
            DefaultAcsClient defaultAcsClient = new DefaultAcsClient(defaultProfile);
            DeployK8sApplicationRequest request = new DeployK8sApplicationRequest();
            request.setAppId("f66a22ec-c98d-4b79-ab41-c8641bf9ac87");
            request.setEndpoint("edas-api.console. your_regionId.cloud.poc2.com");
            request.setImage("cr.registry.cloud.poc2.com/pdsa/k8s-nacos-consumer:v2");
            request.setImageTag("v2");
            request.setJDK("Open JDK 8");
            request.setEnvs("[{\"name\":\"updatetime\",\"value\":\""+new Date() + "\"}]");
            DeployK8sApplicationResponse response;
            String resp = "";
            try {
                response = defaultAcsClient.getAcsResponse(request);
                resp = "返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage();
                System.out.printf("返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage());
            } catch (ClientException e) {
                e.printStackTrace();
            }
            return resp;
        }
    }
  • 返回示例图7:DeployK8sApplication返回示例