如何解决执行kubectl edit deployment时出现‘Edit cancelled, no changes made’的问题?
我之前也碰到过一模一样的情况,折腾了好一会儿才找到根源——大概率是编辑器的配置出了问题,或者kubectl没法正确识别你使用的编辑器,导致它误判你已经取消了编辑。下面是几个实用的排查修复步骤:
检查kubectl的编辑器环境变量
kubectl默认会优先使用KUBE_EDITOR环境变量指定的编辑器,其次是系统的EDITOR变量。先在bash里执行这两个命令确认配置:echo $KUBE_EDITOR echo $EDITOR如果输出为空,或者显示的编辑器路径不对/编辑器不存在,就会触发这个问题。比如你常用vim的话,可以临时设置变量试试:
export KUBE_EDITOR=vim再执行
kubectl edit deployment <你的部署名>测试,如果问题解决了,把这个配置永久加到bash配置文件里:echo 'export KUBE_EDITOR=vim' >> ~/.bashrc source ~/.bashrc验证编辑器本身能否正常工作
有时候编辑器的二进制文件可能损坏,或者启动参数出了问题。直接在bash里输入你常用的编辑器命令(比如vim、nano),尝试打开、编辑一个测试文件,保存退出。如果编辑器本身启动失败或者保存异常,kubectl自然会认为编辑被取消了。检查临时文件的权限与存在性
kubectl编辑时会在/tmp目录生成临时文件,如果你的用户对/tmp目录没有读写权限,或者临时文件被系统自动清理工具提前删除,就会触发错误。可以手动测试/tmp的权限:touch /tmp/test-kubectl-temp && echo "test content" >> /tmp/test-kubectl-temp && cat /tmp/test-kubectl-temp如果能正常执行并输出内容,说明权限没问题;如果报错,需要修复/tmp的权限(比如执行
sudo chmod 1777 /tmp)。排查是否有进程干扰
有些系统工具(比如自动清理临时文件的脚本、安全监控进程)可能会在编辑器打开期间删除kubectl的临时文件。可以暂时关闭这类工具,或者查看系统日志(比如/var/log/syslog)有没有相关的删除记录。重置kubectl配置(极端情况)
如果上面的方法都没用,可能是kubectl的配置文件出现了异常。先备份当前配置:cp ~/.kube/config ~/.kube/config.bak然后删除原配置,重新生成(比如通过集群凭证重新获取),再测试编辑功能是否恢复正常。
内容的提问来源于stack exchange,提问作者A. Karnaval

