kubernetes - OpenShift oc 创建失败,错误为 "already exists"

标签 kubernetes openshift

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

根据docs here oc create应该:

Parse a configuration file and create one or more OpenShift Enterprise objects ... Any existing resources are ignored.



(强调我的)。

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

我运行的命令是 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-app-name” ,而不是单独的,'my-buildconfig','my-imagestream'。

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

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

更新 1

如果你想能够运行 oc create -f如果资源已经存在,它不会提示,但如果资源不存在则创建它们,使用 oc apply -f反而。

关于kubernetes - OpenShift oc 创建失败,错误为 "already exists",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46773727/

相关文章:

go - 如何使用 ServiceAccount Token 连接到 Kubernetes 集群?

Kubernetes HPA(带有自定义指标)扩展策略

email - 如何从openshift服务器内部通过gmail-account使用javamail发送电子邮件?

带有微服务的 Kubernetes 网络策略

kubernetes - kubernetes在queue_size与运行的Pod数量上自动缩放

java - WildFly 无法 fork 新的连接进程

java - 为什么 Internet Explorer 不在请求 header 上发送 jsessionid cookie?

openshift - 如何在 openshift 中降级我的齿轮类型?

Openshift:将 https 更改为 http

kubernetes - 使用 Terraform 创建多个命名空间