文摘:
Jagan Subramanian, JFrog和Viraj Purang/ Oracle, 2016年5月:在Oracle,许多产品团队使用docker作为他们云持续开发的一部分。每个产品团队都可以使用自己的内部docker注册表基于Artifactory的docker支持,使团队能够在不同的注册表中管理他们的项目,对他们的docker映像进行更好的访问控制,并在整个组织中共享映像。
视频记录
[贾根]好了,维拉杰,不如我们先多介绍一下你的团队吧。
(Viraj)好。好吧,我必须从这个开始。
[贾根]哦,我忘了。
[维拉]这是我们的律师要求我们,你知道,把它放在那里。
[维拉]这就是我的团队。所以,我们做的很多事情和在座的各位没什么两样。如果你在DevOps领域工作,你知道,我们做CI/CD,我们写管道,我们有一个DSL,通过它我们能够,你知道,创建一堆CI/CD管道,你知道,一堆东西。在农场上运行测试,进行构建,进行单元测试,创建Docker实例,将它们部署到生产环境中,所有这些都是通过这些管道驱动的。我们的团队负责这类事情。
[Viraj]我们围绕Docker、Artifactory以及像Carson这样的内部工具进行了大量的工具开发,你知道,我的一个朋友将在今天晚些时候的一次演讲中谈到这一点。我们做分析,做POCs。因此,每当我们推出新产品或Docker的新版本时,甚至当我们第一次开始使用Docker时,我们都是第一个尝试的团队。写规范,放弃-给出建议,你知道,我们想出了驱动整个过程的文档。
[Viraj]就生产环境而言,你知道,我们与其他团队进行交互,他们在生产环境中使用我们的一些不同服务。
[Viraj]我们非常关注测试,所以我们所有的部署到生产中,所有部署到Artifactory数据中心,任何事情都是基于我们所做的自动化测试。我们尽量不手动部署任何东西。这就是我们如何将自己与Oracle内部或外部做同样事情的其他团队区分开来的方法。
[维拉]我们也做了很多图表,你知道,我们看数字。我们对代码进行了很多测试,我们查看了几乎所有的HTTP请求。我们在做什么。我们试图把他们打倒。你知道,我们就是这样运作的。
[维拉]你没必要这么快就翻新。
[贾根]他们得到指示要早点离开,嗯。好吧。
[维拉]我没那么糟。
[Jagan]所以,去年,你知道,就Maven构建和Oracle内部的快速适应而言,有了巨大的增长,对吧?那么,自去年以来,情况发生了什么变化?
[维拉吉]所以,去年是他公布了这些数据,所以他应该是最后一个问我这些问题的人。但是,是的,我们去年有相当大的储存库。我不确定确切的数字,但我们做了大约40太字节的一般存储。现在我们有80tb,这是在每天删除大约100万件人工制品之后。这只是一般的Artifactory用法。包括一堆不同类型的包装系统。但是,
[贾根]我想这张幻灯片实际上并没有变。
[维拉]但是我们周围正在发生很多变化。有内部的变化,有外部的变化,然后还有发生在Artifactory本身的变化。我会按顺序讲一遍。
[维拉]所以第一个,就像这里,你知道,去年我想这几乎是一样的事情,但我们没有意识到这一点。但是大约90%的人,无论是在这里还是在外面,都已经知道Docker。其中,70%的人在Docker上尝试过一些东西。他们中的大多数至少在开发中运行一些东西,如果不是在生产中。
StackEngine是甲骨文去年收购的公司之一。这些是他们提供的数据但他们这么做的核心原因,核心驱动因素是,混合云,虚拟机软件成本,等等。
[Viraj]除此之外,我们还有一些内部驱动因素。如果你看一下甲骨文去年的足迹,这张幻灯片有点过时了,但我们有大约800拍字节的存储空间。这是我们目前的云足迹。所有这些,至少,像我说的,这些都是通过Docker相关的或Docker部署的应用程序驱动的。所以我们现在真的是在用消防水管喝水。
[维拉]然后,你知道,还有人工制品的多样性。在2015年,我们只使用Maven。有,你知道,可能有几个仓库在这里和那里为不同类型的打包系统。显然,我们的数据库是在Oracle上的。我们使用部署Artifactory的Oracle Linux。
[维拉]但如果你看看2016年的数据,我们有很多。就像,你知道的,蟒蛇。我们有RubyGems。我们有Yum仓库。很明显,Docker就是其中之一。这是在爆炸发生的一年内发生的。所以,你知道,我们周围的事情真的在改变。
Jagan哇。这是很多技术的集合。那么,JFrog平台如何帮助你,你知道,从这个转变到适应这个多样化的,你知道,打包类型和努力的构建以及所有你拥有的东西。
[维拉]所以我认为很多都是显而易见的。但是,尽管这很明显,但它确实是我们的动力。所以,每一天,如果你喜欢,假设你看一下我在这里展示的存储库的类型,你知道,如果我必须去安装Yum存储库,Nuget存储库和node。js npm存储库,或者,你知道,Bower存储库或其中任何一个,我必须与不同的公司合作,分别安装它们。分别为它们配置负载平衡。分别为它们中的每个配置[…]代理。只是,我是说,爆炸还在继续。从我们的角度来看,能够在Artifactory中完成这一切,没有什么比这更好的了。这就是我们选择Artifactory的一个重要原因。
[Viraj]另一件重要的事情是,你知道,它确实允许我们做的是我们在Artifactory之上开发的一系列服务。我们仍然可以重复使用它们。我们有一个工作流引擎,它是基于特定事件驱动的。它驱动我们如何提供我们的系统。它驱动我们如何在系统上配置用户。你知道,它驱动了不同存储库的缓解。我们不需要写这些因为我们已经为Artifactory写过了,你知道,一旦完成,我们所要做的就是添加类型,我们就可以开始了。
[Jagan]所以你的意思是,Artifactory的普遍性确实对你有好处。您不必寻找其他定制解决方案。
[Viraj]。是的。还有一些标准的东西,比如Logstash或Sensu监控。所有这些都是内置的,我们也有自己的内部,你知道,代理,像EM等等。都在那里,准备好了。我们可以扩大规模。例如,我们的系统运行在六到七个不同的数据中心。我们不需要为任何一个仓库单独设置所有这些。我们可以从头开始。
[贾根]所以,很明显,规模很大。对吧?所以,你知道,当你经历了这个过程,经历了这个进化,为什么你会选择Docker呢?或者达到这一点的挑战是什么。
[维拉]所以,有很多原因,我马上就会讲到,但我认为你可能应该看看我们的Docker数据。好吧。和。好吧。这就是我们现在的情况。如果你看一下这些数字你就会知道我们用了多少Docker。因此,我们总共有80tb的人工制品。在这4tb的数据中,你知道,只是纯粹的Docker。我们现在正在做1.5个Docker特定的请求。这就是我们在这个层次上与Docker集成的深度。
[维拉]现在来谈谈我们这么做的原因。首先,数字。对吧?就像我的一些业内朋友,他们对Docker hub的问题纯粹是因为数字。我们能够得到所有这些信息,因为,你知道,我们有系统,现有的系统,可以为我们提供这些数据。但我们选择Docker的原因实际上是多方面的。所以,如果我仔细看的话,有两种不同的路径。有开发用例。所以,你知道,我们在生产中提供的一堆服务,要么是基于Docker的,要么是Docker本身作为一个容器。有一些服务还没有投入生产。 And I’ll get to that slide in a second.
[Viraj]所以我们选择Docker的一个重要原因是,你知道,持续集成所提供的需求。你知道,重要的是我们有很多产品。hth华体会最新官方网站我现在都数不清了。但是这些产品中的每一个都有一长串日常的测试用hth华体会最新官方网站例。每次他们运行测试用例时,系统都必须被关闭。还有一些清理工作要做。需要安装预配置。我们需要一种能把所有这些元素组合成一个原子单位的东西。你知道,我们有安装人员来做一些工作,但是能够一次完成所有工作的能力是我们至少缺少的。这就是我们的核心,你知道,Docker的驱动力。
[Viraj]另一个重要原因是,你知道,你可以给Docker打补丁。你知道,你可以对Docker映像做一些小的改变,这样就可以了。很明显,你知道,与基础设施整合有关的小问题。使用Docker,我们能够以100%的利用率运行我们的大部分内容。在虚拟机方面,我们大概是2%,5%,10%。所以有很多,你知道,我们能够处理的数字。
[维拉]很明显,你知道,在公司内部已经建立了很多农场。你知道,有很多DI - DIY PaaS服务,所以,你知道,有团队在做Kubernetes。有团队做Mesos和Docker Swarm。
[Viraj]显然,我的意思是,我们不需要安装jvm或应用服务器,然后将工件部署到它们中。我们只需构建一次容器,然后将其部署到任何地方。从我的角度来看,我认为这是最重要的一部分。容器应该不受状态和配置的影响。在这个时间点上,你不能用安装程序做一些事情。
[Viraj]另外一部分,你知道,不是把重点放在开发人员身上,而是更多地放在我们为客户提供的服务上,那就是Oracle在云上提供的服务。这可以分成四个部分。我们把现有的Oracle产品捆绑在Docker容器中。hth华体会最新官方网站目前Oracle Linux、WebLogic、Tuxedo、HTTP server和Coherence通过了认证。在这次演讲的最后我有一张幻灯片,你知道,我们提供了链接,你可以去哪里得到这些。
[维拉]然后,你知道,基础设施就是一种服务。所以基本上客户可以在Oracle提供的计算云服务中进行自己的部署、管理或编排。因此,您可以使用自己的第三方工具或开源软件。然后,有一项新服务,你知道,它还没有推出。我没有具体的日期,但是你可以设计你想要部署的容器堆栈,并提供镜像,Oracle将运行这些镜像,管理你的编排和Docker工作负载。
[Viraj]然后,你知道,你有一堆服务,你知道,你使用,但是,你知道,你不能访问Docker api或Docker客户端。但是在内部,我们使用Docker来部署它们。这就是这五件事的综合。开发者工作流程和,我讲过的四种不同类型的服务,这就是推动我们进入Docker工作空间的原因。
[Jagan]酷。看起来很不错。显然你们有很多注册表。你们知道,从之前的幻灯片中。那么这些注册表是如何在您的工作流中使用的呢?
(Viraj)好。
[维拉杰]他们没有完全理解,所以他们不得不再重复一遍。这就是它的意思,对吧?嗨,Siri。
[贾根]所以,对,对,对,关于[…]。去做吧。
(Viraj)好。所以在大多数情况下,如果你看这里。正确的。我们让一群开发者检查他们的核心更改。它们在Docker文件中有声明性的依赖关系。一旦他们完成构建,无论是在Jenkins Hudson还是TeamCity,这些构建,他们创建他们的图像,然后进入注册中心。我们使用的每一个服务通常在图像之间有一个一对一的映射。可能还有更多。这些图像,我们把这些图像组合成一堆。
所以你可以有一个堆栈,其中有mySQL, Tomcat,一堆Tomcat实例,以及那些堆栈。这些堆栈,基本上就是我们的服务足迹。然后我们使用CD或其他方式来发现服务,因为没有主机名或IP地址被特别嵌入到服务中。运营团队,我的意思是,他们帮助我们管理资源池和小组。如果我们的映像确实通过了整个测试而没有任何问题,那么我们将这些映像部署到生产环境中。这其实是一个很简单的工作流程。但说真的,我的意思是,就是这样。
(Jagan)好。所以,你知道,很明显你有很多产品。hth华体会最新官方网站
[Viraj]。
[Jagan]版本和模块需要结合在一起。你能给我们介绍一下这个综合体是如何管理的吗?对你来说,管道是什么样子的?
[Viraj]我们拥有的CI/CD管道。
(Jagan)是的。
(Viraj)好。所以传统上,你知道,我们有一个管道看起来像这样。笔直的水流,你知道,会有一些,你知道,分叉,比如,向上或向下或其他地方,但大部分都是线性的。但每条管道都有不同的功能。所以你会有一个服务它会使用一个内部工具,你知道,它会创建虚拟机。在这些虚拟机中,我们有一堆,你知道,[…]集群,你知道,web逻辑服务器等等。那就是跑步。会有另一个服务做类似的事情,但是在Docker内部。因此,他们不是使用虚拟机,而是使用Docker实例或Docker容器来做同样的事情。
[Viraj]因此,有了这种复杂性,有了这种可用的拓扑结构的差异,我们必须做的就是寻找一些实际上不会改变它们做事方式的东西,因为它们已经走在那条路上了。但是我们需要提供标准,这些标准可以用于开发其他工具集,或者提供管理报告和诸如此类的东西。
[Viraj]所以我们使用了一个事件代理,我们公司还有另一个团队,他们会在接下来的几场演讲中讨论这个问题。事件代理拓扑是如何工作的,我们做的是这样的。所以我们把管道分成几个阶段,这些阶段都很标准。这些名字是很标准的,你知道,应该是一样的。但是在每一个阶段发生的具体动作都是不同的,这取决于你使用的产品。
[Viraj]所以工作,你看到的这些橙色的点,这些是Jenkins或Hudson的工作。我们把他们分成不同的阶段。如果你看这个,你可以有一个工作做环境清理,另一个工作做这个,你知道,服务注册。但也可能有很多工作需要你来做。以此类推。所以这让我们,你知道,在顶部有一个一致的界面,而在底部这些工作可能是完全不同的。我们的工具与上层互动——我们谈到的阶段和这些具体的,你知道的,部分。因此,创建部分或删除部分实际上可能是正在运行的Docker命令。
[贾根]嗯,看起来像是——看起来像是一次巨大的旅行。我相信这很容易做到,对吧。你能告诉我们一些挑战吗,你知道,这里的发展是什么。
(Viraj)是的。所以我们在这个项目上经历了一些痛苦。因此,当您运行一个80tb的存储库时,没有什么是容易的。因此,备份和恢复几乎是不切实际的。大多数过滤器在100tb时就开始耗尽空间,Docker本身就很漂亮。所以我要切换到下一张幻灯片。你能看到这个吗?
(观众)。
(Viraj)没有?
[贾根][…]通读一遍。
(Viraj)好。所以,你知道,我们面临着一些问题。一个是Docker的发布频率,我的意思是,这很惊人。所以,7天之后,他们发布了一个版本。另一方面,我们基于Maven的系统,它们甚至可以在六个月内发布一个Artifactory版本。正因为如此,当我们更新最新版本的Docker时,Maven端会发生大量的变化。你知道,因为,假设Docker从版本- API版本v- 1移动到版本v- 2。或者客户端的兼容性发生了变化,所以,我们不得不将我们的存储库切换到4.7。Oracle Linux版本本来应该运行的版本是1.1.1,但版本变了。
[Viraj]有很多这样的事情,比如,相互关联的事情不断发生,所以我们最终做的是将我们的部署分岔。因此,Docker存储库将被放到一个单独的Artifactory服务器上,而另一个Maven或Bower或你知道的其他存储库,它们留在一个存储库上。这并不是Docker与其他存储库类型的区别,我认为这更多的是关于部署的频率。如果你的存储库类型的版本变化非常大,我的意思是,而且非常频繁,那么我们就把它们放在一个单独的存储库中,否则我们就把它们放在我们现有的主稳定库中。
[Viraj]除此之外,你知道,我们还遇到了删除相关问题。API的第一个版本,我们试着删除标签,我们试着删除图像,但是有一些问题。比如我们会删除图片,抱歉,我们会删除标签但是图片不会被删除。空间不会被回收,你知道,考虑到我们已经有80tb之类的空间,我们实际上遇到了一种情况,我们担心,你知道,我们的过滤器会用完空间。
[维拉]所以我们的解决方案是,我的意思是,这很简单,只是移动到v- 2。但是将1tb的存储库从版本1转换到版本2,迁移本身就需要几个小时。所以,你知道,我们多年来一直面临着这样的问题。还有一些与Docker本身相关的具体问题。他们改变了存储配置的机制从Docker cfg到。Docker文件夹中的config。json。大多数用户都要登录Docker,然后运行他们的命令之类的。
[Viraj]所以有很多相关的培训,你知道,只是为了确保人们理解存储库的版本刚刚从4.2更改为4.7。以此类推。所以我们有一个内部团队,你知道,他们坐下来,把这些测试和最新的测试进行对比。看看它和之前的研究有什么不同,然后把它们作为指导方针发表。
[维拉]我在想别的事情。是的。我想差不多就是这样了。我是说,还有其他更小的东西。
[贾根]所以,所以,是的。对你们来说,这似乎是一段漫长的旅程,在Oracle和JFrog Artifactory的实现中,有很多东西发生了变化。那么你们接下来关注的是什么呢?
(Viraj)好。所以,这就是我们现在关注的。所以我们的CI/CD管道,就是我刚才用橙色的圆点给你们看的我们有很多服务都遵循这个。但我们正专注于让越来越多的团队参与其中。但更重要的是,特别是从Docker的角度来看,你知道,测试软件。你写的所有测试用例都应该在生产环境中运行。它们应该可以在任何拓扑环境中运行。我们开始把它们捆绑成Docker镜像。
[Viraj]所以,你知道,所有与这些测试相关的配置都将通过Docker镜像驱动。然后部署者自己,就像,如果你在部署的时候需要部署你必须运行一个工作流。它本身在我们创建的Docker映像中运行。显然这不是标准的。这并不是全面的。我们与很多服务合作来做类似的事情。但我们的想法是向前推进,在来年尝试我们的方法。我认为我们现在最重要的是在生产中使用Bintray,所以无论我们的产品库中有什么产品,我们都希望能够以一种更标准的方式将它们推向生产。
[Jagan]所以,我猜今天早些时候发布的关于发行版存储库的公告应该——应该会让这更容易。你能不能多说一点,用例是什么,生产基础设施有什么不同,你今天面临的挑战是什么,你正在试图解决,或者在Bintray上寻找解决方案。
[Viraj]。所以,我们的内部,你知道,我认为他在最初的谈话中暗示的最大问题是防火墙。我认为这是很标准的做法。每个人都有这样的问题。如何从DMZ中提取比特,或者,当您的客户机在DMZ中并且您希望从内部公司网络中提取某些东西时。这是一件大事。我们有现成的替代解决方案。比如,你可以写一个同步服务器。但这并不能实现与LDAP的集成。这并不能让你与在云中运行的一堆其他服务集成。 And, so the idea is to have Bintray, you know, go there and, like, do pretty much whatever it gives.
(Jagan)好。
[Viraj]授权、认证、授权。这些都是基本的东西。但是在那里,你知道,因为你不能与其他服务集成,我们只有简单的服务,从A点到B点,而不是全部。
(Jagan)好了。
[Viraj]一系列行动。
[贾根]嗯,看起来,看起来真的很棒。所以我想我们准时到了,如果有问题的话,我们可以开始提问了。