Kubectl 使用者偏好設定 (kuberc)

特性狀態: Kubernetes 1.34 [beta]

Kubernetes kuberc 配置檔案允許您為 kubectl 定義偏好設定,例如預設選項和命令別名。與 kubeconfig 檔案不同,kuberc 配置檔案包含叢集詳細資訊、使用者名稱或密碼。

此配置檔案的預設位置是 $HOME/.kube/kuberc。要為 kubectl 提供自定義 kuberc 檔案的路徑,請使用 --kuberc 命令列選項,或設定 KUBERC 環境變數。

使用 kubectl.config.k8s.io/v1beta1 格式的 kuberc 允許您定義兩種型別的使用者偏好設定:

  1. 別名 - 允許您建立常用命令的縮寫版本,並可選擇設定選項和引數。
  2. 預設值 - 允許您配置常用命令的預設選項值。

別名

kuberc 配置中,別名部分允許您為 kubectl 命令定義自定義快捷方式,可選擇預設命令列引數和標誌。

下一個示例為 kubectl get 子命令定義了一個 kubectl getn 別名,並另外指定了 JSON 輸出格式:--output=json

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
aliases:
- name: getn
  command: get
  options:
   - name: output
     default: json

在此示例中,使用了以下設定:

  1. name - 別名必須與內建命令不衝突。
  2. command - 指定您的別名將執行的底層內建命令。這包括對 create role 等子命令的支援。
  3. options - 指定選項的預設值。如果您在執行 kubectl 時顯式指定了某個選項,您提供的值將優先於 kuberc 中定義的預設值。

使用此別名,執行 kubectl getn pods 將預設使用 JSON 輸出。但是,如果您執行 kubectl getn pods -oyaml,輸出將是 YAML 格式。

完整的 kuberc 架構可在此 獲取。

prependArgs

下一個示例將擴充套件上一個示例,引入 prependArgs 部分,該部分允許在 kubectl 命令及其子命令(如果存在)之後立即插入任意引數。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
aliases:
  - name: getn
    command: get
    options:
      - name: output
        default: json
    prependArgs:
      - namespace

在此示例中,使用了以下設定:

  1. name - 別名必須與內建命令不衝突。
  2. command - 指定您的別名將執行的底層內建命令。這包括對 create role 等子命令的支援。
  3. options - 指定選項的預設值。如果您在執行 kubectl 時顯式指定了某個選項,您提供的值將優先於 kuberc 中定義的預設值。
  4. prependArgs - 指定將放置在命令之後的顯式引數。這裡,這將轉換為 kubectl get namespace test-ns --output json

appendArgs

下一個示例將引入一個與 prepending arguments 類似的機制,但這次我們將引數附加到 kubectl 命令的末尾。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
aliases:
- name: runx
  command: run
  options:
    - name: image
      default: busybox
    - name: namespace
      default: test-ns
  appendArgs:
    - --
    - custom-arg

在此示例中,使用了以下設定:

  1. name - 別名必須與內建命令不衝突。
  2. command - 指定您的別名將執行的底層內建命令。這包括對 create role 等子命令的支援。
  3. options - 指定選項的預設值。如果您在執行 kubectl 時顯式指定了某個選項,您提供的值將優先於 kuberc 中定義的預設值。
  4. appendArgs - 指定將放置在命令末尾的顯式引數。這裡,這將轉換為 kubectl run test-pod --namespace test-ns --image busybox -- custom-arg

defaults

kuberc 配置中,defaults 部分允許您為命令列引數指定預設值。

下一個示例使互動式移除成為呼叫 kubectl delete 的預設模式。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
defaults:
- command: delete
  options:
    - name: interactive
      default: "true"

在此示例中,使用了以下設定:

  1. command - 內建命令,包括對 create role 等子命令的支援。
  2. options - 指定選項的預設值。如果您在執行 kubectl 時顯式指定了某個選項,您提供的值將優先於 kuberc 中定義的預設值。

使用此設定,執行 kubectl delete pod/test-pod 將預設提示確認。但是,kubectl delete pod/test-pod --interactive=false 將繞過確認。

建議的預設值

kubectl 的維護者鼓勵您採用以下預設值的 kuberc。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
defaults:
  # (1) default server-side apply
  - command: apply
    options:
      - name: server-side
        default: "true"

  # (2) default interactive deletion
  - command: delete
    options:
      - name: interactive
        default: "true"

在此示例中,強制執行了以下設定:

  1. 預設使用 Server-Side Apply
  2. 預設情況下,呼叫 kubectl delete 時進行互動式移除,以防止意外從叢集中移除資源。

停用 kuberc

要暫時停用 kuberc 功能,請將環境變數 KUBERC 設定(並匯出)為 off

export KUBERC=off

或停用功能門

export KUBECTL_KUBERC=false
最後修改於 2025 年 8 月 28 日太平洋標準時間下午 6:47: KUBERC 環境變數 (4242343f44)