在今天的文章中,我們將介紹如何將 CI/CD Pipeline 與 Kubernetes 整合,實現自動化應用程式佈署。對於 DevOps 團隊來說,將持續整合 (Continuous Integration, CI) 和持續交付 (Continuous Delivery, CD) 與 Kubernetes 結合,可以顯著提高應用的佈署效率,並確保應用在正式環境中的穩定運行。
CI/CD 是現代軟體開發中的核心,讓開發團隊能夠自動測試、建構和佈署程式碼,確保在每次變更後應用保持穩定。
在這個範例中,我們將使用 Azure DevOps 來構建一個 CI/CD Pipeline,並將應用佈署到 Kubernetes 叢集。
以下是一個簡單的 Azure Pipelines YAML 配置,用於自動構建 Docker 映像並佈署到 Kubernetes:
trigger:
branches:
include:
- main # 當推送到 main 分支時觸發 CI/CD Pipeline
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
displayName: '設定 Python 版本'
- script: |
docker build -t myapp:$(Build.BuildId) .
docker tag myapp:$(Build.BuildId) myregistry.azurecr.io/myapp:$(Build.BuildId)
displayName: '構建 Docker 映像'
- script: |
docker push myregistry.azurecr.io/myapp:$(Build.BuildId)
displayName: '推送 Docker 映像至容器註冊表'
- script: |
kubectl set image deployment/myapp-deployment myapp-container=myregistry.azurecr.io/myapp:$(Build.BuildId)
displayName: '更新 Kubernetes 佈署'
trigger
:設定當推送到 main
分支時自動觸發 CI/CD Pipeline。docker build
:構建 Docker 映像,並標記為唯一的 Build ID
,以確保每次構建有不同的版本。docker push
:將構建的映像推送到 Azure Container Registry (ACR),用於 Kubernetes 佈署。kubectl set image
:使用 kubectl
命令將新的 Docker 映像佈署到 Kubernetes。在 Kubernetes 叢集中,我們需要編寫一個 Deployment YAML文件來定義應用程式的佈署方式:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myregistry.azurecr.io/myapp:latest
ports:
- containerPort: 80
當我們的 CI/CD Pipeline 構建並推送了新的 Docker 映像後,使用 kubectl
命令將Deployment 佈署到 Kubernetes 叢集中:
kubectl apply -f deployment.yaml
Kubernetes 會根據 Deployment 定義啟動應用,並自動管理 Pod 的更新、擴展和回復。
當 Pipeline 執行完成後,我們可以使用以下命令來驗證應用是否成功佈署:
kubectl get deployments
kubectl get pods
這些命令可以顯示 Kubernetes 中 Deployment 和 Pod 的狀態,確保應用已經正常運行。
今天我們學習了如何將 CI/CD 與 Kubernetes 整合,實現自動化的應用程式佈署流程。這不僅提高了應用的佈署速度,也確保了每個程式碼變更都經過適當測試與驗證,進而提升了應用的穩定性與可靠性!明天就來試試滾動更新(Rolling Update)與回復(Roll Back)~