kubectl 用户偏好设置(kuberc)

特性状态: Kubernetes 1.34 [beta]

Kubernetes kuberc 配置文件允许你定义 kubectl 的偏好设置,例如默认选项和命令别名。 与 kubeconfig 文件不同,kuberc 配置文件包含集群详情、用户名或密码。

此配置文件的默认位置是 $HOME/.kube/kuberc。 要提供路径指向自定义 kuberc 文件的 kubectl,使用 --kuberc 命令行选项,或设置 KUBERC 环境变量。

使用 kubectl.config.k8s.io/v1beta1 格式的 kuberc 文件允许你定义两种用户偏好设置:

  1. 别名(Aliase) —— 允许你为常用命令创建更短的版本,可以选择设置选项和参数。
  2. 默认值(Default) —— 允许你为常用命令配置默认的选项值。

aliases

kuberc 配置中,aliases(别名) 部分允许你为 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

下一个示例将介绍一种与前面 prependArgs 类似的机制,
不同之处在于,这次我们会在 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) 默认启用服务端应用
  - command: apply
    options:
      - name: server-side
        default: "true"

  # (2) 默认启用交互式删除
  - command: delete
    options:
      - name: interactive
        default: "true"

在此示例中,强制使用以下设置:

  1. 默认使用服务端应用
  2. 调用 kubectl delete 时默认进行交互式移除,以防止意外移除集群中的资源。

要临时禁用 kuberc 功能,只需导出环境变量 KUBERC 并将其值设置为 off

export KUBERC=off

或者禁用此特性门控:

export KUBECTL_KUBERC=false
最后修改 October 24, 2025 at 9:47 AM PST: [zh] Sync kubectl/kuberc.md (0ad87b258d)