iT邦幫忙

2024 iThome 鐵人賽

DAY 15
1
DevOps

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

Day15 - 使用 kubectl 佈署與管理 Kubernetes 應用:深入解析 Deployment

  • 分享至 

  • xImage
  •  

在深入探討 Kubernetes 進階網路管理之前,我們需要先熟悉如何使用 kubectl 來佈署和管理 Kubernetes 應用。透過深入理解 Deployment,我們將能更靈活地處理應用程式的更新與管理。這對於後續學習 Kubernetes 的進階網路管理也會有所幫助。

在今天的文章中,我們將深入探討 Kubernetes 的應用管理,並詳細介紹如何使用 kubectl 來佈署和管理應用程式。我們還會聚焦於 Kubernetes 中一個關鍵概念:Deployment

Deployment 是 Kubernetes 中管理應用程式生命週期的核心機制,讓我們能夠輕鬆地佈署、更新和回復應用程式!


什麼是 Deployment?

Deployment 是 Kubernetes 中的一種資源,用於管理 PodReplicaSet。它讓開發者能夠定義應用程式的佈署策略和更新方式。透過 Deployment,我們可以:

  1. 自動化應用的佈署與更新:當我們修改應用程式的配置或映像版本 (Image Version) 時,Deployment 負責平滑地更新應用,並確保更新期間的可用性。
  2. 確保應用穩定運行:Deployment 持續監控應用程式的狀態,在 Pod 發生錯誤或失敗時自動重啟,確保應用程式始終處於預期狀態。
  3. 版本回復:當應用更新出現問題時,我們可以透過 Deployment 快速回復到上一個穩定版本,保障應用的穩定性。

https://ithelp.ithome.com.tw/upload/images/20240929/201694929te05hpbHW.png
圖片來源


Deployment 的主要功能

1. 自動化管理 Pod 和 ReplicaSet

Deployment 管理一個或多個 ReplicaSet,確保應用程式的複本數目與配置保持一致。當 Pod 發生故障時,Deployment 會自動重新啟動它。

2. 支援應用更新

Deployment 支援平滑的滾動更新,它會逐步替換舊的 Pod,確保應用程式在任何時間點都保持可用。

3. 支援回復 (Rollback)

若應用的更新導致問題,Deployment 可以輕鬆地回復到先前的穩定版本,保證應用的高可用性。

4. 版本管理

Deployment 內建版本管理功能,我們可以查看應用的歷史記錄,並隨時進行版本切換。


使用 Deployment 進行應用佈署

步驟 1:編寫 Deployment YAML 檔案

以下是一個簡單的 Deployment 配置範例,它將一個名為 myapp 的應用佈署到 Kubernetes,並確保有兩個 Pod 運行:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment  # 定義 Deployment 的名稱
spec:
  replicas: 2  # 定義應用的複本數,這裡是2個實例(instance)
  selector:
    matchLabels:
      app: myapp  # 用於識別哪些 Pod 屬於這個 Deployment
  template:
    metadata:
      labels:
        app: myapp  # Pod 的標籤
    spec:
      containers:
      - name: myapp-container  # 容器名稱
        image: myapp:v1  # 使用 myapp:v1 映像
        ports:
        - containerPort: 80  # 暴露的容器埠
  1. 複本數:定義了兩個 Pod 實例 (instance),確保應用在不同的節點上有兩個副本同時運行,實現高可用性。
  2. 應用的更新和維護:需要更新映像或變更配置時,Deployment 會逐步滾動更新 (Rolling Update) 每個 Pod,確保應用的持續可用性,確保服務不中斷。
  3. 標籤和選擇器:這些定義用於將 Deployment 與一組 Pod 進行關聯。

步驟 2:使用 kubectl 佈署 Deployment

編寫好 YAML 文件後,可以使用 kubectl 命令來佈署這個 Deployment:

kubectl apply -f deployment.yaml

這個命令會將我們的 Deployment 資源提交給 Kubernetes,它會根據配置啟動應用並確保其狀態符合預期。


步驟 3:查看 Deployment 狀態

佈署完成後,我們可以使用以下命令查看 Deployment 的狀態:

kubectl get deployments

這將顯示當前 Kubernetes 叢集中所有 Deployment 的名稱、狀態、複本數等資訊。


步驟 4:更新 Deployment

當我們需要更新應用程式的映像時,只需修改 Deployment YAML 中的映像版本並重新套用配置即可:

spec:
  containers:
  - name: myapp-container
    image: myapp:v2  # 更新映像為 v2 版本

更新後使用以下命令:

kubectl apply -f deployment.yaml

這會觸發 Kubernetes 進行 滾動更新,逐步替換所有運行中的 Pod,確保更新過程不中斷服務。


步驟 5:回復 Deployment

如果更新後應用出現問題,可以快速回復到之前的穩定版本:

kubectl rollout undo deployment myapp-deployment

Kubernetes 會自動將應用恢復到上一個版本,這讓我們能夠快速解決因更新導致的問題。


步驟 6:刪除 Deployment

當我們不再需要這個應用時,可以使用 kubectl delete 命令來刪除 Deployment:

kubectl delete -f deployment.yaml

這將刪除 Deployment 及其管理的所有 Pod 和 ReplicaSet。


結語

今天的文章深入介紹了 Kubernetes 中 Deployment 的概念,以及如何運用 kubectl 進行應用程式的佈署與管理。透過 Deployment,我們能夠輕鬆實現應用的自動化管理、更新和版本回復。這不僅提高了應用程式運行的可靠性,還大幅提升了系統的高可用性。

明天,我們將探討 Kubernetes 的其他核心組件和最佳實踐,更全面地掌握 Kubernetes 中的應用程式管理與操作技巧~


參考文件


上一篇
Day14 - Kubernetes Networking 與 Service 基礎概念
下一篇
Day16 - 探索 Kubernetes Ingress:實現靈活的流量管理
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言