Kubernetes v1.34:使用者偏好設定 (kuberc) 已可在 kubectl 1.34 中進行測試

你是否曾希望能在 kubectl 中預設啟用互動式刪除功能?或者,你可能想定義一些自定義別名,但又不想手動生成數百個?現在,你的願望可以實現了。SIG-CLI 一直在努力為 kubectl 新增使用者偏好設定,我們很高興地宣佈,此功能將在 Kubernetes v1.34 版本中進入 Beta 階段。

工作原理

關於此功能的完整描述,請參閱我們的官方文件,但本文將回答文章開頭提出的兩個問題。

在深入細節之前,我們先快速瞭解一下使用者偏好檔案的外觀以及它應該放在哪裡。預設情況下,kubectl 會在你的預設 kubeconfig 目錄(即 $HOME/.kube)中查詢 kuberc 檔案。另外,你也可以使用 --kuberc 選項或 KUBERC 環境變數來指定其位置。

與所有 Kubernetes 清單檔案一樣,kuberc 檔案以 apiVersionkind 開頭

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
# the user preferences will follow here

預設值

讓我們從為 kubectl 命令選項設定預設值開始。我們的目標是始終使用互動式刪除,這意味著我們希望 kubectl delete--interactive 選項始終設定為 true。這可以透過在我們的 kuberc 檔案中新增以下內容來實現:

defaults:
- command: delete
  options:
  - name: interactive
    default: "true"

在上面的示例中,我引入了 defaults 部分,它允許使用者為 kubectl 選項定義預設值。在本例中,我們將 kubectl delete 的 interactive 選項預設設定為 true。如果使用者明確提供了不同的值,例如 kubectl delete --interactive=false,則這個預設值可以被覆蓋,在這種情況下,明確指定的選項優先。

SIG-CLI 強烈推薦的另一個預設設定是使用伺服器端應用(Server-Side Apply)。為此,你可以將以下程式碼片段新增到你的偏好設定中:

# continuing defaults section
- command: apply
  options:
  - name: server-side
    default: "true"

別名

定義別名的功能可以讓我們在輸入命令時節省寶貴的時間。我敢打賭,你很可能為 kubectl 定義了一個別名,因為輸入七個字母肯定比只按一個 k 要長。

因此,在我們決定實現使用者偏好設定時,除了預設值設定外,定義別名的功能也是必不可少的。要為任何內建命令定義別名,請在你的 kuberc 檔案中新增以下內容:

aliases:
- name: gns
  command: get
  prependArgs:
   - namespace
  options:
   - name: output
     default: json

上面的內容有點複雜,讓我來分解一下。首先,我們引入了一個新部分:aliases。在這裡,我們定義了一個新別名 gns,它被對映到 get 命令。接下來,我們定義了引數(namespace 資源),這些引數將緊跟在命令名之後插入。此外,我們還為這個別名設定了 --output=json 選項。options 塊的結構與 defaults 部分中的結構相同。

你可能已經注意到,我們引入了一種用於在前面新增引數的機制,你可能會想知道是否有相應的設定用於在後面追加引數(換句話說,就是在命令末尾、使用者提供的引數之後新增)。這可以透過 appendArgs 塊來實現,如下所示:

# continuing aliases section
- name: runx
  command: run
  options:
    - name: image
      default: busybox
    - name: namespace
      default: test-ns
  appendArgs:
    - --
    - custom-arg

在這裡,我們引入了另一個別名:runx,它呼叫 kubectl run 命令,傳遞帶有預定義值的 --image--namespace 選項,並在呼叫結束時追加 --custom-arg

除錯

我們希望 kubectl 的使用者偏好功能能為我們的使用者帶來新的可能性。每當你不確定時,可以隨時以更高的詳細級別執行 kubectl。在 -v=5 級別下,你應該能獲得該功能所有可能的除錯資訊,這在報告問題時至關重要。

要了解更多資訊,我鼓勵你閱讀我們的官方文件實際的提案

參與其中

Kubectl 使用者偏好功能已進入 Beta 階段,我們非常期待你的反饋。我們很想知道你喜歡它的哪些方面,以及你希望它解決哪些問題。歡迎加入 SIG-CLI Slack 頻道,或在 kubectl 程式碼倉庫中提交 issue。你也可以參加我們每隔一個星期三舉行的社群會議,與我們分享你的使用體驗。