OpenShift oc create 因"already exists"而失败



如果资源已经存在,尝试通过oc create基于文件创建一组资源将失败。

根据此处的文档,oc create应:

解析配置文件并创建一个或多个OpenShift Enterprise对象忽略任何现有资源

(强调矿)。

我看不到这个命令或全局的任何配置选项会改变这种行为,在我看来这与文档背道而驰。

我运行的命令是oc create -f some.file

输出为:

Error from server: services 'my-app' already exists
Error from server: buildconfigs 'my-app' already exists
Error from server: imagestreams 'my-app' already exists
Error from server: deploymentconfigs 'my-app' already exists
Error from server: routes 'my-app' already exists
Error from server: secrets 'my-app' already exists

它还使用非零退出代码退出,所以它不仅仅是一个警告。我是不是遗漏了一些明显的东西,或者误解了文档中的内容?

我只想能够应用这个文件,并在之后确保OpenShift项目的状态。

文档的措辞可能有点糟糕。它所说的是,如果你试图创建一个特定类型的对象,而具有该名称的该类型的对象已经存在,那么你创建新对象的尝试将被忽略。

如果您试图从相同的原始资源定义创建应用程序的多个实例,就会出现这种情况。使用一组原始资源定义中的oc create -f无法覆盖命令行中的名称,因此第二次部署是不同的。

如果要从同一资源定义创建多个实例,则需要将定义转换为模板并对名称进行参数化,以便为不同的实例传递不同的名称。那样就不会发生冲突。

此外,当您创建一组资源时,通常最好在所有资源类型中使用同一个名称,而不是对每种类型使用不同的名称,例如,对所有资源只使用"我的应用程序名称",而不是单独使用"my buildconfig"one_answers"my imagestream"。

更重要的是,您需要确保在所有标签上添加具有相同键/值的标签,这样就可以很容易地将它们一起使用,包括一次性删除所有标签。

您尝试部署的应用程序类型是什么?我可以向您介绍一些可以作为指南的示例模板。


更新1

如果您希望能够运行oc create -f,并且在资源已经存在的情况下不抱怨,但在资源不存在的时候创建它们,请改用oc apply -f

如何使用oc replace:

oc replace --filename file.yml --force

运行oc delete <resource> <name>。示例:oc delete configmap my-configs然后运行您的命令-f和";oc替换";对我不起作用。

相关内容

最新更新