Skip to content

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 会:

  • 读取当前资源;
  • 写入一个临时文件;
  • 使用你的默认编辑器(通常是 vimnano)打开该临时文件;
  • 等你退出编辑器后,kubectl 才会继续执行下一步;
  • 检查文件是否有改动(通过 diff);
  • 如果有更改,就把更新后的资源提交到 API Server。

所以即使你在 vim 中按下 :w 保存了内容,但只要你 还没退出编辑器(如 :q:wqkubectl 的主进程就还在等待你完成编辑操作,不会向 API Server 提交更新。

使用 Patch

bash
kubectl patch deployment myapp \
  --type=merge \
  -p '{"spec": {"replicas": 3}}'