Openshift CLI - 使用模板和 oc new-app 更新应用程序

Posted

技术标签:

【中文标题】Openshift CLI - 使用模板和 oc new-app 更新应用程序【英文标题】:Openshift CLI - update Application with template and oc new-app 【发布时间】:2019-06-12 11:28:33 【问题描述】:

我目前正在使用模板构建和部署应用程序

oc new-app -f ./openshift/template.yaml

我使用的是模板,而不是单独的部署、构建等配置,因为我还希望能够传递类似的参数

oc new-app -f ./openshift/template.yaml --p DATABASE_PW=PW

据我所知,这是不可能的

oc create -f ./openshift/deploymentconfig.yaml --p SOME_PARAM=TEST

现在我也将其与 Jenkins 集成在构建管道中。我现在的问题是这个。这一切都适用于第一次部署,但它不适用于重新部署。我可以像 Jenkins 一样重建应用程序

oc start-build my-app

但这会导致更改是我的模板将不会被考虑。我也不能使用 new-app,因为它不会替换现有配置,从而产生类似于此的错误

--> Creating resources ...
    error: services "my-app" already exists
    ....
--> Failed

有没有办法解决这个问题?可能类似于new-app replace 命令,其中所有配置都被替换?我目前正在通过使用 shell 文件完全杀死应用程序然后再次启动它来解决这个问题;但这总是会导致几分钟的停机时间,这真的让我很困扰。

【问题讨论】:

试试oc process -f openshift/template.yaml --param DATABASE_PW=PW | oc apply -f - 太棒了。这正是我所需要的。如果你知道怎么做就可以这么简单。我看到它也适用于创作,所以我什至不再需要 oc new-app 了。你想把它写下来作为答案还是我应该写下来? 你也可以把你的参数存到一个文件里,然后用--param-file=传递这个文件,当你开始积累越来越多的参数时,这很好。 【参考方案1】:

正如Graham 指出的最好的解决方法是使用

oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2

首先用您的参数填充您的模板。然后将命令通过管道传递给 oc apply 以将其应用于应用程序,这将为您提供以下命令

oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2 | oc apply -f -

这将创建或更新您的所有配置。它还会检查哪些配置已更改。

如果您想在之后直接开始构建,请使用

oc start-build my-app

【讨论】:

有没有办法跳过oc new-app直接用oc process | oc apply实例化一个应用程序? 对通过带有模板的 new-app 创建的资源使用 oc apply 会给出警告消息:“oc apply 应该用于由 oc create --save-config 或 oc apply 创建的资源” .这让我认为,对于从模板创建的资源来说,一定有一些不同的想法——或者 oc create/oc apply 可能比使用 oc new-app 更受欢迎。【参考方案2】:

要更新从模板 YAML 文件启动的正在运行的 pod 中的模板参数(即使用 oc create -f ./$tmpl_name.yaml):

# delete existing dc (leaving svc & route)
# (here dc and template are named the same: $tmpl_name)
oc delete dc $tmpl_name
    
# update template parameter (notice template was not deleted)
oc process $tmpl_name -p $PARAM_NAME=$PARAM_VALUE | oc create -f -

【讨论】:

以上是关于Openshift CLI - 使用模板和 oc new-app 更新应用程序的主要内容,如果未能解决你的问题,请参考以下文章

004.OpenShift命令及故障排查

sh 使用OpenShift集群构建oc客户端

带有 Cygwin 的 OpenShift oc 命令行

sh Openshift部署com oc

openshift上传java web项目

sh Openshift CLI提示