
4.3 OpenShift上应用部署实践
4.3.1 OpenShift上多种应用部署方式对比
在OpenShift中,主要有以下几种部署应用的方法:
·基于Dockerfile方式
·基于容器镜像方式
·基于S2I构建部署
·基于模板部署
·基于Operator部署
我们在前文已介绍过通过Dockerfile部署应用的方式。对Dockerfile执行podman build,生成容器镜像,然后在OpenShift集群中部署容器镜像,此处不再赘述。
基于容器镜像部署应用的方式可以直接在OpenShift中部署,部署的时候可以选择自动生成Deployment、Deployment Config或Knative Service,如图4-20、图4-21所示。

图4-20 选择容器镜像方式部署应用

图4-21 选择应用部署方式
前文已经介绍OpenShift S2I的原理和使用方式。我们可以通过命令行进行,也可以通过OpenShift WebConsole触发,如图4-22所示。

图4-22 选择从Git部署应用
然后填写源码的地址和选择Builder镜像的类型和版本,如图4-23所示。
基于模板是OpenShft最主要的应用部署方式,在OpenShift界面可以方便地选择和部署,如图4-24所示。
我们可以看到红帽提供的模板数量有197个,如图4-25所示。

图4-23 填写源码地址并选择Builder镜像的类型和版本

图4-24 选择从Catalog部署应用

图4-25 OpenShift中的模板
Operator部署主要通过OpenShift Operator Hub。目前Operator社区发展迅速,OpenShift Operator Hub已经可以提供数百个Operator,如图4-26所示。

图4-26 OpenShift中的Operator Hub
以上简单介绍了在OpenShift上5种应用部署方法,我们根据实践经验整理了这几种部署方法的优缺点和适用场景,如表4-2所示。
表4-2 不同部署方式对比

