kubectl edit
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_edit/
Examples
Edit in JSON
bash
kubectl edit -o json deploy foo
Change Editor
bash
KUBE_EDITOR="vim" kubectl edit deploy foo
Save Config
bash
kubectl edit deploy foo --save-config
- 把本次修改后的完整资源配置,保存到
annotation
kubectl.kubernetes.io/last-applied-configuration
- 这个注解是给
kubectl apply
做三方合并时用的。 - 下次使用
apply
时,能正确识别差异:如删除字段、重写结构。
保存/退出
在 Kubernetes 中使用 kubectl edit
命令编辑资源(如 Deployment
)时, 你用的 shell 编辑器(如 vim
)保存内容但不退出时更改不会生效, 这是因为 kubectl edit
的工作机制是等你退出编辑器后再提交变更,而不是实时监听文件变化。
背后机制
kubectl edit
会:
- 读取当前资源;
- 写入一个临时文件;
- 使用你的默认编辑器(通常是
vim
或nano
)打开该临时文件; - 等你退出编辑器后,
kubectl
才会继续执行下一步; - 检查文件是否有改动(通过 diff);
- 如果有更改,就把更新后的资源提交到 API Server。
所以即使你在 vim
中按下 :w
保存了内容,但只要你 还没退出编辑器(如 :q
或 :wq
), kubectl
的主进程就还在等待你完成编辑操作,不会向 API Server 提交更新。
使用 Patch
bash
kubectl patch deployment myapp \
--type=merge \
-p '{"spec": {"replicas": 3}}'