
我想讲一个有关该应用程序如何在Openshift中启动的故事。 同样在游戏过程中,我们考虑在Openshift中管理应用程序的实用程序。 这是kubernetes SPB聚会#3上的表现的副本 。
目的
通常,客户端部署在单独的服务器上,但是任务来了,以测试在openshift中运行并收集佣金的机会。
首先,您需要谈论我们的应用程序。 历史悠久的项目。 用在大型组织中,可能每个人都间接相交。 该应用程序支持许多数据库,集成等,等等。
先决条件

该应用程序应在完全不同的环境中工作。 因此,我们的安装文档非常广泛。 但是,如果您看不起自己,那就没有什么复杂的了:
- 应用数据库架构。
- 配置应用程序服务器。
- 安装许可证。
- 定制应用程序并与外部系统集成。

但是世界是残酷的,我们有很多限制:
- 该应用程序只能专门在进行签名的Jenkins上构建。 而且只有那里。
- Openshift客户端无法访问开发环境。
- 由于种种意识形态上的原因,不可能将现有的Docker映像重复用于开发。
- 我们有丰富的手册,可以在服务器上安装和配置应用程序。
Ansible容器演示

Ansible容器是开源软件,旨在自动化容器的组装,部署和过程控制。 您可能会从名称中猜到。 Ansible用于构建容器。 我们已经编写了Ansible角色,用于在服务器顶部安装和部署应用程序,因此我们决定不重新发明轮子并重新使用它们。 它不仅是完美的工具,而且快速重用现有角色也是该演示的决定性因素。
总的来说,为了进行演示,我们承担了配置所有内容的现有角色,并制作了“整体容器”。 收集容器没有特别的问题,因为 Openshift有一些不错的建议 ,但我将分别提及:
- 角色需要最终确定。 我们使用systemd。
- 默认情况下,出于安全原因,禁止在openshift中使用某些syscall。 结果,将与chroot,sudo产生细微差别。 嗨CVE-2019-5736
- 同样,出于安全原因,容器是从具有随机ID的用户下方启动的,这也是一种自定义行为。
这时的主要思想是,我们很快进行了演示。
多个容器演示

演示容器发挥了作用,我们将其视为独立的组件:
- 我们的应用程序。
- 数据库。
- 外部服务等...

您遇到的第一件事,如何初始化数据库? 很明显,我们使用迁移,但是何时以及如何应用它们? 在这里值得给出一个描述设备POD的精彩文章的链接: PODs life 。 总的来说,有几种方法:
- 使用init容器
- 使用编排系统,该系统将确定服务的部署顺序并在必要时滚动迁移。
我们决定遵循Init-container的道路。 即 在我们的应用程序的POD中,在我们的应用程序启动之前,一个容器开始滚动迁移。 但是如何配置应用程序本身和外部集成呢?
初始化应用程序

正如我已经提到的,我们的应用程序可以并且应该在完全不同的环境中工作,并具有不同的数据库和集成。 再次,问题是如何全部设置?
- 使用编排系统来确定服务的部署顺序,并在应用程序启动后应用配置。
- 通过环境变量到容器如何配置。
- 使用启动钩。
- 制作一个包含配置的单独容器,并将其应用于应用程序。 数据库的大致模拟迁移。
我们选择了最后一种方法,因为 它使您可以使配置可重复且自给自足。 但是由于某种原因,我们最初将这个容器放在一个单独的复制控制器中,系数为1。

好的,再次阅读文档。
吊舱(例如在鲸鱼或豌豆吊舱中)是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范。
POD是一组容器。 结果,我们的小组由3个容器组成
- 初始化容器以初始化PostgreSQL。
- 带有应用程序的容器。
- 具有应用程序配置的容器。
工具包
我们得到了已部署应用程序外观的图表。 现在是时候讨论自然界中的工具,已经准备好了很多东西,我将考虑下面的一些列表并得出主观结论。
Openshift模板

Openshift模板
优点:
缺点:
- 另一个模板引擎。
- 冗长而糟糕的YAML文件。
- 如果您在服务及其启动顺序之间存在依赖关系,则将很困难。
脚本和模板

优点:
缺点:

Terraform K8s提供程序
优点:
- 您不必担心创建基础架构元素的优先级。
- 您可以将基础结构代码作为模块重用。
- 您可以添加应用程序初始化逻辑。
缺点:
- 不支持Openshift,仅支持k8s。
- 有时过时的基座和模块。
- 团队中的另一个图拉。
Ansible容器

Ansible容器
优点:
缺点:
Ansible K8S模块

Ansible + K8S模块
优点:
- 一本用来描述Openshift内部所有项目基础结构的手册。
- 以角色形式重用代码。
- 您可以添加应用程序初始化逻辑。
缺点:
- 没有代理支持。
- 您要小心拆除。 如果不再需要该对象,请描述其移除。
- 您自己描述了创建基础结构元素的顺序。
Ansible剧本包

Ansible Playbook Bundle (APB)实用程序提供了一种方法:让ansible角色打包以将k8s / openshift内的应用程序部署到容器中并在k8s / openshift内运行。
优点:
- 我随身携带一切。
- 可测试且可重现。
- 与服务目录集成(用于启动应用程序的用户友好型Web界面)。
缺点:
结果

我不想成为万不得已的方法,但我会分享我的结论:
聚苯乙烯