1.应用定义与开发
此层为容器平台上应用开发相关的部分,主要分为数据库服务、消息队列服务、应用的定义与镜像构建服务、持续集成和部署能力等四个方面进行展开。这一层主要是聚集了与应用相关的通用的架构、工具以提供相关能力。结合 CNCF 孵化项目,可以考虑使用 TiKV 或者 Vitess 做相关的数据库服务、NATS 提供消息队列能力,使用 HELM 进行应用编排。
而在实际的项目,考虑到工具或者框架的通用性以及功能性等诸多因素,在数据库方面,显然 MySQL/MariaDB/mongoDB/Cassadra/redis/PostgreSQL 等更能得到项目开发者和使用者在容器化的路上选型的青睐。
而关于流或者消息机制方面,实际上 kafka 和 RabbitMQ 在实际的项目中被使用的也往往更多一些。
而在应用编排方面,HELM 和 Operator 确实是很多项目现在是实践选型中较多的类型。
而关于持续集成和持续部署的能力,虽然没有孵化项目,根据业界的使用情况,Jenkins 作为最为主流的相关工具,甚至没有之一,围绕 Jenkins 已然产生了大量的生态环境,Jenkins 已经有超过1300+的插件支持,几乎大部分主流的项目都提供了 Jenkins 插件的支持,另外 Gitlab 出现在这里也是因为 Gitlab 的功能中基本上可以完成软件生命周期的很多部分,远远不只是进行代码仓库的管理。
4.应用程序定义和开发层
现在,我们已到顶层。顾名思义,应用程序定义和开发层侧重于使工程师能够构建应用程序并使其运行的工具。上面讨论的所有内容都与构建可靠,安全的环境以及提供所有必需的应用程序依赖关系有关。
在此类别下,您会看到:
(1)使应用程序能够以有组织的方式收集数据的数据库。
(2)流和消息传递使应用程序能够发送和接收消息(事件和流)。它不是网络层,而是用于对消息进行排队和处理的工具。
(3)应用程序定义和映像构建是帮助配置,维护和运行容器映像(应用程序的可执行文件)的服务。
(4)持续集成和交付(CI/CD)使开发人员能够自动测试其代码是否与代码库(应用程序的其余部分)兼容,如果他们的团队足够成熟,甚至可以自动部署到生产中。