Kubernetes canary Deployment

Canary deployment

有時候,我們需要多個標籤來區分相同微服務的不同版本。對於上線新版微服務,需要經過線上測試(灰度發佈)。一般做法是通過service將一部分線上流量調度到新版本的pod,確定運行無誤後,在對所有的pod進行rolling update

首先創建2兩個Deployment,主體內容如下:

#Deployment 1
name: apigw
replicas: 1
...
labels:
    app: apigw
    track: stable
...
image: 172.16.18.5:30088/admin/centos7.1-v1-apigw:880

對於生成的pod實例,會擁有 app:apigwtrack: stable 兩個標籤

# Deployment 2
name: apigw-test
replicas: 1
...
labels:
    app: apigw
    track: canary
...
image: 172.16.18.5:30088/admin/centos7.1-v1-apigw:883

兩個pod實例中,擁有相同的 app:apigw標籤。通過 track 對應不同的值來標稱應用的正式和測試版本

對於前端的 service ,需要在 selector 字段通過標籤來篩選後端 pod

selector:
    app: apaigw
    track: stable

此時後端只對應同時擁有 app: apigwtrack: stable 標籤的pod

[root@k8s-master test]# kubectl describe svc apigw-test --namespace=walker
Name:           apigw-test
Namespace:      walker
Labels:         app=apigw-test
Selector:       app=apigw,track=stable
Type:           ClusterIP
IP:         10.109.195.90
Port:           apigw   80/TCP
Endpoints:      192.168.169.135:80
Session Affinity:   None
No events.

當以 app: apigw 爲篩選條件時,service會分別對應兩個 pod

[root@k8s-master test]# kubectl describe svc apigw-test --namespace=walker
Name:           apigw-test
Namespace:      walker
Labels:         app=apigw-test
Selector:       app=apigw
Type:           ClusterIP
IP:         10.109.195.90
Port:           apigw   80/TCP
Endpoints:      192.168.169.135:80,192.168.236.32:80
Session Affinity:   None
No events.

通過 service 將部分請求分流到測試版本上去,由此可實現測試版本的線上測試。待新版本線上驗證後哦,可通過 rolling update 的方式正式上線。

參考鏈接

https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments

發佈了31 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章