天天看點

KubeVela + ASM 雲原生傳遞體驗

作者:華相 阿裡雲技術專家

前提條件

● 已建立ASM執行個體,且ASM執行個體的Istio為1.9.7.93及以上版本。具體操作,請參見建立ASM執行個體。

● 已建立ACK叢集。具體操作,請參見建立Kubernetes托管版叢集。

● 添加叢集到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。

步驟一:啟用資料面叢集KubeAPI通路Istio資源功能

  1. 登入ASM控制台。
  2. 在左側導航欄,選擇服務網格 > 網格管理。
  3. 在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
  4. 在網格資訊頁面單擊右上角的功能設定。
  5. 在功能設定更新面闆選中啟用資料面叢集KubeAPI通路Istio資源,然後單擊确定。

步驟二:擷取asm-cr-aggregation配置資訊

  1. 檢視ASM執行個體ID。

    a. 登入ASM控制台。

    b. 在左側導航欄,選擇服務網格 > 網格管理。

    c. 在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。在網格資訊頁面檢視ASM執行個體ID。

  2. 檢視叢集地域ID。

    a. 登入容器服務管理控制台。

    b. 在控制台左側導航欄單擊叢集。在叢集頁面檢視目标叢集的地域,例如您叢集地域為華北2(北京),則叢集地域ID為cn-beijing。

  3. 檢視AccessKey ID和AccessKey Secret。具體操作,請參見擷取AccessKey。

步驟三:安裝asm-cr-aggregation

  1. 通過cloudshell連接配接叢集
  2. 下載下傳并解壓至asm-cr-aggregation本地。

curl -O -L

https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-helmcharts/asm-cr-aggregation.tgz

tar xvf asm-cr-aggregation.tgz

  1. 進入asm-cr-aggregation檔案夾中,找到values.yaml檔案,在values.yaml檔案中補充ASM ID、叢集地域ID、AccessKey ID和AccessKey Secret,修改repository為registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/asm-craggregation-apiservice,然後儲存values.yaml檔案。
  2. 執行以下指令,安裝asm-cr-aggregation。

helm upgrade -i -f values.yaml asm-cr-aggregation ./

  1. 驗證asm-cr-aggregation是否安裝成功。

    b. 在控制台左側導航欄中,單擊叢集。

    c. 在叢集清單頁面中,單擊目标叢集名稱或者目标叢集右側操作列下的詳情。

    d. 在叢集管理頁面左側導航欄選擇應用 > Helm。在Helm頁面可以看到asm-cr-aggregation,說明asm-cr-aggregation安裝成功。

步驟四:授予RAM使用者權限

使用資料面叢集Kubernetes API通路Istio資源之前,您的賬号需要擁有在資料面叢集通路Istio資源的權限和ASM的自定義資源權限:

授予RAM使用者通路Istio資源的讀寫權限。

  1. 使用阿裡雲賬号登入容器服務管理控制台。
  2. 在控制台左側導航欄單擊授權管理。
  3. 在子賬号頁簽下單擊目标RAM使用者右側的管理權限。
  4. 在叢集RBAC配置頁面中單擊“+”圖示,選擇要授予的叢集和命名空間,設定通路權限為自定義,在文本框中選擇asm-istio-admin,然後單擊下一步。
  5. 驗證RAM使用者是否擁有通路Istio資源的讀寫權限。

    a. 執行以下指令,檢視虛拟服務。

kubectl get VirtualService

預期輸出:

NAME CREATED AT

reviews-route 2021-11-15T07:09:10Z

b. 執行以下指令,編輯虛拟服務。

kubectl edit VirtualService reviews-route

virtualservice.networking.istio.io/reviews-route edited

步驟五:安裝KubeVela

  1. 登入容器服務管理控制台。
  2. 在控制台左側導航欄中,選擇市場 > 應用目錄。
  3. 在應用目錄頁面搜尋ack-kubevela,然後單擊ack-kubevela。
  4. 修改兩個image,指向深圳的内網倉庫:

    a. registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/vela-core

    b. registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/kube-webhook-certgen

  5. 在ack-kubevela詳情頁面建立面闆選擇叢集,然後單擊建立。

步驟六:部署Kebuvla配置檔案

  1. 下載下傳操作檔案
https://aliware-images.oss-cn-hangzhou.aliyuncs.com/ASM/Istio%E8%B5%84%E6%BA%90%E5%AE%89%E8%A3%85%E5%8C%85/asm_kubevela.zip

unzip asm_kubevela.zip

  1. 進入asm_kubevela檔案夾中,執行以下指令,逐個部署Kebuvla配置檔案。

kubectl apply -f rollback-wf-def.yaml

kubectl apply -f canary-rollout-wf-def.yaml

kubectl apply -f traffic-trait-def.yaml

步驟七:部署應用和網關

  1. 進入asm_kubevela檔案夾中,執行以下指令,部署Bookinfo應用。application.yaml檔案中為review服務配置traits字段下type為canary-traffic,表示配置了漸進式流量釋出的運維特征。

kubectl apply -f - << EOF

apiVersion: core.oam.dev/v1beta1

kind: Application

metadata:

name: book-info

namespace: default

spec:

components:

- name: reviews
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-reviews-v2:1.16.2
    port: 9080
    volumes:
      - name: wlp-output
        type: emptyDir
        mountPath: /opt/ibm/wlp/output
      - name: tmp
        type: emptyDir
        mountPath: /tmp

  traits:
    - type: canary-traffic
      properties:
        port:
          - 9080

    - type: rollout
      properties:
        targetSize: 2
        # This means to rollout two more replicas in two batches.
        rolloutBatches:
          - replicas: 2

- name: productpage
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-productpage-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: ratings
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-ratings-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: details
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-details-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080           

