Kubernetes 物件管理
kubectl
命令列工具支援多種不同的方式來建立和管理 Kubernetes 物件。本文件概述了不同的方法。有關透過 Kubectl 管理物件的詳細資訊,請閱讀 Kubectl 書籍。
管理技術
警告
Kubernetes 物件應該只使用一種技術進行管理。對同一物件混合和匹配技術會導致未定義的行為。管理技術 | 操作 | 推薦環境 | 支援的作者 | 學習曲線 |
---|---|---|---|---|
命令式命令 | 活躍物件 | 開發專案 | 1+ | 最低 |
命令式物件配置 | 單個檔案 | 生產專案 | 1 | 中等 |
宣告式物件配置 | 檔案目錄 | 生產專案 | 1+ | 最高 |
命令式命令
使用命令式命令時,使用者直接在叢集中的活躍物件上操作。使用者將操作作為引數或標誌提供給 kubectl
命令。
這是開始或在叢集中執行一次性任務的推薦方式。由於此技術直接在活躍物件上操作,因此它不提供以前配置的歷史記錄。
示例
透過建立 Deployment 物件執行 Nginx 容器例項
kubectl create deployment nginx --image nginx
權衡
與物件配置相比的優勢
- 命令以單個動作詞表示。
- 命令只需一步即可對叢集進行更改。
與物件配置相比的缺點
- 命令不與更改審查流程整合。
- 命令不提供與更改相關的審計跟蹤。
- 命令除了活躍狀態之外不提供任何記錄來源。
- 命令不提供建立新物件的模板。
命令式物件配置
在命令式物件配置中,kubectl 命令指定操作(建立、替換等)、可選標誌和至少一個檔名。指定的檔案必須包含 YAML 或 JSON 格式的物件的完整定義。
有關物件定義的更多詳細資訊,請參閱 API 參考。
警告
命令式replace
命令用新提供的規範替換現有規範,丟棄配置檔案中缺少的所有物件更改。不應將此方法與其規範獨立於配置檔案更新的資源型別一起使用。例如,型別為 LoadBalancer
的 Service 具有其 externalIPs
欄位,該欄位由叢集獨立於配置進行更新。示例
建立配置檔案中定義的物件
kubectl create -f nginx.yaml
刪除兩個配置檔案中定義的物件
kubectl delete -f nginx.yaml -f redis.yaml
透過覆蓋活躍配置來更新配置檔案中定義的物件
kubectl replace -f nginx.yaml
權衡
與命令式命令相比的優勢
- 物件配置可以儲存在 Git 等原始碼控制系統中。
- 物件配置可以與諸如在推送前審查更改和審計跟蹤之類的流程整合。
- 物件配置提供了一個建立新物件的模板。
與命令式命令相比的缺點
- 物件配置需要對物件模式有基本瞭解。
- 物件配置需要額外編寫 YAML 檔案的步驟。
與宣告式物件配置相比的優勢
- 命令式物件配置行為更簡單,更容易理解。
- 截至 Kubernetes 1.5 版本,命令式物件配置更成熟。
與宣告式物件配置相比的缺點
- 命令式物件配置最適合檔案,而不是目錄。
- 對活躍物件的更新必須反映在配置檔案中,否則它們將在下次替換時丟失。
宣告式物件配置
使用宣告式物件配置時,使用者在本地儲存的物件配置檔案上操作,但使用者不定義對檔案執行的操作。建立、更新和刪除操作由 kubectl
自動按物件檢測。這使得可以在目錄上工作,其中不同的物件可能需要不同的操作。
注意
宣告式物件配置保留其他作者所做的更改,即使這些更改未合併回物件配置檔案。這可以透過使用patch
API 操作僅寫入觀察到的差異,而不是使用 replace
API 操作替換整個物件配置來實現。示例
處理 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)