Kubernetes 物件管理

kubectl 命令列工具支援幾種不同的方式來建立和管理 Kubernetes 物件。本文件概述不同的方法。如需透過 Kubectl 管理物件的詳細資訊,請參閱 Kubectl 書籍

管理技術

管理技術操作對象建議環境支援的寫入者學習曲線
命令式指令即時物件開發專案1+最低
命令式物件組態個別檔案生產專案1中等
宣告式物件組態檔案目錄生產專案1+最高

命令式指令

當使用命令式指令時,使用者直接在叢集中的即時物件上操作。使用者以引數或旗標的形式將操作提供給 kubectl 命令。

這是開始使用或在叢集中執行一次性任務的建議方式。由於此技術直接在即時物件上操作,因此不提供先前組態的歷史記錄。

範例

透過建立 Deployment 物件來執行 nginx 容器的執行個體

kubectl create deployment nginx --image nginx

權衡

與物件組態相比的優點

  • 命令以單一動作字詞表示。
  • 命令僅需單一步驟即可變更叢集。

與物件組態相比的缺點

  • 命令不與變更審查流程整合。
  • 命令不提供與變更相關聯的稽核追蹤。
  • 命令不提供記錄來源,除非是即時的內容。
  • 命令不提供建立新物件的範本。

命令式物件組態

在命令式物件組態中,kubectl 命令指定操作(建立、取代等等)、選用旗標和至少一個檔案名稱。指定的檔案必須包含 YAML 或 JSON 格式的物件完整定義。

如需物件定義的更多詳細資訊,請參閱 API 參考

範例

建立組態檔中定義的物件

kubectl create -f nginx.yaml

刪除兩個組態檔中定義的物件

kubectl delete -f nginx.yaml -f redis.yaml

透過覆寫即時組態來更新組態檔中定義的物件

kubectl replace -f nginx.yaml

權衡

與命令式指令相比的優點

  • 物件組態可以儲存在來源控制系統中,例如 Git。
  • 物件組態可以與流程整合,例如在推送和稽核追蹤之前審查變更。
  • 物件組態提供建立新物件的範本。

與命令式指令相比的缺點

  • 物件組態需要對物件綱要的基本理解。
  • 物件組態需要編寫 YAML 檔案的額外步驟。

與宣告式物件組態相比的優點

  • 命令式物件組態行為更簡單且更容易理解。
  • 截至 Kubernetes 1.5 版,命令式物件組態更加成熟。

與宣告式物件組態相比的缺點

  • 命令式物件組態最適用於檔案,而非目錄。
  • 對即時物件的更新必須反映在組態檔中,否則在下次取代期間將會遺失。

宣告式物件組態

當使用宣告式物件組態時,使用者在本地儲存的物件組態檔上操作,但是使用者不定義要對檔案執行的操作。kubectl 會自動偵測每個物件的建立、更新和刪除操作。這使得可以在目錄上工作,其中不同的物件可能需要不同的操作。

範例

處理 configs 目錄中的所有物件組態檔,並建立或修補即時物件。您可以先使用 diff 來查看將進行哪些變更,然後套用

kubectl diff -f configs/
kubectl apply -f configs/

遞迴處理目錄

kubectl diff -R -f configs/
kubectl apply -R -f configs/

權衡

與命令式物件組態相比的優點

  • 直接對線上物件做的變更會被保留,即使它們沒有被合併回組態檔中。
  • 宣告式物件組態對於操作目錄以及自動偵測每個物件的操作類型(建立、修補、刪除)有更好的支援。

與命令式物件組態相比的缺點

  • 當結果出乎意料時,宣告式物件組態更難以除錯和理解結果。
  • 使用差異進行部分更新會產生複雜的合併和修補操作。

接下來是什麼

上次修改時間為 2022 年 1 月 8 日下午 6:09 PST:重新組織 Kubernetes 物件操作章節 (634c17f61c)