Kubernetes v1.34:用户偏好设置 (kuberc) 已可在 kubectl 1.34 中进行测试

你是否曾希望能在 kubectl 中默认启用交互式删除功能?或者,你可能想定义一些自定义别名,但又不想手动生成数百个?现在,你的愿望可以实现了。SIG-CLI 一直在努力为 kubectl 添加用户偏好设置,我们很高兴地宣布,此功能将在 Kubernetes v1.34 版本中进入 Beta 阶段。

工作原理

关于此功能的完整描述,请参阅我们的官方文档,但本文将回答文章开头提出的两个问题。

在深入细节之前,我们先快速了解一下用户偏好文件的外观以及它应该放在哪里。默认情况下,kubectl 会在你的默认 kubeconfig 目录(即 $HOME/.kube)中查找 kuberc 文件。另外,你也可以使用 --kuberc 选项或 KUBERC 环境变量来指定其位置。

与所有 Kubernetes 清单文件一样,kuberc 文件以 apiVersionkind 开头

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