OpenShift oc创建失败,“已存在”

时间:2017-10-16 15:23:23

标签: kubernetes openshift

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

根据docs here 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项目的状态。

2 个答案:

答案 0 :(得分:10)

文档的措辞可能有点严厉。它的含义是,如果您尝试创建一个特定类型的对象,其中具有该名称的该类型的对象已经存在,那么您将尝试创建新对象。

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

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

此外,当您创建一组资源时,通常最好在所有资源类型中使用一个名称,而不是为每个资源类型使用不同的名称,例如,仅使用' my-app-命名'对于所有这些,而不是单独的,' my-buildconfig',' my-imagestream'。

更重要的是,您需要确保在其上添加具有相同键/值的标签,以便随时将它们一起使用,包括一次性删除它们。

您尝试部署的应用程序类型是什么?我可以指出您可以用作指南的示例模板。

更新1

如果您希望能够运行oc create -f并且如果资源已经存在则不会抱怨,但如果他们不存在则创建它们,请改为使用oc apply -f

答案 1 :(得分:0)

如何使用oc replace

oc replace --filename file.yml --force
相关问题