“基础设施自动化。 我们为什么要这样做?” (丹尼斯·雅科夫列夫)

我建议熟悉Denis Yakovlev的报告“基础设施自动化。我们为什么要这样做?”


2016年报告本身。 该报告专门为那些用手创建虚拟机的人解密。


报告我们2GIS如何自动使用基础架构。


“为了保持原状,您需要以最快的速度运行,但是要到达某个地方,您必须以至少两倍的速度运行”(爱丽丝梦游仙境)。


这句话对我们意味着什么? 在竞争激烈的环境中,公司应努力将其产品尽快交付给用户。 缩短上市时间参数是一个多层次的任务。 要解决此问题,您需要更改开发流程和工具。 整个开发过程的重要基础是基础架构。 基础设施越大,基础设施,用例等问题就越大。 如果所有操作都不是自动化的,那么问题的数量就会增加。 其中之一是开发人员花在基础架构问题上的时间,而不是花在编写业务逻辑上的时间。


让我们来谈谈:


  • 团队面临哪些基础设施问题;
  • 开发和测试过程如何受到此影响;
  • 我们如何实现OpenStack;
  • 我们使用OpenStack的方案是什么?
  • 自动化如何在开发中获得更多动力,新的内部产品开始出现。
  • 我们剩下的方面不是自动化的。


关于我自己 公司2GIS。 我在公司工作了两年。



基础架构和运营团队。 我们主要支持Web部门的内部基础结构。 最近,其他内部产品团队也加入了我们。 我们还负责生产中公司网络产品的运营。 而且,我们还在研究和开发新工具,以使我们的生活更轻松,并改善我们心爱的开发人员的生活。 我们只有9个人。



首先,我们了解基础架构。 我们为什么要谈论她? 这是什么 我们什么时候开始谈论她?



从产品和某些项目的最初工作开始,我们就有一个问题-我们将在哪里部署? 在哪里检查结果? 在哪里测试等等。



第一个答案立即在本地。 在本地,因为它非常简单。 在他的笔记本电脑上开发,启动,检查-一切正常。 您坐在那里思考-为什么还要检查笔记本电脑? 一切对我有用。



如果我们在笔记本电脑上有一个操作系统,而另一个正在生产中呢? 还是我们的产品应该支持多个操作系统?



案件不包括在内。 即,不同的操作系统。



如果我们有机会并且做出坚定的决定-我们到处都有Linux。 例如,一些Ubuntu。 其余的全部来自邪恶。 在我们看来,我们已经解决了所有问题。



但是仅仅匹配操作系统是不够的。 我们需要特定版本的软件包。



我们认为该如何解决这个问题。 记住-我们有隔离。 很高的东西。 谢天谢地,市场上有很多产品。 我们采取virtualbox。 创建一个虚拟机。 我们推出我们的产品。 我们制作快照。 我们得到了环境。



我们正在发展。 我们的产品越来越难。 这不再只是一个php数据库应用程序。 该应用程序已成长为分布式系统。 我们还有其他产品。



公司正在发展。 我们有新的使用案例。 所有这些产品都希望集成在一起,以便能够一起工作。 我们具有涉及多种产品的功能。 我们经常被要求展示您的发展。 让我们在某处看到它。 我们没有更多的资源可以进行手动测试。 我们记得有持续集成,即自动测试。 为此,您需要其他软件。 即使所有隔离,我们当地的环境也不再足够。 这就是基础架构的用武之地。 我们需要一个可以部署产品并向他人展示结果的地方。 我们必须以某种方式管理所有这一切,这应该很方便。



让我们看一下我们公司的2GIS。



这是指南和地图。 您可以查看城市地图,搜索组织。



我们拥有:Web产品,移动设备,桌面应用程序。 大约有35个不同规模的不同团队。



