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

更新於 2024/06/20閱讀時間約 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


avatar-img
18會員
44內容數
歡迎來到「Marcos的方格子」!目前在「Marcos談科技」撰寫在職涯上學習到的知識,在「Marcos談書」分享我在日常的閱讀和心得,歡迎您的到來!!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
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
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
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
在《如何追討被積欠的貨款?(下)》文章中,曾簡單介紹支付命令的特色。今天這篇文章就詳細介紹支付命令。