Kubernetes v1.34:用户偏好设置 (kuberc) 已可在 kubectl 1.34 中进行测试
你是否曾希望能在 kubectl
中默认启用交互式删除功能?或者,你可能想定义一些自定义别名,但又不想手动生成数百个?现在,你的愿望可以实现了。SIG-CLI 一直在努力为 kubectl 添加用户偏好设置,我们很高兴地宣布,此功能将在 Kubernetes v1.34 版本中进入 Beta 阶段。
工作原理
关于此功能的完整描述,请参阅我们的官方文档,但本文将回答文章开头提出的两个问题。
在深入细节之前,我们先快速了解一下用户偏好文件的外观以及它应该放在哪里。默认情况下,kubectl
会在你的默认 kubeconfig 目录(即 $HOME/.kube
)中查找 kuberc
文件。另外,你也可以使用 --kuberc
选项或 KUBERC
环境变量来指定其位置。
与所有 Kubernetes 清单文件一样,kuberc
文件以 apiVersion
和 kind
开头
apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
# the user preferences will follow here
默认值
让我们从为 kubectl
命令选项设置默认值开始。我们的目标是始终使用交互式删除,这意味着我们希望 kubectl delete
的 --interactive
选项始终设置为 true
。这可以通过在我们的 kuberc
文件中添加以下内容来实现:
defaults:
- command: delete
options:
- name: interactive
default: "true"
在上面的示例中,我引入了 defaults
部分,它允许用户为 kubectl
选项定义默认值。在本例中,我们将 kubectl delete
的 interactive 选项默认设置为 true
。如果用户明确提供了不同的值,例如 kubectl delete --interactive=false
,则这个默认值可以被覆盖,在这种情况下,明确指定的选项优先。
SIG-CLI 强烈推荐的另一个默认设置是使用服务器端应用(Server-Side Apply)。为此,你可以将以下代码片段添加到你的偏好设置中:
# continuing defaults section
- command: apply
options:
- name: server-side
default: "true"
别名
定义别名的功能可以让我们在输入命令时节省宝贵的时间。我敢打赌,你很可能为 kubectl
定义了一个别名,因为输入七个字母肯定比只按一个 k
要长。
因此,在我们决定实现用户偏好设置时,除了默认值设置外,定义别名的功能也是必不可少的。要为任何内置命令定义别名,请在你的 kuberc
文件中添加以下内容:
aliases:
- name: gns
command: get
prependArgs:
- namespace
options:
- name: output
default: json
上面的内容有点复杂,让我来分解一下。首先,我们引入了一个新部分:aliases
。在这里,我们定义了一个新别名 gns
,它被映射到 get
命令。接下来,我们定义了参数(namespace
资源),这些参数将紧跟在命令名之后插入。此外,我们还为这个别名设置了 --output=json
选项。options
块的结构与 defaults
部分中的结构相同。
你可能已经注意到,我们引入了一种用于在前面添加参数的机制,你可能会想知道是否有相应的设置用于在后面追加参数(换句话说,就是在命令末尾、用户提供的参数之后添加)。这可以通过 appendArgs
块来实现,如下所示:
# continuing aliases section
- name: runx
command: run
options:
- name: image
default: busybox
- name: namespace
default: test-ns
appendArgs:
- --
- custom-arg
在这里,我们引入了另一个别名:runx
,它调用 kubectl run
命令,传递带有预定义值的 --image
和 --namespace
选项,并在调用结束时追加 --
和 custom-arg
。
调试
我们希望 kubectl
的用户偏好功能能为我们的用户带来新的可能性。每当你不确定时,可以随时以更高的详细级别运行 kubectl
。在 -v=5
级别下,你应该能获得该功能所有可能的调试信息,这在报告问题时至关重要。
参与其中
Kubectl 用户偏好功能已进入 Beta 阶段,我们非常期待你的反馈。我们很想知道你喜欢它的哪些方面,以及你希望它解决哪些问题。欢迎加入 SIG-CLI Slack 频道,或在 kubectl 代码仓库中提交 issue。你也可以参加我们每隔一个星期三举行的社区会议,与我们分享你的使用体验。