Kubernetes如何检查YAML文件中定义的资源是否存在于集群中
方案1:无需前置校验,直接规避删除报错
如果你的核心需求只是避免删除不存在资源时抛出NotFound错误、影响脚本执行,直接给kubectl delete加参数即可,无需额外加前置校验步骤:
kubectl delete -f example.yaml --ignore-not-found=true
这个参数会让命令自动跳过不存在的资源,执行后返回码为0,不会抛出错误中断脚本。
方案2:前置校验所有资源是否存在
如果你的场景确实需要先做校验、根据校验结果走不同的脚本逻辑,直接用kubectl get命令即可,这是最适配你需求的替代方案:
# 校验yaml中所有资源是否存在,存在返回0,任意资源不存在返回非0 kubectl get -f example.yaml > /dev/null 2>&1
在bash脚本中可以直接通过返回码判断校验结果,示例用法:
if kubectl get -f example.yaml > /dev/null 2>&1; then echo "yaml定义的所有资源均存在,执行删除操作" kubectl delete -f example.yaml else echo "yaml中存在集群内不存在的资源,终止删除流程" # 这里可以加你需要的自定义处理逻辑 exit 1 fi
如果需要精准定位哪些资源不存在,可以用以下命令输出所有存在的资源,再和yaml解析出的资源列表做对比即可:
kubectl get -f example.yaml -o name --ignore-not-found=true
为什么不推荐用kubectl diff
kubectl diff的核心能力是对比配置差异,除了资源不存在的情况,配置字段不一致也会输出差异,你需要额外做日志解析才能区分出"资源不存在"的场景,复杂度远高于直接用kubectl get做校验。
内容的提问来源于stack exchange,提问作者sqlquestionasker
相关产品推荐
相关产品推荐

