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)