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