日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用API在K8s集群中金絲雀發布應用

本文介紹如何使用EDAS提供的Java SDK調用API在K8s集群中進行金絲雀發布應用(JAR包、WAR包和鏡像)。

準備工作

金絲雀發布應用前,您必須提前完成以下準備工作:

  • 確定應用部署地域,假設為cn-hangzhou
  • 在EDAS K8s環境中創建應用。目前支持多種創建應用的方式,請根據實際需求選擇:

    如果已經創建應用,您可以調用ListApplication接口查詢應用列表,獲取目標應用的AppId,假設為6bbc57a2-a017-4bec-b521-49a15bd3****

  • 已將應用升級部署包(JAR包、WAR包和鏡像)上傳至目標地址。
    • JAR包或WAR包:本示例以OSS存儲路徑為例,假設為https:doc***.oss-cn-hangzhou.aliyuncs.com/sc-****-D-0.0.2-SNAPSHOT.jar
    • 鏡像:假設鏡像倉庫為image-demo-project,鏡像地址為registry-vpc.cn-hangzhou.aliyuncs.com/image-demo-project/provider:2.0

背景信息

使用API金絲雀發布應用,在首批灰度發布后,您必須手動確認繼續剩余批次的發布。在確認剩余批次發布前,您可以進行小規模驗證,驗證后,再繼續剩余批次的發布,即將應用全量升級到新版本。

使用API金絲雀發布應用,設置剩余批次(除首批灰度發布外)的發布方式時推薦選用自動分批發布。如果您選用手動分批發布方式,則還需要調用ContinuePipeline接口手動確認執行下一批發布。

此處提供兩種金絲雀發布策略示例,請根據您的實際場景選擇并修改策略。

  • 首批灰度發布2個Pod實例+剩余Pod實例分2批發布+自動分批+分批間隔1分鐘。

    {"type":"GrayBatchUpdate","batchUpdate":{"batch":2,"releaseType":"auto","batchWaitTime":1},"grayUpdate":{"gray":2}}
  • 首批灰度發布2個Pod實例+剩余Pod實例分2批發布+手動分批。

    {"type":"GrayBatchUpdate","batchUpdate":{"batch":2,"releaseType":"manual"},"grayUpdate":{"gray":2}}

