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


18會員
41內容數
歡迎來到「Marcos的方格子」!目前在「Marcos談科技」撰寫在職涯上學習到的知識,在「Marcos談書」分享我在日常的閱讀和心得,歡迎您的到來!!
留言0
查看全部
發表第一個留言支持創作者!
Marcos的方格子 的其他內容
什麼是dynatrace? dynatrace在Gartner的分類是屬於APM(應用程式效能監控)的類別。
隨著應用程式底層架構的演變,監控工具也在不斷發展。第二代監控工具(Gen 2)逐漸顯露出其限制和不足,而第三代監控工具(Gen 3)已經在許多方面取得了突破性的進展。
應用程式效能監控(APM)的演變 Gen1-APM隨著JAVA興起日漸重要 應用程式效能監控市場的發展歷程可追溯至1990s末期,當時Wily Technology(後來被CA收購)和Precise Software處於領先地位。 第一代的應用程式效能管理(APM)解決方案因應Java的快速興
什麼是dynatrace? dynatrace在Gartner的分類是屬於APM(應用程式效能監控)的類別。
隨著應用程式底層架構的演變,監控工具也在不斷發展。第二代監控工具(Gen 2)逐漸顯露出其限制和不足,而第三代監控工具(Gen 3)已經在許多方面取得了突破性的進展。
應用程式效能監控(APM)的演變 Gen1-APM隨著JAVA興起日漸重要 應用程式效能監控市場的發展歷程可追溯至1990s末期,當時Wily Technology(後來被CA收購)和Precise Software處於領先地位。 第一代的應用程式效能管理(APM)解決方案因應Java的快速興
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
在 Kubernetes 裡,Secret 就像是一個保險箱,可以放你任何不想公開的東西。比如說密碼、API 金鑰、憑證等,這樣的資料可能會被放在 Pod 裡,但你可以用 Secret 來避免直接在應用程式的程式碼中暴露這些機密資料。
Thumbnail
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
Thumbnail
Kubernetes是什麼? 1. Kubernetes是Google嚴格保密十幾年的秘密武器——Borg的一個開放原始碼版本。 2. Kubernetes是一個開放的開發平台。 3. Kubernetes是一個完備的分散式系統支撐平台。
Autoscaling 的目的是當有大量請求時,系統可以自動的增加運算資源,處理當下的大量請求;也可以根據當下資源使用率低時,自動降低運算資源,達到省錢的目的。
Thumbnail
雖然大家都知道「欠債還錢,天經地義!」的道理,但實際上的情況是,債務問題往往是要透過法律程序解決,但打官司的時間及金錢成本,實在不低,有沒有辦法透過簡單的方式來拿回欠款呢?律師來告訴你/妳什麼叫作「支付命令」!
Thumbnail
在《如何追討被積欠的貨款?(下)》文章中,曾簡單介紹支付命令的特色。今天這篇文章就詳細介紹支付命令。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
在 Kubernetes 裡,Secret 就像是一個保險箱,可以放你任何不想公開的東西。比如說密碼、API 金鑰、憑證等,這樣的資料可能會被放在 Pod 裡,但你可以用 Secret 來避免直接在應用程式的程式碼中暴露這些機密資料。
Thumbnail
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
Thumbnail
Kubernetes是什麼? 1. Kubernetes是Google嚴格保密十幾年的秘密武器——Borg的一個開放原始碼版本。 2. Kubernetes是一個開放的開發平台。 3. Kubernetes是一個完備的分散式系統支撐平台。
Autoscaling 的目的是當有大量請求時,系統可以自動的增加運算資源,處理當下的大量請求;也可以根據當下資源使用率低時,自動降低運算資源,達到省錢的目的。
Thumbnail
雖然大家都知道「欠債還錢,天經地義!」的道理,但實際上的情況是,債務問題往往是要透過法律程序解決,但打官司的時間及金錢成本,實在不低,有沒有辦法透過簡單的方式來拿回欠款呢?律師來告訴你/妳什麼叫作「支付命令」!
Thumbnail
在《如何追討被積欠的貨款?(下)》文章中,曾簡單介紹支付命令的特色。今天這篇文章就詳細介紹支付命令。