我试图使用Elixir中的Kubernetes客户端Kazan实现类似于kubectl apply
的功能,并试图了解如何执行滚动更新,特别是replace_namespaced_deployment
函数。
以REST为背景,CRUD是操纵资源的动词,Kubernetes的“replace”听起来像UPDATE
,所以我试着理解:
- 为什么更换而不更新
- replace是否等同于update?
我试图使用Elixir中的Kubernetes客户端Kazan实现类似于kubectl apply
的功能,并试图了解如何执行滚动更新,特别是replace_namespaced_deployment
函数。
以REST为背景,CRUD是操纵资源的动词,Kubernetes的“replace”听起来像UPDATE
,所以我试着理解:
2条答案
按热度按时间vbkedwbf1#
简短回答:是的
详细回答:Kubernetes中没有“update”命令。如果你想编辑资源的任何参数,你可以编辑yaml文件,然后运行:
字符串
请注意,某些资源将抛出错误,说明无法修改。在这种情况下,您需要删除资源并重新创建它。
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
注解的语法。修补本质上是部分更新,但有多种类型的修补程序对更新的描述不同。