我们的基础架构有什么问题? 2013年底,我们使用了proxmox。 这是一个虚拟化管理系统。 使用它,您可以创建KVM虚拟机或OpenVZ容器。 但是所有这些都是通过接口手动完成的。 为了发挥全部功能,您仍然需要进入虚拟机并配置网络dns。



因此,一段时间以来,我们的发展流程如下。 作为开发人员,我正在寻找票务管理员。 管理员如果有时间,可以创建一个虚拟机。 他们给出一个IP地址,登录名和密码。 但是,如果我需要重新部署此虚拟机,那么我会再去找已经怀疑地看着我的管理员。 他们说-尽可能多的人?



没有项目分离。 在多台服务器上有一组虚拟机,管理员可以在其中手动创建所有内容。 人为错误的可能性很高。 您可能会混淆IP地址或删除错误的虚拟机。 很多这样的情况。 虚拟机的责任是不可理解的。 开发人员不承担任何责任,管理员也不承担任何责任。 尚不清楚其他人是否需要虚拟机,或者每个人早已忘记它并且不知道它。



另外,API较弱。 插件是付费的或perl的。



但是除了问题,我们还有其他有用的东西。 我们有自己的铁,所有铁都在上面旋转。 我们的系统管理员非常棒,他们知道如何烹饪,保养和正确购买。 他们在虚拟化方面有一些经验。



我们开始思考:哪种解决方案适合我们? 我们的基础架构应该是什么样子,以免干扰开发过程,而是提供帮助?


通过研究,我们获得了以下需求清单:


  • 有效利用铁。 我们不想有孤立的虚拟机。 我们不想只是加热数据中心的空气。


  • 我们希望拥有团队资源,以便团队对其使用的资源负责。 她很注意他们。


  • 我们希望解决方案是模块化的,只选择我们需要的服务。 并且在需要的情况下,随着进一步的发展,能够进行扩展。


  • 该解决方案应易于最终确定。 如果出现新要求,我们可以根据自己的特定需求改进解决方案。


  • 我们不仅需要一个用户界面,还需要一个API来编写绑定和管理基础结构。


  • 我们要隔离团队,尤其是负载测试团队。 我希望她一点都不要打扰。




我们有什么选择?


我们研究了公共云:AWS等。 该选项很吸引人,因为它们几乎处理与基础架构有关的所有问题。 可以向这些著名公司收取很多钱,但我们却受到美元(或制裁)令人恶心的局面的束缚。 我真的不想得到任何供应商锁定。 第三种选择,其中我们考察了开源市场上有什么? 提供什么解决方案? 我们拥有自己的硬件,仍然需要从众多开源应用程序中进行选择。



因此,最后,我们的研究和实验将我们带到了一个名为OpenStack的软件。 Softinke当然听起来太粗鲁了。



OpenStack是一款功能完善的软件,实际上,它是用于构建公共或私有云的一组服务。 OpenStack是一个开源解决方案。 所有服务都是用python编写的。 每个服务都负责其任务,具有自己的API。



它看起来像这样。 记住这张照片。 然后,我们将回到她身边。 有共享(常规)服务。 为此提供服务:计算,联网,存储。 我们的应用程序或用户可以使用这些服务。



开源解决方案。 发布时间为半年。 该版本包括基本组件。 每个版本都包含最初在此孵化器中出现的新组件。 他们在那里呆了一段时间,在那里修复了错误,稳定下来等等。 并且在某个时候,社区决定此组件应从下一个版本开始包含在基本组件中。 也有许多不同的邮件,会议,会议。 最大的会议是OpenStack峰会。 每年举行一次。 在上届OpenStack峰会上,大约有四,五千名参与者。 这么大的事件。 很多报道。



许多人为这一决定做出了贡献。 在这里,我只列出了这样的上衣。 此列表足以了解该项目的严重程度以及哪些公司以及他们在该项目中投入了多少资源。



