Kubernetes 使用配置文件對Kubernetes對象進行命令式管理

2022-06-13 09:11 更新

使用配置文件對 Kubernetes 對象進行命令式管理

可以使用 ?kubectl ?命令行工具以及用 YAML 或 JSON 編寫的對象配置文件來創(chuàng)建、更新和刪除 Kubernetes 對象。 本文檔說明了如何使用配置文件定義和管理對象。

在開始之前

安裝 kubectl 。

你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:

要檢查版本,請輸入 ?kubectl version?。

權(quán)衡

?kubectl ?工具支持三種對象管理:

  • 命令式命令
  • 命令式對象配置
  • 聲明式對象配置

如何創(chuàng)建對象

你可以使用 ?kubectl create -f? 從配置文件創(chuàng)建一個對象。 請參考 kubernetes API 參考 有關(guān)詳細信息。

  • ?kubectl create -f <filename|url>?

如何更新對象

Warning: 使用 ?replace ?命令更新對象會刪除所有未在配置文件中指定的規(guī)范的某些部分。 不應(yīng)將其規(guī)范由集群部分管理的對象使用,比如類型為 ?LoadBalancer ?的服務(wù), 其中 ?externalIPs ?字段獨立于配置文件進行管理。 必須將獨立管理的字段復(fù)制到配置文件中,以防止 ?replace ?刪除它們。

你可以使用 ?kubectl replace -f ?根據(jù)配置文件更新活動對象。

  • ?kubectl replace -f <filename|url>?

如何刪除對象

你可以使用 ?kubectl delete -f ?刪除配置文件中描述的對象。

  • ?kubectl delete -f <filename|url>?
Note:
如果配置文件在 ?metadata ?節(jié)中設(shè)置了 ?generateName ?字段而非 ?name ?字段, 你無法使用 ?kubectl delete -f <filename|url>? 來刪除該對象。 你必須使用其他標志才能刪除對象。例如:
kubectl delete <type> <name>
kubectl delete <type> -l <label>

如何查看對象

你可以使用 ?kubectl get -f? 查看有關(guān)配置文件中描述的對象的信息。

  • ?kubectl get -f <filename|url> -o yaml?

?-o yaml? 標志指定打印完整的對象配置。 使用 ?kubectl get -h? 查看選項列表。

局限性

當完全定義每個對象的配置并將其記錄在其配置文件中時,?create?、 ?replace ?和?delete ?命令會很好的工作。 但是,當更新一個活動對象,并且更新沒有合并到其配置文件中時,下一次執(zhí)行 ?replace ?時,更新將丟失。 如果控制器,例如 HorizontalPodAutoscaler ,直接對活動對象進行更新,則會發(fā)生這種情況。 這有一個例子:

  1. 從配置文件創(chuàng)建一個對象。
  2. 另一個源通過更改某些字段來更新對象。
  3. 從配置文件中替換對象。在步驟2中所做的其他源的更改將丟失。

如果需要支持同一對象的多個編寫器,則可以使用 ?kubectl apply? 來管理該對象。

從 URL 創(chuàng)建和編輯對象而不保存配置

假設(shè)你具有對象配置文件的 URL。 你可以在創(chuàng)建對象之前使用 ?kubectl create --edit? 對配置進行更改。 這對于指向可以由讀者修改的配置文件的教程和任務(wù)特別有用。

kubectl create -f <url> --edit

從命令式命令遷移到命令式對象配置

從命令式命令遷移到命令式對象配置涉及幾個手動步驟。

  1. 將活動對象導出到本地對象配置文件:
  2. kubectl get <kind>/<name> -o yaml > <kind>_<name>.yaml
  3. 從對象配置文件中手動刪除狀態(tài)字段。
  4. 對于后續(xù)的對象管理,只能使用 replace 。
  5. kubectl replace -f <kind>_<name>.yaml
    

定義控制器選擇器和 PodTemplate 標簽

Warning: 不建議在控制器上更新選擇器。

推薦的方法是定義單個不變的 PodTemplate 標簽,該標簽僅由控制器選擇器使用,而沒有其他語義。

標簽示例:

selector:
  matchLabels:
      controller-selector: "apps/v1/deployment/nginx"
template:
  metadata:
    labels:
      controller-selector: "apps/v1/deployment/nginx"



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號