Kubernetes API调用是秘密更新还是配置映射更新原子调用



是客户端。机密(命名空间(。是否更新(机密(原子调用?如果此调用以某种方式失败,那么存储在Kubernetes API服务器中的原始机密是否已损坏?

https://github.com/kubernetes/client-go/blob/d1b30110f1abd3b2fb21c5c2daad4345ede8a9fc/kubernetes/typed/core/v1/secret.go#L41

同样,是核心。ConfigMaps(命名空间(。是否更新(configmap(原子调用?如果此调用失败,那么现有的配置映射是否已损坏?

client goUPDATE是一个HTTP PUT,因此它将替换对象,并且是一个原子操作。然而,在执行此操作时需要考虑一些情况,例如,如果有多个客户端在同一对象上操作。。。你应该看看这个链接的客户端go示例中的替代解决方案:

https://github.com/kubernetes/client-go/blob/master/examples/create-update-delete-deployment/main.go#L109-L123

根据Kubernetes关于服务器端应用的文档,您可以找到以下内容:

通过"字段管理"跟踪对象字段的更改"机制。当字段的值更改时,所有权从其当前管理器转移到进行更改的管理器。当尝试应用对象时,具有不同值且由另一个管理器拥有的字段将导致冲突。这样做是为了表明操作可能会撤消另一个合作者的更改。可以强制冲突,在这种情况下,值将被推翻,所有权将被转移。


以及有关合并策略的一些信息。

合并策略

通过服务器端应用实现的合并策略提供了一个总体上更稳定的对象生命周期。服务器端应用程序尝试根据管理字段的人来合并字段,而不是仅根据值来否决字段。通过这种方式,它旨在通过减少意外干扰,使多个参与者更容易、更稳定地更新同一对象。

当用户将"完全指定的意图"对象发送到服务器端应用端点时,如果在两个位置都指定了值,则服务器会将其与支持应用配置中的值的活动对象合并。如果应用的配置中存在的项目集不是同一用户上次应用的项目的超集,则将删除未由任何其他应用程序管理的每个缺失项目。有关如何在合并时使用对象的模式来做出决策的更多信息,请参阅sigs.k8s.io/structured-merge-diff.

希望这能有所帮助。


编辑:是,应用和更新使用此功能。

应用和更新

此功能考虑的两种操作类型是Apply(内容类型为application/apply-patch+yamlPATCH(和Update(修改对象的所有其他操作(。二者都操作会更新managedFields,但会有一些行为不同地

例如,在更新时,只有应用操作在冲突时失败没有。此外,应用操作需要识别自身通过提供fieldManager查询参数参数对于更新操作是可选的。最后,当使用应用操作不能在对象中包含managedFields正在应用。

最新更新