我们如何解决基础架构问题。


  • OpenStack的组件之一是调度程序,它选择将在其上创建虚拟机的主机。
  • 团队现在拥有自己的资源。 这是CPU,内存等的数量。 我们摆脱了在tiket(应用程序)上创建虚拟的情况。
  • OpenStack是一组服务。 我们仅采用了满足我们需求的基本工具包。
  • 由于OpenStack是开源的,因此可以对其进行修改。
  • 每个服务都有一个API。 有python版本。 也就是说,与每个服务进行交互并编写自己的绑定非常简单。
  • 隔离度。 我们可以在项目,聚合区域,网络等上为我们隔离团队。


团队开发人员将基础架构作为服务。 看起来像什么。



堆栈和模板有两个概念。 堆栈是一组云资源:虚拟机,网络,dns记录等。 模板是对此堆栈的描述。 对于OpenStack,这是常规的YAML文件。 这是文件的一部分。 它说存在这样的实体,例如带有内部类型OS Nova服务器的服务器。 为了使其正常运行,您需要一个IP地址和dns记录。 在这里,名称参数被接受为输入,flavor是此服务器所需资源的描述。 映像操作系统。 key_name-部署服务器时放置的公用密钥。 我们在git的存储库中都有所有这些模板。 每个人都有访问权限。 每个人都可以发送拉取请求。



堆栈的创建如下。 Heat是负责编排的OpenStack组件。 我们在这种情况下说。 这是我们自己安装的实用程序。 我们说亲爱的,用这个名字创建一个堆栈,这是创建这个堆栈所需资源的描述。 这是模板所需的输入,它描述了我们的堆栈。 我们把它装热。 他在那里沙沙作响,为自己创造了所有必要的资源。 而且我们在此模板中也可以指定输出。 当热量产生堆栈时,它可以输出信息:ip地址,访问权限以及我们要求的其他信息。 此外,我们已经可以将此信息应用于进一步的自动化。



为了让您不要认为OpenStack既简单又便宜,我将告诉您OpenStack适用于哪些硬件。 控制面板在3个基础节点上旋转。 这些是具有此类资源的铁服务器。 这是故障转移的推荐配置。



我们还有两个为我们的网络提供服务的KVM网络节点。



我们在8个计算节点上旋转团队资源。 它们分为3个聚集区。 每个区域分配一个计算节点用于负载测试。 在那里,服务器仅由负载测试团队创建。 为了不干扰其余部分。 我们为内部GUI测试自动化项目提供了一个聚集区域。 他有一定的要求。 它位于单独的聚合区域中。 我们所有其他的开发环境,服务器和测试环境都在第三个大型聚合区域中旋转。 它需要我们6个计算节点。



我们为所有团队旋转了约350个虚拟机。



我们已经走了一些路,我们了解了什么。 要部署和支持该软件,您需要一个团队。 团队取决于您的资源。



团队必须具有一定的能力。


首先,它自然是Ansible。 OpenStack部署是用Ansible编写的。 有一个OpenStack-Ansible项目。 如果您想将OpenStack-Ansible添加到您的需求中,那么执行此操作的人员需要拥有Ansible。


虚拟化经验。 您需要能够进行虚拟化,需要进行调整。 了解它是如何工作的。


相同的网络。


OpenStack用于其工作的后端服务也是如此。 该数据库以MySQL Galera和RabbitMQ作为队列。


了解DNS的工作原理。 如何配置。


OpenStack用python编写。 您必须能够阅读代码。 理想情况下,您需要能够打补丁。 搜索社区修复程序。 能够启动代码。 这都是非常有帮助的。 如果团队拥有这样的方法,并且知道如何将诸如基础结构之类的方法用作代码(例如ansible),则所有更改都存储在代码中,那么它们在配置手牌时就不会出现问题。


持续集成。 OpenStack服务套件包括tempest之类的服务。 在其中,所有测试都写在所有组件上。 如果我们更改配置,请在“多合一”安装中运行单独的文凭,然后运行tempest-我们看一下是否有任何问题。 配置了CI,团队必须了解这一点,并且必须能够配置所有这一切。



