Kubernetes - 检查 YAML 文件中定义的资源是否存在

sql*_*ker 6 bash kubernetes kubectl

我正在创建一个 bash 脚本来自动执行集群中的某些操作。命令之一是:kubectl delete -f example.yaml

问题是,当YAML中定义的资源不存在时,会打印以下错误:

Error from server (NotFound): error when deleting "example.yaml": deployments.apps "my_app" not found
Run Code Online (Sandbox Code Playgroud)

我希望添加一个额外的步骤,首先检查集群中是否存在 YAML 文件中定义的一组资源。有没有命令可以让我这样做?

文档中,我发现:

将集群的当前状态与应用清单后集群所处的状态进行比较。

kubectl diff -f ./my-manifest.yaml

但我发现很难解析它返回的输出。有更好的选择吗?

P..*_*... 6

查明集群中是否已存在同一个对象,如清单文件中所述。您可以使用命令的返回码kubectl diff

Exit status:
 0 No differences were found.
 1 Differences were found. 
 >1 Kubectl or diff failed with an error.
Run Code Online (Sandbox Code Playgroud)

例子:

kubectl diff -f crazy.yml &>/dev/null
rc=$?
if [ $rc -eq 0 ];then
  echo "Exact Object is already installed on the cluster"
elif [ $rc -eq 1 ];then
  echo "Exact object is not installed, either its not installed or different from the manifest file"
else
  echo "Unable to determine the difference"
fi
Run Code Online (Sandbox Code Playgroud)

或者,如果您想真正解析输出,您可以使用以下环境变量以所需的格式打印 diff 输出:

KUBECTL_EXTERNAL_DIFF 环境变量可用于选择您自己的 diff 命令。用户也可以使用带有参数的外部命令,