Kubernetes Deployment 使用指南
Kubernetes Deployment 使用指南
什麼是 Deployment?
Kubernetes Deployment 是一個 API 物件,用於管理應用程式的宣告式部署和更新。Deployment 提供了對 Pod 和 ReplicaSet 的管理功能,確保應用程式能夠穩定運行並支援無縫更新。
Deployment 的主要功能:
- 副本管理:維護指定數量的 Pod 副本,確保服務的高可用性
- 滾動更新:支援零停機時間的應用程式更新
- 版本回滾:快速回滾到先前的應用程式版本
- 擴縮容:根據需求動態調整 Pod 的數量
為什麼使用 Deployment?
相較於直接管理 Pod 或 ReplicaSet,Deployment 提供了更高層次的管理抽象:
- 宣告式管理:只需描述期望狀態,Kubernetes 會自動達成目標
- 更新策略:內建滾動更新機制,避免服務中斷
- 版本控制:保留部署歷史,支援快速回滾
Deployment 範例配置
以下是一個完整的 Deployment 配置範例,展示了如何部署一個 Java Spring Boot 應用程式:
1 | apiVersion: apps/v1 |
配置詳解
Metadata 區段
- name: Deployment 的名稱,在同一個 namespace 中必須唯一
- namespace: 指定部署的命名空間
- labels: 用於識別和分組資源的標籤
Spec 區段
- replicas: 指定要運行的 Pod 副本數量
- selector: 用於選擇管理哪些 Pod 的標籤選擇器
- template: Pod 模板,定義了 Pod 的規格
Container 配置
- image: 容器映像檔位置
- imagePullPolicy: 映像檔拉取策略,
Always
表示每次都會重新拉取 - ports: 容器對外暴露的連接埠
- env: 環境變數設定
- imagePullSecrets: 指定用於從私有容器註冊表拉取映像檔的 Secret 資源。當容器映像檔存放在需要身份驗證的私有倉庫時(如 Docker Hub 私有倉庫、Azure Container Registry、Amazon ECR 等),Kubernetes 需要相應的認證資訊才能成功拉取映像檔。此配置引用預先建立的 Kubernetes Secret 物件,該 Secret 包含了註冊表的登入憑證。
關於如何拉取 image 的詳細說明,請參考之前的文章
健康檢查配置
Liveness Probe(存活探針)
用於檢查容器是否仍在運行,如果檢查失敗,Kubernetes 會重啟容器。
Readiness Probe(就緒探針)
用於檢查容器是否準備好接收流量,如果檢查失敗,容器會從 Service 的端點中移除。
常用操作指令
部署應用程式
1 | kubectl apply -f dockertest-deployment-v0.0.8.yaml |

查看 Deployment 狀態
1 | kubectl get deployments -n dockertest-namespace |

查看 Deployment 詳細資訊
1 | kubectl describe deployment dockertest-deployment -n dockertest-namespace |

擴縮容操作
1 | # 擴展到 3 個副本 |

更新應用程式
1 | # 更新映像檔版本(從 0.0.10 更新到 0.0.11) |

查看更新狀態
1 | kubectl rollout status deployment/dockertest-deployment -n dockertest-namespace |

回滾到上一個版本
1 | kubectl rollout undo deployment/dockertest-deployment -n dockertest-namespace |

查看部署歷史
1 | kubectl rollout history deployment/dockertest-deployment -n dockertest-namespace |

查看 Pod 狀態
1 | kubectl get pods -n dockertest-namespace -l app=dockertest |

最佳實務建議
- 設定適當的資源限制: 為容器設定 CPU 和記憶體的 requests 和 limits
- 配置健康檢查: 務必設定 liveness 和 readiness probe 以確保應用程式的穩定性
- 使用標籤管理: 善用標籤來組織和管理不同的資源
- 版本控制: 使用具體的映像檔標籤而非
latest
- 命名空間隔離: 使用不同的命名空間來隔離不同環境的應用程式
透過這些配置和操作,您可以有效地管理 Kubernetes 中的應用程式部署,確保服務的高可用性和穩定性。