因为一切看起来都很简单,而且很吸引人。



但是,当您开始深入研究时,您会了解到实际上所有事情都是这样。 这可能会让某人感到惊讶。



OpenStack的引入不仅仅是一种技术解决方案。 此外,您需要能够出售产品,并能够向团队解释他们现在的工作方式以及带来的好处的新范例。 如何与它合作以获取利润。 我们写了很多文档。 该文档的形式为快速入门(快速入门),第一步(第一步)。 也就是说,需要做些什么来快速使您的生活更轻松,而不用花费大量时间。


我们进行了TechTalk,我们进行了交谈,进行了主题讨论,展示了谈话,现在看到您可以按照以下方式获得产品。 从字面上看,我们正在编写一个模板,然后启动。 一切都很简单。 现在,您不必去找管理员那里的东西。


在项目非常复杂的情况下,尤其是在这样困难的情况下,很多情况下,我们来到团队中,直接与团队合作。 也就是说,他们以某种方式试图帮助他们实现流程自动化。 设置所有团队。 杀死了一些错误。 他们了解到我们没有在此处配置错误。 通常,与团队紧密合作。



我们收到了产品的快速部署。 以前,为了接收产品,必须执行许多手动操作并与许多人进行交互。 现在,通过按钮可以创建环境(环境,服务器)。 如果已编写部署并且可以在项目中使用,则可以通过安装了产品的按钮或新的Envinronment(环境,服务器)进行部署。


对于某些团队而言,缺乏正常的基础架构会阻碍他们在团队中实施CI流程。 我们解决了基础架构问题,在CI服务器上建立了团队,配置了管道,在管道中创建了虚拟机。 通常,它们推动了这些过程的发展。


他们还帮助了一些使用基础架构自动进行测试的内部产品。 VM Master是一款可在线测试我们的产品。 他需要筹集大量虚拟机,才能从不同的浏览器访问该网站,并通过一些步骤来了解我们的在线浏览器可在所有已知的浏览器中运行。 也就是说,他们对他有很大帮助。


一个不错的好处是,他们可以卸载管理员(自己)。 因为在某个时候,创建虚拟机的活动开始占用空间。 每个人都开始紧张。 现在我们正在做有趣的事情,复杂的产品。 我们摆脱了例行任务。



有什么问题吗


问:部署OpenStack需要多长时间?


答:这个问题很复杂,因为我们的流程可以容纳喜剧系列。 他的入职门槛很高。 我们理解了整个基础架构,寻找了解决方案-花费了三个月的时间。 然后在一个月内,我们在某个地方推出了首个安装程序。 我们在那里添加了几个项目。 他们住在那儿。 然后,人为因素发生了-他们击中了这个装置的头部。 我们意识到缺乏容错能力是不好的。 然后我们等待铁。


问题:您是否使用付费支持?


答:不,我们不使用它。


问:您正在使用哪个版本的OpenStack?


答:OpenStack的版本称为单词。 首先是朱诺,然后我们升级到自由。


问题:是否在管道中创建虚拟机持续集成?


答:在詹金斯(Jenkins)中进行构建会引起热量并创建虚拟机。


问题:您在资源共享方面遇到问题了吗? 大致来说,两个虚拟机位于同一台物理服务器上。 其中之一开始加载磁盘,例如数据库。 如果面临,您如何决定?


答:我们在资源共享方面没有遇到问题。 彼此的产品干扰不大。 我们布置了脚本。 如果您需要运行繁重的场景,请运行负载测试,那么您需要去负载测试团队,由他们来运行负载测试。


: - ?


: OpenStack . . . .


: . . OpenStack ?


: . OpenStack . .


: OpenStack?


: . proxmox. OpenStack.


: DevOps?


: DevOps , . , , .


PS 2019 OpenStack heat Terraform .

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


All Articles