Kubernetes中的“replace”是否等同于“update”?

ltskdhd1  于 5个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(73)

我试图使用Elixir中的Kubernetes客户端Kazan实现类似于kubectl apply的功能,并试图了解如何执行滚动更新,特别是replace_namespaced_deployment函数。
以REST为背景,CRUD是操纵资源的动词,Kubernetes的“replace”听起来像UPDATE,所以我试着理解:

  • 为什么更换而不更新
  • replace是否等同于update?
vbkedwbf

vbkedwbf1#

简短回答:是的
详细回答:Kubernetes中没有“update”命令。如果你想编辑资源的任何参数,你可以编辑yaml文件,然后运行:

kubectl replace -f FILE

字符串
请注意,某些资源将抛出错误,说明无法修改。在这种情况下,您需要删除资源并重新创建它。

ohtdti5x

ohtdti5x2#

在Kubernetes API中,“Replace”与“Update”是同义词。从OpenAPI规范中可以看到,像replaceAppsV1NamespacedDeployment这样的操作确实Map到了PUT http方法。

“为什么替换不更新?”

在RESTful语义中,更新是替换。当您使用PUT动词发送数据时,约定是您需要提供资源的完整数据,并且资源的表示将完全替换先前的表示。单词“replace”实际上在PUT方法的定义中(rfc9110第9节):
用请求内容替换目标资源的所有当前表示。

kubectl apply的语义

kubectl apply的行为比任何一个标准的API方法都要复杂。如果资源不存在,它会创建资源,如果资源存在,它会对其进行修补,同时还会应用一些基于kubectl.kubernetes.io/last-applied-configuration注解的语法。修补本质上是部分更新,但有多种类型的修补程序对更新的描述不同。

相关问题