在Openshift中启动应用程序并比较现有工具

这样很好


我想讲一个有关该应用程序如何在Openshift中启动的故事。 同样在游戏过程中,我们考虑在Openshift中管理应用程序的实用程序。 这是kubernetes SPB聚会#3上的表现的副本


目的


通常,客户端部署在单独的服务器上,但是任务来了,以测试在openshift中运行并收集佣金的机会。


首先,您需要谈论我们的应用程序。 历史悠久的项目。 用在大型组织中,可能每个人都间接相交。 该应用程序支持许多数据库,集成等,等等。


先决条件


部署


该应用程序应在完全不同的环境中工作。 因此,我们的安装文档非常广泛。 但是,如果您看不起自己,那就没有什么复杂的了:


  • 应用数据库架构。
  • 配置应用程序服务器。
  • 安装许可证。
  • 定制应用程序并与外部系统集成。

部署


但是世界是残酷的,我们有很多限制:


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

Ansible容器演示


Ansible容器


Ansible容器是开源软件,旨在自动化容器的组装,部署和过程控制。 您可能会从名称中猜到。 Ansible用于构建容器。 我们已经编写了Ansible角色,用于在服务器顶部安装和部署应用程序,因此我们决定不重新发明轮子并重新使用它们。 它不仅是完美的工具,而且快速重用现有角色也是该演示的决定性因素。


总的来说,为了进行演示,我们承担了配置所有内容的现有角色,并制作了“整体容器”。 收集容器没有特别的问题,因为 Openshift有一些不错的建议 ,但我将分别提及:


  • 角色需要最终确定。 我们使用systemd。
  • 默认情况下,出于安全原因,禁止在openshift中使用某些syscall。 结果,将与chroot,sudo产生细微差别。 嗨CVE-2019-5736
  • 同样,出于安全原因,容器是从具有随机ID的用户下方启动的,这也是一种自定义行为。

这时的主要思想是,我们很快进行了演示。


多个容器演示


多个容器


演示容器发挥了作用,我们将其视为独立的组件:


  1. 我们的应用程序。
  2. 数据库。
  3. 外部服务等...

多个容器


您遇到的第一件事,如何初始化数据库? 很明显,我们使用迁移,但是何时以及如何应用它们? 在这里值得给出一个描述设备POD的精彩文章的链接: PODs life 。 总的来说,有几种方法:


  • 使用init容器
  • 使用编排系统,该系统将确定服务的部署顺序并在必要时滚动迁移。

我们决定遵循Init-container的道路。 即 在我们的应用程序的POD中,在我们的应用程序启动之前,一个容器开始滚动迁移。 但是如何配置应用程序本身和外部集成呢?


初始化应用程序


多个容器


正如我已经提到的,我们的应用程序可以并且应该在完全不同的环境中工作,并具有不同的数据库和集成。 再次,问题是如何全部设置?


  • 使用编排系统来确定服务的部署顺序,并在应用程序启动后应用配置。
  • 通过环境变量到容器如何配置。
  • 使用启动钩。
  • 制作一个包含配置的单独容器,并将其应用于应用程序。 数据库的大致模拟迁移。

我们选择了最后一种方法,因为 它使您可以使配置可重复且自给自足。 但是由于某种原因,我们最初将这个容器放在一个单独的复制控制器中,系数为1。


多个容器


好的,再次阅读文档。


吊舱(例如在鲸鱼或豌豆吊舱中)是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范。

POD是一容器。 结果,我们的小组由3个容器组成


  1. 初始化容器以初始化PostgreSQL。
  2. 带有应用程序的容器。
  3. 具有应用程序配置的容器。

工具包


我们得到了已部署应用程序外观的图表。 现在是时候讨论自然界中的工具,已经准备好了很多东西,我将考虑下面的一些列表并得出主观结论。



Openshift模板


Openshift模板


Openshift模板


优点:


  • 本机,他们有出色的文档。

缺点:


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

脚本和模板


自定义脚本


优点:


  • 您可以使用出色的工具和OOP的所有功能。

缺点:


  • 拐杖支持。 不仅限于您。

Terraform K8s提供程序


Terraform K8s提供程序


Terraform K8s提供程序


优点:


  • 您不必担心创建基础架构元素的优先级。
  • 您可以将基础结构代码作为模块重用。
  • 您可以添加应用程序初始化逻辑。

缺点:


  • 不支持Openshift,仅支持k8s。
  • 有时过时的基座和模块。
  • 团队中的另一个图拉。

Ansible容器


Ansible容器


Ansible容器


优点:


  • 做CM,没有bash
  • 您可以将代码重复用作角色。
  • 在我们的案例中,一种工具可以满足所有需求。

缺点:


  • 巨大的图像,因为 进入一层。
  • 看起来已被废弃,不受支持。 已由Ansible弯管机取代。

Ansible K8S模块


Ansible K8S模块


Ansible + K8S模块


优点:


  • 一本用来描述Openshift内部所有项目基础结构的手册。
  • 以角色形式重用代码。
  • 您可以添加应用程序初始化逻辑。

缺点:


  • 没有代理支持。
  • 您要小心拆除。 如果不再需要该对象,请描述其移除。
  • 您自己描述了创建基础结构元素的顺序。

Ansible剧本包


Ansible剧本包


Ansible Playbook Bundle (APB)实用程序提供了一种方法:让ansible角色打包以将k8s / openshift内的应用程序部署到容器中并在k8s / openshift内运行。


优点:


  • 我随身携带一切。
  • 可测试且可重现。
  • 与服务目录集成(用于启动应用程序的用户友好型Web界面)。

缺点:


  • 您需要管理员级别的权限。
  • 有时文档尚需时日。

结果


结果


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



聚苯乙烯


Source: https://habr.com/ru/post/zh-CN441928/


All Articles