EOF

  1. 在ASM控制台中部署網關規則和虛拟服務。

    c. 在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。

    d. 部署網關規則。

    ⅰ. 在網格詳情頁面左側導航欄選擇流量管理 > 網關規則,在右側頁面單擊使用YAML建立。

    ⅱ. 在建立頁面設定命名空間為default,複制以下内容到文本框中,然後單擊建立。

apiVersion: networking.istio.io/v1alpha3

kind: Gateway

name: bookinfo-gateway

selector:

istio: ingressgateway # use istio default controller           

servers:

  • port:
    number: 80
    name: http
    protocol: HTTP           
    hosts:
    • "*"

e. 部署虛拟服務。

ⅰ. 在網格詳情頁面左側導航欄選擇流量管理 > 虛拟服務,在右側頁面單擊使用YAML建立。
ⅱ. 在建立頁面設定命名空間為default,複制以下内容到文本框中,然後單擊确定。           

kind: VirtualService

name: bookinfo

hosts:

gateways:

  • bookinfo-gateway

http:

  • match:
    • uri:

      exact: /productpage

    • prefix: /static
    • exact: /login
    • exact: /logout
    • prefix: /api/v1/products
    route:
    • destination:

      host: productpage

      number: 9080

  1. 通路Bookinfo應用。

    d. 在叢集管理頁面選擇網絡 > 服務。

    e. 在服務頁面頂部設定命名空間為istio-system,檢視istio-ingressgateway右側80端口的外部端點,然後在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,可以看到頁面上顯示黑色星星。

步驟八:漸進式釋出應用

  1. 執行以下指令,更新reviews應用,并調整流量。
- name: reviews
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-reviews-v3:1.16.2
    port: 9080
    volumes:
      - name: wlp-output
        type: emptyDir
        mountPath: /opt/ibm/wlp/output
      - name: tmp
        type: emptyDir
        mountPath: /tmp

  traits:
    - type: canary-traffic
      properties:
        port:
          - 9080

    - type: rollout
      properties:
        targetSize: 2
        # This means to rollout two more replicas in two batches.
        rolloutBatches:
          - replicas: 1
          - replicas: 1

- name: productpage
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-productpage-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: ratings
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-ratings-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: details
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-details-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080
           

workflow:

steps:
  - name: rollout-1st-batch
    type: canary-rollout
    properties:
      # just upgrade first batch of component
      batchPartition: 0
      traffic:
        weightedTargets:
          - revision: reviews-v1
            weight: 90 # 90% shift to new version
          - revision: reviews-v2
            weight: 10 # 10% shift to new version

  # give user time to verify part of traffic shifting to newRevision
  - name: manual-approval
    type: suspend

  - name: rollout-rest
    type: canary-rollout
    properties:
      # upgrade all batches of component
      batchPartition: 1
      traffic:
        weightedTargets:
          - revision: reviews-v2
            weight: 100 # 100% shift to new version           

a. targetSize:更新執行個體的批次。

b. rolloutBatches:每批執行個體更新的個數。

c. 在application_rollout-v2.yaml檔案中設定了以下三個執行工作流:

ⅰ. 設定batchPartition等于0,表示隻更新第一批次執行個體,即将reviews服務的2個Pod中,隻更新其中的1個Pod。然後設定traffic.weightedTargets參數,将10%流量導向新更新的reviews服務,90%的流量仍然流向舊版本的服務。
ⅱ. 設定type為suspend,完成第一步工作流後,将暫停工作流。
ⅲ. 設定batchPartition等于1,表示更新第二批次執行個體,即将reviews服務的2個Pod都更新到v3版本鏡像。然後設定traffic.weightedTargets參數,将100%流量導向新更新的reviews服務。           
  1. 在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,10%機率可以看到紅色星星,90%機率看到黑色星星。
  2. 執行以下指令,繼續執行工作流,使reviews服務全部更新到v3版本。

curl -O

https://ali-workshop.oss-cn-shenzhen.aliyuncs.com/vela

chmod +x vela

./vela workflow resume book-info

  1. 在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,頁面上隻顯示紅色星星。說明reviews服務全部更新到v3版本。

(可選)步驟九:復原應用

如果發現釋出的新版本應用不符合預期,您可以終止釋出工作流量,并将應用復原到之前的版本。

  1. 執行以下指令,復原應用。
- name: reviews
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-reviews-v3:1.16.2
    port: 9080
    volumes:
      - name: wlp-output
        type: emptyDir
        mountPath: /opt/ibm/wlp/output
      - name: tmp
        type: emptyDir
        mountPath: /tmp

  traits:
    - type: canary-traffic
      properties:
        port:
          - 9080

    - type: rollout
      properties:
        targetSize: 2
            # This means to rollout two more replicas in two batches.
        rolloutBatches:
         - replicas: 1
         - replicas: 1

- name: productpage
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-productpage-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: ratings
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-ratings-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080

- name: details
  type: webservice
  properties:
    image: registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/examples-bookinfo-details-v1:1.16.2
    port: 9080

  traits:
    - type: expose
      properties:
        port:
          - 9080
           
steps:
  - name: rollback
    type: canary-rollback           
  1. 在rollback.yaml檔案中設定type為canary-rollback,會自動進行以下操作:

    a. 更新Rollout對象的targetRevisionName成舊的版本,自動復原所有已釋出的新版本的執行個體回到舊版本,并且保持還沒更新的舊版本執行個體。

    b. 更新VirtualService對象的route字段,将所有流量導向舊的版本。

    c. 更新DestinationRule對象的subset字段,隻容納舊的版本。

  2. 在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,頁面上隻顯示黑色星星。說明reviews服務復原到v2版本。

繼續閱讀