此文档中的信息可能已过时

此文档的更新日期比原文晚,因此其中的信息可能已过时。如果能阅读英文,请查看英文版本以获取最新信息: Kubectl user preferences (kuberc)

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)