作者:華相 阿裡雲技術專家
前提條件
● 已建立ASM執行個體,且ASM執行個體的Istio為1.9.7.93及以上版本。具體操作,請參見建立ASM執行個體。
● 已建立ACK叢集。具體操作,請參見建立Kubernetes托管版叢集。
● 添加叢集到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
步驟一:啟用資料面叢集KubeAPI通路Istio資源功能
- 登入ASM控制台。
- 在左側導航欄,選擇服務網格 > 網格管理。
- 在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
- 在網格資訊頁面單擊右上角的功能設定。
- 在功能設定更新面闆選中啟用資料面叢集KubeAPI通路Istio資源,然後單擊确定。
步驟二:擷取asm-cr-aggregation配置資訊
-
檢視ASM執行個體ID。
a. 登入ASM控制台。
b. 在左側導航欄,選擇服務網格 > 網格管理。
c. 在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。在網格資訊頁面檢視ASM執行個體ID。
-
檢視叢集地域ID。
a. 登入容器服務管理控制台。
b. 在控制台左側導航欄單擊叢集。在叢集頁面檢視目标叢集的地域,例如您叢集地域為華北2(北京),則叢集地域ID為cn-beijing。
- 檢視AccessKey ID和AccessKey Secret。具體操作,請參見擷取AccessKey。
步驟三:安裝asm-cr-aggregation
- 通過cloudshell連接配接叢集
- 下載下傳并解壓至asm-cr-aggregation本地。
curl -O -L
https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-helmcharts/asm-cr-aggregation.tgztar xvf asm-cr-aggregation.tgz
- 進入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檔案。
- 執行以下指令,安裝asm-cr-aggregation。
helm upgrade -i -f values.yaml asm-cr-aggregation ./
-
驗證asm-cr-aggregation是否安裝成功。
b. 在控制台左側導航欄中,單擊叢集。
c. 在叢集清單頁面中,單擊目标叢集名稱或者目标叢集右側操作列下的詳情。
d. 在叢集管理頁面左側導航欄選擇應用 > Helm。在Helm頁面可以看到asm-cr-aggregation,說明asm-cr-aggregation安裝成功。
步驟四:授予RAM使用者權限
使用資料面叢集Kubernetes API通路Istio資源之前,您的賬号需要擁有在資料面叢集通路Istio資源的權限和ASM的自定義資源權限:
授予RAM使用者通路Istio資源的讀寫權限。
- 使用阿裡雲賬号登入容器服務管理控制台。
- 在控制台左側導航欄單擊授權管理。
- 在子賬号頁簽下單擊目标RAM使用者右側的管理權限。
- 在叢集RBAC配置頁面中單擊“+”圖示,選擇要授予的叢集和命名空間,設定通路權限為自定義,在文本框中選擇asm-istio-admin,然後單擊下一步。
-
驗證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
- 登入容器服務管理控制台。
- 在控制台左側導航欄中,選擇市場 > 應用目錄。
- 在應用目錄頁面搜尋ack-kubevela,然後單擊ack-kubevela。
-
修改兩個image,指向深圳的内網倉庫:
a. registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/vela-core
b. registry-vpc.cn-shenzhen.aliyuncs.com/ali-workshop/kube-webhook-certgen
- 在ack-kubevela詳情頁面建立面闆選擇叢集,然後單擊建立。
步驟六:部署Kebuvla配置檔案
- 下載下傳操作檔案
unzip asm_kubevela.zip
- 進入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
步驟七:部署應用和網關
- 進入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
-
在ASM控制台中部署網關規則和虛拟服務。
c. 在網格管理頁面,找到待配置的執行個體,單擊執行個體的名稱或在操作列中單擊管理。
d. 部署網關規則。
ⅰ. 在網格詳情頁面左側導航欄選擇流量管理 > 網關規則,在右側頁面單擊使用YAML建立。
ⅱ. 在建立頁面設定命名空間為default,複制以下内容到文本框中,然後單擊建立。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
name: bookinfo-gateway
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
hosts:number: 80 name: http protocol: HTTP
- "*"
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
-
destination:
host: productpage
number: 9080
-
-
通路Bookinfo應用。
d. 在叢集管理頁面選擇網絡 > 服務。
e. 在服務頁面頂部設定命名空間為istio-system,檢視istio-ingressgateway右側80端口的外部端點,然後在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,可以看到頁面上顯示黑色星星。
步驟八:漸進式釋出應用
- 執行以下指令,更新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服務。
- 在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,10%機率可以看到紅色星星,90%機率看到黑色星星。
- 執行以下指令,繼續執行工作流,使reviews服務全部更新到v3版本。
curl -O
https://ali-workshop.oss-cn-shenzhen.aliyuncs.com/velachmod +x vela
./vela workflow resume book-info
- 在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,頁面上隻顯示紅色星星。說明reviews服務全部更新到v3版本。
(可選)步驟九:復原應用
如果發現釋出的新版本應用不符合預期,您可以終止釋出工作流量,并将應用復原到之前的版本。
- 執行以下指令,復原應用。
- 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
-
在rollback.yaml檔案中設定type為canary-rollback,會自動進行以下操作:
a. 更新Rollout對象的targetRevisionName成舊的版本,自動復原所有已釋出的新版本的執行個體回到舊版本,并且保持還沒更新的舊版本執行個體。
b. 更新VirtualService對象的route字段,将所有流量導向舊的版本。
c. 更新DestinationRule對象的subset字段,隻容納舊的版本。
- 在浏覽器位址欄中輸入80端口的入口網關位址/productpage,通路Bookinfo應用。多次重新整理頁面,頁面上隻顯示黑色星星。說明reviews服務復原到v2版本。