iT邦幫忙

2024 iThome 鐵人賽

DAY 17
1
DevOps

DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署系列 第 17

Day17 - CI/CD 與 Kubernetes 的整合實踐:自動化應用部署

  • 分享至 

  • xImage
  •  

在今天的文章中,我們將介紹如何將 CI/CD PipelineKubernetes 整合,實現自動化應用程式佈署。對於 DevOps 團隊來說,將持續整合 (Continuous Integration, CI) 和持續交付 (Continuous Delivery, CD) 與 Kubernetes 結合,可以顯著提高應用的佈署效率,並確保應用在正式環境中的穩定運行。


什麼是 CI/CD?

CI/CD 是現代軟體開發中的核心,讓開發團隊能夠自動測試、建構和佈署程式碼,確保在每次變更後應用保持穩定。

  • 持續整合 (CI):開發者將程式碼變更提交到版本控制系統,並自動進行構建和測試,以便快速發現和解決問題。
  • 持續交付 (CD):當程式碼通過 CI 測試後,自動將其佈署到測試或正式環境,實現應用程式的自動化交付。

CI/CD 與 Kubernetes 整合的優點

  1. 自動化佈署:每次程式碼變更後,CI/CD 流程會自動將新的應用版本佈署到 Kubernetes,減少人為錯誤,提高佈署的速度與可靠性。
  2. 一致性與穩定性:透過 Pipeline 確保所有的佈署步驟一致,避免在不同環境中出現不一致的問題。
  3. 版本管理與回復:Kubernetes 支援滾動更新與回復,與 CI/CD 流程相結合,能夠快速進行版本更新與回退。
  4. 可擴展性:當應用的負載增加時,Kubernetes 可以自動擴展 Pod,確保應用能夠處理更多的請求。

範例

在這個範例中,我們將使用 Azure DevOps 來構建一個 CI/CD Pipeline,並將應用佈署到 Kubernetes 叢集。

建立 CI/CD Pipeline

以下是一個簡單的 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

在 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

佈署應用至 Kubernetes

當我們的 CI/CD Pipeline 構建並推送了新的 Docker 映像後,使用 kubectl 命令將Deployment 佈署到 Kubernetes 叢集中:

kubectl apply -f deployment.yaml

Kubernetes 會根據 Deployment 定義啟動應用,並自動管理 Pod 的更新、擴展和回復。


驗證 CI/CD 佈署

當 Pipeline 執行完成後,我們可以使用以下命令來驗證應用是否成功佈署:

kubectl get deployments
kubectl get pods

這些命令可以顯示 Kubernetes 中 Deployment 和 Pod 的狀態,確保應用已經正常運行。


結語&預告

今天我們學習了如何將 CI/CD 與 Kubernetes 整合,實現自動化的應用程式佈署流程。這不僅提高了應用的佈署速度,也確保了每個程式碼變更都經過適當測試與驗證,進而提升了應用的穩定性與可靠性!明天就來試試滾動更新(Rolling Update)與回復(Roll Back)~


參考文件


上一篇
Day16 - 探索 Kubernetes Ingress:實現靈活的流量管理
下一篇
Day18 - 掌握 Kubernetes 滾動更新與回復:保持應用穩定的自動化佈署策略
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言