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。你也可以参加我们每隔一个星期三举行的社区会议,与我们分享你的使用体验。