让我们部署到Openshift

这样很好


我想分享一下有关将应用程序迁移到Openshift的故事。 此外,因此,我将比较一些最流行的解决方案和工具,以在Openshift中管理您的应用程序。 这是我在kubernetes SPB聚会#3上的演讲的抄录


让我们部署到Openshift


我们该怎么办?


首先,让我们谈谈我们的应用程序。 它是一种现成的企业解决方案,它支持不同的数据库,应用程序服务器以及与第三方系统的集成接口。 通常,我们的客户是在专用服务器上安装的,但是,我们遇到了这个问题。 我们必须在Openshift中调整应用程序。


先决条件


部署


该应用程序是具有悠久历史的产品,应该在完全不同的环境中开箱即用。 因此,我们的安装指南中有很多页面。 但是,顶层架构很容易实现,您应该:


  • 应用数据库架构。
  • 准备应用程序服务器配置。
  • 安装您的许可证。
  • 初始化应用程序。

部署


不幸的是,世界是残酷的,有一些重要的先决条件。


  • 由于安全性限制,我们只能在特殊的Jenkins从站上构建应用程序
  • 客户端的Openshift安装无法访问私有开发人员的docker注册表。
  • 我们无法重复使用现有的Docker映像,因为它们仅是为开发和测试需求而创建的。
  • 有用于在VM上部署应用程序的实用手册。

Ansible容器演示


Ansible容器


Ansible Container是一个开源项目,旨在实现整个容器构建,部署和管理过程的自动化。 最重要的是,它使用了与您已经在使用的简单,强大且无代理的Ansible自动化语言相同的语言,从而确保您可以自动化整个应用程序生命周期。

我们已经写了一些Ansible角色,用于在VM上安装应用程序,因此我们将它们与ansible-container一起重用。 Ansible容器是用于构建容器的工具集。 我不确定这是否真的是很好的工具集,但是它允许:


  • 以与部署服务器相同的方式创建容器。
  • 停止将Dockerfile中的Shell命令链接在一起。

ansible容器没有重大问题,因为Openshift创建图像指导非常棒。 但是,我要注意:


  • 我们修改了ansible角色,因为Docker + systemd = pain
  • 由于安全原因,默认情况下无法在Openshift中使用chroot,sudo。 只需阅读CVE-2019-5736
  • 出于安全原因,默认情况下,Openshift还会为每个容器生成随机UID,换句话说,openshift会忽略Dockerfile中的USER选项。

重点是,由于重复使用,ansible容器帮助我们非常快速地创建了一个演示。


多个容器演示


多个容器


第一个演示容器是通过ansible容器构建的。 对于演示来说已经足够好了,但是,我们决定不使用它。 我们将整体容器分成不同的容器:


  1. 我们使用原始的Openshift PostgreSQL容器,未做任何修改。
  2. 我们构建了应用程序无状态容器。

多个容器


但是,不清楚初始化数据库吗? 我们找到了一篇有关kubernetes中POD生活的精彩文章。 因此,我们决定使用init容器进行数据库初始化。


初始化应用程序


多个容器


如前所述,应用程序应该在完全不同的环境中开箱即用,支持不同的应用程序服务器/数据库以及与第三方系统的集成接口。


有很多方法可以初始化应用程序:


  1. 通过环境变量传递配置。 这意味着将所有有关如何为每个用例初始化应用程序的文档/知识添加到每个容器中。 听起来不好。
  2. 使用启动钩,这与第一个钩子大致相同。
  3. 在提供给Openshift期间初始化。
  4. 对于每个用例,请使用具有单独配置的外部容器。

我们选择了最后一个,我们创建了额外的复制控制器来初始化应用程序? 真的吗


多个容器


我们再次阅读了文档。


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

POD是一容器。 结果,我们决定在一个应用程序POD中运行3个容器


  1. PostgreSQL初始化的初始化容器。
  2. 应用程序容器。
  3. 应用程序初始化容器。

这种方法允许将我们的配置存储为代码,有两个有趣的结果:应用程序配置是可测试的和可重复的。


工具类


已经有很多管理openshift的方法。



在迁移期间,我已经测试了其中一些。 我想分享我的结果。


Openshift模板


Openshift模板


Openshift模板


优点:


  • 本机 它有很棒的文档。

缺点:


  • 另一个YAML模板。
  • 记录可怕的YAML文件。
  • 您关心服务依赖项。

脚本和模板


自定义脚本


优点:


  • 脚本编写。

缺点:


  • 忽悠。

Terraform K8s提供程序


Terraform K8s提供程序


Terraform K8s提供程序


优点:


  • 不在乎创建订单。
  • 将代码重新用作模块。
  • 您可以添加初始化逻辑。

缺点:


  • 不支持Openshift,仅支持k8s。
  • 有时过时了。
  • 另一个工具。

Ansible容器


Ansible容器


Ansible容器


优点:


  • 做CM,没有bash
  • 重用现有角色。 角色=图片。
  • 一款适用于一切的工具集。

缺点:


  • 巨大的图像,因为只有一层。
  • 看起来被遗弃和过时了。

Ansible容器被Ansible弯管机取代。


Ansible K8S模块


Ansible K8S模块


Ansible + K8S模块


优点:


  • 单一的剧本。
  • 重用代码作为角色。
  • 您可以添加初始化逻辑。

缺点:


  • 没有代理支持。
  • 您关心删除。 如果要删除某些内容,则必须声明它。
  • 您关心创建订单。 您应该在初始化之前部署应用程序。

Ansible剧本包


Ansible剧本包


Ansible Playbook Bundle(APB)是一个轻量级的应用程序定义(元容器)。 它们用于定义复杂的应用程序,部署配置,部署和服务组,并将其部署到运行Ansible Service Broker的OpenShift Origin集群。 通过利用Ansible的功能,APB提供更多的功能和简单的配置。 APB具有以下功能:

Ansible剧本包


主要思想是将所有需要的东西打包到一个容器中,然后在Openshift中运行该容器。 Ansible剧本包


优点:


  • 捆绑一切。
  • 可测试且可重现。
  • 服务目录集成。

缺点:


  • 您需要管理员权限。
  • 文档有时已过时。

结果


结果


一方面,我不想成为最终的权威,但另一方面,我想分享我的观点。 没有银弹存在。



聚苯乙烯


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


All Articles