kubectl 用户偏好设置(kuberc)
Kubernetes 1.34 [beta]Kubernetes kuberc 配置文件允许你定义 kubectl 的偏好设置,例如默认选项和命令别名。 与 kubeconfig 文件不同,kuberc 配置文件不包含集群详情、用户名或密码。
此配置文件的默认位置是 $HOME/.kube/kuberc。 要提供路径指向自定义 kuberc 文件的 kubectl,使用 --kuberc 命令行选项,或设置 KUBERC 环境变量。
使用 kubectl.config.k8s.io/v1beta1 格式的 kuberc 文件允许你定义两种用户偏好设置:
- 别名(Aliase) —— 允许你为常用命令创建更短的版本,可以选择设置选项和参数。
- 默认值(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 在此示例中,使用了以下设置:
name—— 别名名称,不能与内置命令重名。command—— 指定别名实际执行的内置命令。 这包括支持create role这类子命令。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 在此示例中,使用了以下设置:
name—— 别名名称,不能与内置命令重名。command—— 指定别名实际执行的内置命令。这包括支持create role这类子命令。options—— 指定选项的默认值。若你在运行kubectl时显式指定某个选项, 你提供的值要比kuberc中定义的默认值优先生效。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 在此示例中,使用了以下设置:
name—— 别名名称,不能与内置命令重名。command—— 指定别名实际执行的内置命令。这包括支持create role这类子命令。options—— 指定选项的默认值。若你在运行kubectl时显式指定某个选项, 你提供的值要比kuberc中定义的默认值优先生效。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" 在此示例中,使用了以下设置:
command—— 内置命令,这包括支持create role这类子命令。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" 在此示例中,强制使用以下设置:
- 默认使用服务端应用。
- 调用
kubectl delete时默认进行交互式移除,以防止意外移除集群中的资源。
要临时禁用 kuberc 功能,只需导出环境变量 KUBERC 并将其值设置为 off:
export KUBERC=off 或者禁用此特性门控:
export KUBECTL_KUBERC=false