kubectl apply vs kubectl edit
画了一个图来描述一个问题:某个deployment一直都是通过模板生成yaml并通过kubectl apply到集群,如果现在直接在集群上通过通过kubectl edit增加一段apply的模板中没有的配置项,下次通过模板继续apply更新,kubectl edit增加的部分会被置空吗?
答案是并不会。因为kubectl apply计算最终patch的数据时,需要删减的部分是通过:集群中当前资源的last-apply-anno和要apply的资源比较得到的。类似oam实现kubevela等,也是在deployment上维护oam-last-apply,所以道理都是一样的,需要注意的是从kubectl apply迁移到oam,两者维护的last-apply-anno不一致导致的问题。
如果经常因为patch失败(client-go/kubectl patch),但是kubectl apply却没问题,那就需要去了解一下kubectl apply的实现逻辑,看看这个吧:kubectl apply源码分析