品牌網(wǎng)站怎么做一網(wǎng)信息一個(gè)簡單便捷的新聞網(wǎng)站
應(yīng)用的部署(一):金絲雀部署
在項(xiàng)目迭代開發(fā)過程中,經(jīng)常需要對應(yīng)用進(jìn)行上線部署。上線部署策略主要有 3 種:金絲雀部署、藍(lán)綠部署 和 滾動(dòng)部署。
金絲雀部署 也被叫作 灰度部署。金絲雀部署過程:先讓一部分用戶繼續(xù)使用舊版本,而另一部分用戶開始使用新版本;如果新版本沒有發(fā)生問題,則逐步擴(kuò)大新版本的使用范圍直到使用舊版本的用戶都使用新版本。
通過使用金絲雀部署,可以最大限度地保證系統(tǒng)的整體穩(wěn)定性,并能夠在部署的早期就發(fā)現(xiàn)和解決問題。下面通過示例來演示金絲雀部署升級。
創(chuàng)建 canary-demo-v1.yaml
文件,并在其中輸入以下內(nèi)容:
apiVersion: v1
kind: Service
metadata:name: canary-demolabels:app: canary-demo
spec:type: NodePortports:- name: httpport: 80targetPort: httpselector:app: canary-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:name: canary-demo-v1labels:app: canary-demo
spec:replicas: 10selector:matchLabels:app: canary-demoversion: v1.0.0template:metadata:labels:app: canary-demoversion: v1.0.0spec:containers:- name: canary-demoimage: collenzhao/k8s-deployment-strategiesports:- name: httpcontainerPort: 8080env:- name: VERSIONvalue: v1.0.0
使用以下命令應(yīng)用 canary-demo-v1.yaml
文件。
kubectl apply -f canary-demo-v1.yaml
獲取 Service(服務(wù))的信息。
kubectl get service canary-demo
輸出的信息如下:
通過 Service(服務(wù))訪問 Deployment。
curl 10.106.132.94:80
輸出的信息如下:
可以看出,目前應(yīng)用的版本是 v1.0.0
。
使用金絲雀部署來升級應(yīng)用,創(chuàng)建 canary-demo-v2.yaml
文件并在其中輸入以下內(nèi)容:
apiVersion: apps/v1
kind: Deployment
metadata:name: canary-demo-v2labels:app: canary-demo
spec:replicas: 1selector:matchLabels:app: canary-demoversion: v2.0.0template:metadata:labels:app: canary-demoversion: v2.0.0spec:containers:- name: canary-demoimage: collenzhao/k8s-deployment-strategiesports:- name: httpcontainerPort: 8080env:- name: VERSIONvalue: v2.0.0
開啟兩個(gè)命令行窗口,使用 watch
命令來分別監(jiān)控 Deployment 和 Pod 的變化。
kubectl get --watch deployment
kubectl get --watch pod
執(zhí)行應(yīng)用的升級。
kubectl apply -f canary-demo-v2.yaml
觀察 Deployment 和 Pod 的變化。
可以看到,v1.0.0
版本共有 10 10 10 個(gè)實(shí)例,而 v2.0.0
版本只有 1 1 1 個(gè)實(shí)例。
執(zhí)行以下腳本請求應(yīng)用。
for a in {1..11}dosleep 1;curl "10.106.132.94:80";done
🚀
for
循環(huán)一共循環(huán)了 11 11 11 次,其中, 10 10 10 次訪問的是v1.0.0
版本;只有 1 1 1 次訪問的是v2.0.0
版本。
將 v2.0.0
版本的實(shí)例擴(kuò)到 5 個(gè),將 v1.0.0
版本的實(shí)例縮到 5 個(gè)。
kubectl scale --replicas=5 deploy canary-demo-v2
kubectl scale --replicas=5 deploy canary-demo-v1
觀察 Deployment 的變化。
kubectl get --watch deployment
重新執(zhí)行以下腳本。
for a in {1..10}dosleep 1;curl "10.106.132.94:80";done
輸出的信息如下:
停止 v1.0.0
版本,并把 v2.0.0
版本的實(shí)例擴(kuò)到 10 個(gè)。
kubectl delete deployment.apps/canary-demo-v1
kubectl scale --replicas=10 deploy canary-demo-v2
這時(shí)應(yīng)用將全部升級到 v2.0.0
版本。如果再執(zhí)行 for
循環(huán),則所有請求的返回信息如下。
清理測試的數(shù)據(jù)。
kubectl delete all -l app=canary-demo