OpenShift oc创建失败,"已存在"

Tom*_*eld 7 openshift kubernetes

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
Run Code Online (Sandbox Code Playgroud)

它也以非零退出代码退出,因此它不仅仅是一个警告.我错过了一些明显的东西或误解了文档的内容吗?

我只是希望能够应用此文件并确保之后的OpenShift项目的状态.

Gra*_*ton 13

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

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

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

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

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

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


更新1

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

  • 尝试使用“ oc apply”而不是“ oc create”。如果不存在,它将被创建。如果存在,它将更新为您要设置的名称。如果不希望当前版本与尝试设置的版本匹配,请查看oc apply的--overwrite = false选项是否达到您想要的。 (2认同)