Kubernetes 1.18功能服务器端应用Beta 2

作者: Antoine Pelisse(谷歌)

什么是服务器端应用?

服务器端应用是将“ kubectl应用”迁移到apiserver的重要工作。它由Apply工作组于2018年启动。

使用kubectl声明性地应用资源面临以下挑战:

  • 一个需要使用kubectl go代码,或者他们必须掏出外壳来使用kubectl。

  • 战略性合并补丁程序是kubectl使用的补丁程序格式,有机地增长了,并且在保持与各种api服务器版本的兼容性的同时,挑战性的修复。

  • 某些功能很难直接在客户端上实现,例如,联合。

服务器端Apply是在Kubernetes api服务器上运行的一种新的合并算法,以及对字段所有权的跟踪。服务器端应用程序启用了诸如冲突检测之类的新功能,因此系统知道两个参与者何时尝试编辑同一字段。

它是如何工作的,什么是ManagedFields?

服务器端Apply通过跟踪系统的哪个actor更改了对象的每个字段来工作。它通过将所有更新散布到对象,并记录所有已更改的字段以及操作时间来实现。所有这些信息都存储在对象元数据中的managedFields中。由于对象可以具有许多字段,因此该字段可能会很大。

当有人提出申请时,我们可以使用存储在managedFields中的信息来报告相关的冲突,并帮助合并算法做正确的事。

在1.18之前已经不是Beta吗?

是的,服务器端Apply从1.16开始是Beta版,但是它没有跟踪与尚未应用的对象相关联的字段的所有者。这意味着大多数对象都没有存储managedFields元数据,并且这些对象的冲突无法解决。在Kubernetes 1.18中,所有新对象都将附加有ManagedFields,并提供有关冲突的准确信息。

如何使用?

The most common way to use this is through kubectl: kubectl apply --server-side. This is likely to show conflicts with other actors, including client-side apply. When that happens, conflicts can be forced by using the --force-conflicts flag, which will grab the ownership for the fields that have changed.

当前限制

目前,我们有两个重要限制,尤其是子资源。首先是,如果您申请一个身份,该身份将被忽略。我们仍将尝试获取字段,这可能会导致无效冲突。另一个是我们不更新某些子资源(包括比例)上的managedField,因此您可能看不到有关水平容器自动缩放器更改副本数量的信息。

下一步是什么?

我们正在努力改善在kubectl中使用服务器端应用的体验,并且正在努力使其成为默认设置。作为其中的一部分,我们希望改善从客户端到服务器端的迁移。

我能提供帮助吗?

当然!通过#wg-apply,工作组apply可以通过 邮件列表 而且我们每隔一个星期二在太平洋时间9.30 PT见面。我们有许多令人兴奋的功能可以构建,并可以使用各种帮助。

我们还想借此机会感谢所有参与使新Beta版成为可能的贡献者的辛勤工作:

  • 丹尼尔·史密斯
  • 珍妮·巴克利
  • 乔·贝茨
  • 朱利安·莫德斯托(Julian Modesto)
  • 凯文·维斯穆勒
  • 玛丽亚·恩塔拉(Maria Ntalla)