使用JAR包或WAR包金絲雀發布應用

  1. 運行以下示例代碼,使用JAR包或WAR包金絲雀發布應用。

    以下代碼適用于在EDAS K8s集群中金絲雀發布應用(JAR包)。代碼中未設置調度規則、啟動命令、環境變量等高級參數,如需了解更多API參數信息,請參見DeployK8sApplication

    說明

    如果您需要使用WAR包金絲雀應用,請根據需要在示例代碼中增加以下兩個參數:

    //部署包依賴的Tomcat版本。適用于通過WAR包部署的Spring Cloud和Dubbo應用。
    request.setWebContainer("apache-tomcat-7.0.91");  
    //部署包依賴的EDAS Container版本。適用于通過WAR包部署的HSF應用。     
    request.setEdasContainerVersion("3.5.9");
    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.DeployK8sApplicationRequest;
    import com.aliyuncs.edas.model.v20170801.DeployK8sApplicationResponse;
    
    public class DeployK8sApplication {
    
        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請求,并設置參數。
            DeployK8sApplicationRequest request = new DeployK8sApplicationRequest();
            //應用ID。
            request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
            //JAR包或者WAR包地址、版本。
            request.setPackageUrl("https:doc***.oss-cn-hangzhou.aliyuncs.com/sc-****-D-0.0.2-SNAPSHOT.jar");
            request.setPackageVersion("2021-04-15 16:41:52");
            //部署包依賴的JDK版本。可選的參數值為Open JDK 7和Open JDK 8。
            request.setJDK("Open JDK 8");
            //自定義分批發布策略。此處示例值代表“首批灰度發布2個Pod實例+剩余Pod實例分2批發布+自動分批+分批間隔1分鐘”。
            request.setUpdateStrategy("{\"type\":\"GrayBatchUpdate\",\"batchUpdate\":{\"batch\":2,\"releaseType\":\"auto\",\"batchWaitTime\":1},\"grayUpdate\":{\"gray\":2}}");
            //灰度發布流量控制策略。示例策略表示:50%的流量會被轉發到灰度分組。
            request.setTrafficControlStrategy("{\"http\":{\"rules\":[{\"conditionType\":\"percent\",\"percent\":50}]}}");
            //應用實例數。
            request.setReplicas(4);
            //應用運行過程中,應用實例的CPU限額、內存限額等,0表示不限制。
            request.setCpuLimit(0);
            request.setMemoryLimit(0);
            request.setCpuRequest(0);
            request.setMemoryRequest(0);
            //CPU最小資源需求,單位:核數。0表示不限制。
            request.setMcpuRequest(0);
            //CPU能使用的最大值,單位:核數。0表示不限制。
            request.setMcpuLimit(0);
            //變更記錄描述。
            request.setChangeOrderDesc("金絲雀發布(JAR包)");
    
            try {
                DeployK8sApplicationResponse response = client.getAcsResponse(request);
                System.out.println("ChangeOrderId=" + response.getChangeOrderId() + "\nMessage=" + response.getMessage());
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }

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

    ChangeOrderId=5886e6f9-05b1-42f0-a3d4-5d90558e****
    Message=success
  2. 調用GetChangeOrderInfo接口,獲取金絲雀發布應用變更的相關批次的流程ID(PipelineId)。

    調用GetChangeOrderInfo接口,返回結果如下:

    {
      "Message": "success",
      "RequestId": "19C54DC3-C66C-40D0-AEED-8D5A1F00F3BA",
      "Code": 200,
      "changeOrderInfo": {
        "Status": 8,
        "Desc": "金絲雀發布(JAR包)",
        "PipelineInfoList": {
          "PipelineInfo": [
            {
              "PipelineStatus": 2,
              "PipelineName": "Canary Change",
              ......
              "PipelineId": "ca7221a6-2c39-40b5-b40a-53fd3d99****"
              ......
              "PipelineId": "e228e628-f722-43bc-9c2b-45076c3a****"
              ......
              "PipelineId": "d6dcb857-2ff0-4db9-90fa-a2d9db7b****"
              ......
              //此處未羅列全部執行結果,僅供參考。
    說明

    示例代碼中使用的是首批灰度發布2個Pod實例+剩余Pod實例分2批發布+自動分批+分批間隔1分鐘的金絲雀發布策略,在首批灰度發布2個Pod實例流程運行完以后,需要手動確認繼續剩余批次的發布。在調用GetChangeOrderInfo接口返回結果中出現3個流程ID(PipelineId),第二次出現的流程ID(PipelineId)代表需要手動確認繼續剩余批次的發布。

    剩余批次的策略是剩余Pod實例分2批發布+自動分批+分批間隔1分鐘,則無需手動確認,系統自動完成剩余批次的發布。

  3. 調用ContinuePipeline接口,手動確認繼續剩余批次的發布。

    返回結果如下:

    {
      "Message": "success",
      "RequestId": "050392EE-959D-4144-AA02-3A1E7CE2F736",
      "Code": 200
    }

使用鏡像金絲雀發布應用

  1. 運行程序,使用鏡像金絲雀發布應用。

    以下代碼適用于在EDAS K8s集群中金絲雀發布應用(鏡像)。代碼中未設置調度規則、啟動命令、環境變量等高級參數,如需了解更多API參數信息,請參見DeployK8sApplication

    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.DeployK8sApplicationRequest;
    import com.aliyuncs.edas.model.v20170801.DeployK8sApplicationResponse;
    
    public class DeployK8sApplication {
    
        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請求,并設置參數。
            DeployK8sApplicationRequest request = new DeployK8sApplicationRequest();
            //應用ID。
            request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
            //鏡像地址。
            request.setImage("registry-vpc.cn-hangzhou.aliyuncs.com/image-demo-project/provider:2.0");
            //自定義金絲雀發布策略。此處示例值代表“首批灰度發布2個Pod實例+剩余Pod實例分2批發布+手動分批”。
            request.setUpdateStrategy("{\"type\":\"GrayBatchUpdate\",\"batchUpdate\":{\"batch\":2,\"releaseType\":\"manual\"},\"grayUpdate\":{\"gray\":2}}");
            //灰度發布流量控制策略。示例策略表示:50%的流量會被轉發到灰度分組。
            request.setTrafficControlStrategy("{\"http\":{\"rules\":[{\"conditionType\":\"percent\",\"percent\":50}]}}");
            //應用實例數。
            request.setReplicas(4);
            //應用運行過程中,應用實例的CPU限額、內存限額等,0表示不限制。
            request.setCpuLimit(0);
            request.setMemoryLimit(0);
            request.setCpuRequest(0);
            request.setMemoryRequest(0);
            //CPU最小資源需求,單位:核數。0表示不限制。
            request.setMcpuRequest(0);
            //CPU能使用的最大值,單位:核數。0表示不限制。
            request.setMcpuLimit(0);
            //變更記錄描述。
            request.setChangeOrderDesc("金絲雀發布(鏡像)");
    
            try {
                DeployK8sApplicationResponse response = client.getAcsResponse(request);
                System.out.println("ChangeOrderId=" + response.getChangeOrderId() + "\nMessage=" + response.getMessage());
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }

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

    ChangeOrderId=a7431f9e-7e05-4590-aef8-17088f0****
    Message=success
  2. 調用GetChangeOrderInfo接口,獲取金絲雀發布應用變更的相關批次的流程ID(PipelineId)。

    調用GetChangeOrderInfo接口,返回結果如下:

    {
      "Message": "success",
      "RequestId": "1B1127FB-251C-4946-AA20-D4FF5DF4788F",
      "Code": 200,
      "changeOrderInfo": {
        "Status": 8,
        "Desc": "金絲雀發布(鏡像)",
        "PipelineInfoList": {
          "PipelineInfo": [
            {
              "PipelineStatus": 2,
              "PipelineName": "Canary Change",
              ......
              "PipelineId": "09e7d9aa-e79d-49ef-99b9-5405532d****"
              ......
              "PipelineId": "1ea53844-2c60-46f1-b46d-df3b34d0****"
              ......
              "PipelineId": "d99da075-b87d-4fe7-bbb6-ae1c6c26****"
              ......
              //此處未羅列全部執行結果,僅供參考。
    說明

    示例代碼中使用的是首批灰度發布2臺+剩余分2批發布+手動分批的金絲雀發布策略,在首批灰度發布2個Pod實例流程運行完以后,需要手動確認繼續剩余批次的發布。在調用GetChangeOrderInfo接口返回結果中出現3個流程ID(PipelineId),第二次出現的流程ID(PipelineId)代表需要手動確認繼續剩余批次的發布,第三次出現的流程ID(PipelineId)代表剩余批次中第一批完成后需要手動確認繼續下一批次的發布。

  3. 調用ContinuePipeline接口,手動確認繼續剩余批次發布。

    返回結果如下:

    {
      "Message": "success",
      "RequestId": "B8ECF6F7-672D-40E9-91DD-1C33F06D4FD8",
      "Code": 200
    }
  4. 調用ContinuePipeline接口,手動確認下一批發布。

    返回結果如下:

    {
      "Message": "success",
      "RequestId": "7BB4F043-7C28-4A0E-B6A5-D4023EB24388",
      "Code": 200
    }
    說明

    示例代碼中使用的是首批灰度發布2個Pod實例+剩余Pod實例分2批發布+手動分批的金絲雀發布策略,運行到剩余批次發布過程,只需要手動確認一批。如果您是剩余批次需要手動確認多批的場景,請選擇正確批次的流程ID(PipelineId)并重復執行此步驟。

    重復執行此步驟時,請等待批次內部署間隔時長,默認10秒。

結果驗證

您在金絲雀發布應用后,可以調用GetChangeOrderInfo接口查看變更流程詳情,獲取金絲雀發布應用的變更狀態。具體API參數詳情,請參見GetChangeOrderInfo

調用GetChangeOrderInfo接口查看變更流程詳情,返回的執行結果如下:

{
    "Message": "success",
    "RequestId": "10DA427D-AF74-4ECE-BB0A-EECC0EBF7548",
    "Code": 200,
    "changeOrderInfo": {
        "Status": 2,
        "Desc": "金絲雀發布(***)",
        "PipelineInfoList": {
            "PipelineInfo": [
                {
                   ......
                   //此處未羅列全部執行結果,僅供參考。

請查看上述執行結果中的changeOrderInfo.Status參數值,通過該值判斷金絲雀發布應用的變更是否成功。changeOrderInfo.Status的取值如下:

  • 0:準備

  • 1:執行中

  • 2:執行成功

  • 3:執行失敗

  • 6:終止

  • 8:手動分批發布模式下,等待手工確認執行下一批。

  • 9:自動分批發布模式下,等待下一批執行中。

  • 10:系統異常執行失敗