
我想分享一下有关将应用程序迁移到Openshift的故事。 此外,因此,我将比较一些最流行的解决方案和工具,以在Openshift中管理您的应用程序。 这是我在kubernetes SPB聚会#3上的演讲的抄录 。
让我们部署到Openshift
我们该怎么办?
首先,让我们谈谈我们的应用程序。 它是一种现成的企业解决方案,它支持不同的数据库,应用程序服务器以及与第三方系统的集成接口。 通常,我们的客户是在专用服务器上安装的,但是,我们遇到了这个问题。 我们必须在Openshift中调整应用程序。
先决条件

该应用程序是具有悠久历史的产品,应该在完全不同的环境中开箱即用。 因此,我们的安装指南中有很多页面。 但是,顶层架构很容易实现,您应该:
- 应用数据库架构。
- 准备应用程序服务器配置。
- 安装您的许可证。
- 初始化应用程序。

不幸的是,世界是残酷的,有一些重要的先决条件。
- 由于安全性限制,我们只能在特殊的Jenkins从站上构建应用程序
- 客户端的Openshift安装无法访问私有开发人员的docker注册表。
- 我们无法重复使用现有的Docker映像,因为它们仅是为开发和测试需求而创建的。
- 有用于在VM上部署应用程序的实用手册。
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容器构建的。 对于演示来说已经足够好了,但是,我们决定不使用它。 我们将整体容器分成不同的容器:
- 我们使用原始的Openshift PostgreSQL容器,未做任何修改。
- 我们构建了应用程序无状态容器。

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

如前所述,应用程序应该在完全不同的环境中开箱即用,支持不同的应用程序服务器/数据库以及与第三方系统的集成接口。
有很多方法可以初始化应用程序:
- 通过环境变量传递配置。 这意味着将所有有关如何为每个用例初始化应用程序的文档/知识添加到每个容器中。 听起来不好。
- 使用启动钩,这与第一个钩子大致相同。
- 在提供给Openshift期间初始化。
- 对于每个用例,请使用具有单独配置的外部容器。
我们选择了最后一个,我们创建了额外的复制控制器来初始化应用程序? 真的吗

我们再次阅读了文档。
吊舱(例如在鲸鱼或豌豆吊舱中)是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范。
POD是一组容器。 结果,我们决定在一个应用程序POD中运行3个容器
- PostgreSQL初始化的初始化容器。
- 应用程序容器。
- 应用程序初始化容器。
这种方法允许将我们的配置存储为代码,有两个有趣的结果:应用程序配置是可测试的和可重复的。
已经有很多管理openshift的方法。
在迁移期间,我已经测试了其中一些。 我想分享我的结果。
Openshift模板

Openshift模板
优点:
缺点:
- 另一个YAML模板。
- 记录可怕的YAML文件。
- 您关心服务依赖项。
脚本和模板

优点:
缺点:

Terraform K8s提供程序
优点:
- 不在乎创建订单。
- 将代码重新用作模块。
- 您可以添加初始化逻辑。
缺点:
- 不支持Openshift,仅支持k8s。
- 有时过时了。
- 另一个工具。
Ansible容器

Ansible容器
优点:
缺点:
Ansible容器被Ansible弯管机取代。
Ansible K8S模块

Ansible + K8S模块
优点:
- 单一的剧本。
- 重用代码作为角色。
- 您可以添加初始化逻辑。
缺点:
- 没有代理支持。
- 您关心删除。 如果要删除某些内容,则必须声明它。
- 您关心创建订单。 您应该在初始化之前部署应用程序。
Ansible剧本包

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

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

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