Kubernetes:命令式(Imperative)與宣告式(Declarative)管理的差異

閱讀時間約 4 分鐘

Kubernetes 是一個開源的容器管理平台,它可以幫助您自動化容器應用程式的部署、擴展和管理。在 Kubernetes 中,有兩種主要的管理方式:命令式和宣告式。

命令式(Imperative)管理:

注重在「How to do」

命令式管理方式是通過直接給 Kubernetes 下達指令,告訴它應該如何進行操作。這些指令可能是使用 kubectl 命令行工具直接操作的,也可能是使用其他的客戶端工具或程式碼(shell script腳本)來執行的。

優點:

  1. 直觀和快速: 命令式管理是一種直觀的方式,對於單個操作很容易理解和執行。易於初學者,或是臨時測試功能。
  2. 即時反饋: 您可以立即看到您的操作結果,因為您直接在命令行中執行命令。
  3. 適用於單一任務: 對於一些簡單的操作,如創建一個臨時的資源或進行快速的設定更改,命令式方式較為方便。

缺點:

  1. 碎片化配置: 命令式方式操作容易導致管理配置的碎片化。因為每次操作都是單獨的命令,不同管理者難以維護和追蹤多個操作之間的相互關係。
  2. 難於重複執行: 由於操作步驟並不會被記錄,當需要重複執行或在不同叢集建立相同配置的測試環境時,很難確保一致性。
  3. 缺乏版本控制: 單一操作通常無法進行版本控制,無法輕鬆地追蹤設定變更、恢復操作或與團隊共同管理叢集。
  4. 難以自動化: 命令式管理方式不太適合自動化,因為它缺乏一個明確的描述來定義狀態,這使得自動化工作變得更困難。

範例:

創建一個名為 my-nginx 的 Deployment,並指定副本數為 3。以下是使用kubectl create的範例。

# 使用命令式方式創建 Deployment
kubectl create deployment my-nginx --image=nginx --replicas=3

宣告式(Declarative)管理:

注重在「What to do」

宣告式管理方式則是通過提供一個描述狀態的文件(通常是 YAML 格式),然後將該文件提交給 Kubernetes,讓 Kubernetes 根據這份文件建立所需的資源或是配置。

優點:

  1. 可追蹤性和可維護性: 宣告式管理通常使用 YAML檔來描述資源的狀態,這使得配置更易於追蹤和管理。
  2. 基礎架構即代碼 (IaC): 宣告式管理與基礎架構即代碼的理念相符,可以將管理用的設置撰寫成程式碼,利於未來的自動化和基礎架構管理。
  3. 易於自動化: 宣告式管理方式更容易於自動化。可以搭配使用 CI/CD 流程自動部署和更新應用程式,從而提高效率並降低人為錯誤的風險。
  4. 回滾和修復: 如果更新導致問題,您可以輕鬆地回滾到之前的配置狀態,以修復問題。

缺點:

  1. 學習曲線: 初學者可能需要一些時間來學習宣告式管理的方式,特別是理解和編寫 YAML 配置文件。
  2. 複雜性: 在YAML配置文件中表示複雜的拓撲關係、服務依賴可能需要花時間去規範和管理。

範例:

創建一個名為 my-nginx 的 Deployment,並指定副本數為 3。以下是使用YAML描述相同的 Deployment,並使用kubectl apply去做部屬。

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: nginx
image: nginx

使用 kubectl 的 apply 命令來創建或更新這個 Deployment:

# 使用宣告式方式創建或更新 Deployment
kubectl apply -f my-nginx-deployment.yaml

總結

命令式管理方式快速直觀,但容易導致碎片化且不利於自動化。宣告式管理方式則更適合長期運營,具有可追蹤性、可維護性和一致性,適合自動化和版本控制。

raw-image


17會員
34內容數
歡迎來到「Marcos的方格子」!目前在「Marcos談科技」撰寫在職涯上學習到的知識,在「Marcos談書」分享我在日常的閱讀和心得,歡迎您的到來!!
留言0
查看全部
發表第一個留言支持創作者!