在之前的應用部署系列文章裡,我們已經介紹過什麼是藍綠部署。如需回顧,點選下方文章連結即可重溫。本文我們將會介紹如何使用 Kubernetes 實現藍綠部署。
前期準備:
如果你已經準備就緒,那麼我們就開始部署啦!
首先,我們需要建立名稱空間來部署我們的應用程式。輸入以下命令即可:
kubectl create namespace blue-green
接下來,我們需要建立2個部署,一個是藍環境,另一個是綠環境。除了標籤之外,兩個部署應該是相同的(標籤主要是為了辨別哪個是藍環境,哪個是綠環境)。以下是部署 manifest 範例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-blue
labels:
app: myapp
env: blue
spec:
replicas: 3
selector:
matchLabels:
app: myapp
env: blue
template:
metadata:
labels:
app: myapp
env: blue
spec:
containers:
- name: myapp
image: myapp:v1.0
ports:
- containerPort: 80
將 manifest 儲存為 blue-deployment.yaml
,並使用以下命令在藍環境中建立部署:
kubectl apply -f blue-deployment.yaml -n blue-green
同理,通過在 manifest 檔案中更改名稱和標籤來在綠環境中建立另一個部署,並將其儲存為 green-deployment.yaml
。接下來,使用以下命令將其部署在綠環境:
kubectl apply -f green-deployment.yaml -n blue-green
現在,我們需要建立服務將我們的應用程式暴露給外部世界。該服務應該使用 label selector 來將流量路由到藍部署和綠部署中。以下是服務 manifest 範例:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
將 manifest 儲存為 service.yaml
,並使用以下命令建立服務:
kubectl apply -f service.yaml -n blue-green
現在,我們來驗證部署和服務是否能正常執行。首先,我們需要獲得服務的外部IP地址:
kubectl get service myapp-service -n blue-green
該命令將輸出服務的外部IP地址。使用這個IP地址可以在瀏覽器記憶體取應用。你應該可以看到應用在藍環境中執行。
既然藍綠部署都在執行,我們就可以通過從藍環境路由流量到綠環境來執行藍綠部署。
首先,我們需要使用應用程式的新版本更新綠部署。在綠部署的 manifest 裡用新版本的 Docker 映象來更新映象欄位並將其儲存為 green-deployment-v2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-green
labels:
app: myapp
env: green
spec:
replicas: 3
selector:
matchLabels:
app: myapp
env: green
template:
metadata:
labels:
app: myapp
env: green
spec:
containers:
- name: myapp
image: myapp:v2.0
ports:
- containerPort: 80
使用以下命令,應用更新好的綠部署:
kubectl apply -f green-deployment-v2.yaml -n blue-green
接下來,我們需要更新服務以將流量路由到綠部署。首先,在服務的manifest裡更新 label selector,以選擇綠部署:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
env: green
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
使用以下命令應用更新完畢的服務:
kubectl apply -f service.yaml -n blue-green
最後,我們需要驗證部署是否成功。首先,使用 kubectl get service
命令獲取服務的外部IP地址,並在瀏覽器中存取應用程式。你應該看到已經更新好的應用版本在綠環境中執行。
如果在部署期間發生錯誤,我們可以輕鬆回滾到之前的應用版本:通過在服務的manifest裡更新 label selector 來選擇藍環境並重新應用服務 manifest。
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
env: blue
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
應用更新完畢的服務:
kubectl apply -f service.yaml -n blue-green
當您在 Kubernetes 中進行藍綠部署時,需要考慮一些其他因素:
儘管藍綠部署是一種高效的部署應用程式的方法,但它可能並不適用於每種情況。例如,如果你的應用需要進行大量的資料遷移或更改資料庫格式,藍綠部署可能不是最佳策略,因為它會導致藍綠環境之間資料不一致。
此外,對於需要永續性儲存的有狀態的應用程式來說,藍綠部署的實施可能具有挑戰性,因為資料必須在藍色和綠色環境之間同步進行。在這些情況下,你也許需要考慮其他部署策略,比如捲動更新或金絲雀部署。
在本文中,我們瞭解瞭如何使用 Kubernetes 進行藍綠部署。藍綠部署是一種備受歡迎的部署策略,因為它提供了零停機時間,並在出錯時提供了快速、簡單的回滾方式。