畫了一個圖來描述一個問題:某個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源碼分析
