用CloudFormation Registry和Kubernetes冷静一下吧
AWS CloudFormation是最流行的基础设施即代码服务。它是在AWS上配置基础设施的事实上的标准。然而,客户正在编写自定义代码来提供AWS上的JFrog等第三方软件。
AWS CloudFormation公共注册表使开发人员能够使用CloudFormation模板自动提供第三方软件和本地AWS服务。
在本课程中,您将学习如何使用CloudFormation Public Registry中发布的JFrog模块,使用CDK和CloudFormation模板自动化部署EKS集群。
视频记录
大家好,欢迎。我叫Brian Terry,是CloudFormation团队的高级开发人员。今天我很高兴能和你们谈谈Kubernetes和CloudFormation注册表。但首先,让我们从议程开始。我要做的第一件事是告诉你们一些关于我自己的事情,以及为什么我有资格给你们做这个演讲。接下来,我们将研究在创建基础设施代码和管理基础设施代码时遇到的一些挑战。然后,我们将研究一些选项,使您在创建这些复杂的基础设施时更加轻松。最后,我们将升级我们的重用模式,我将向你们展示一个非常酷的工具,由JFrog的那些人制作。
好了,我们来到了演讲中我最不喜欢的部分实际上是在谈论我自己。我做了一张幻灯片,你们可以看到我在过去20年里所做的一些事情。但最近我一直在与AWS合作。具体来说,我已经做了一年多一点的开发人员倡导者,但我在AWS的总时间大约是三年半。所以我最喜欢的部分就是能够周游世界,谈论基础设施代码,并真正认识一些好人。所以,如果你发现自己在现场听我的演讲,请到我面前来和我交谈,因为我喜欢和人交谈,我很乐意见到任何一个来听我演讲的人。
好了,说到这里,让我们来谈谈世界上最酷的AWS服务,至少我认为它是世界上最酷的服务,它叫做AWS CloudFormation。因此,对于那些从未使用过CloudFormation的人,让我们从10000英尺的角度来看看这项服务可以做什么。基本上你用JSON或YAML编写你的基础设施,你把它上传到S3桶,然后你就创建了所谓的堆栈。该堆栈表示您将在AWS部署中管理的资源。2022世界杯阿根廷预选赛赛程一旦你创建了一个堆栈,你就可以在一个完整的单元中管理这个堆栈。尽管CloudFormation开箱即用,功能强大,但使用CloudFormation构建非常复杂的基础设施存在一些挑战。基本上,这些挑战中的一些是建设者花费大量时间试图找出创建这些资源的最佳实践。2022世界杯阿根廷预选赛赛程
比如定义服务器时的最佳实践是什么?如何安排CloudFormation模板?所有这些都是构建者在创建模板时经常要考虑的问题。其次,应用程序通常共享公共体系结构元素。例如,如果你创建了一个Lambda函数,它可以读写DynamoDB,你通常会在其他云国家模板中一遍又一遍地重用它。接下来,建模基础设施变得重复。您总是在重新发明轮子,定义和配置这些服务器,与其他服务器集成,遵循最佳实践。在创建基础结构时,您基本上是在一遍又一遍地做这个。最后,在这些模板中构建独特的特性需要花费宝贵的时间。例如,您创建了CloudFormation模板,将Lambda函数写入DynamoDB。 And what if you had to adjust it just a little bit for a specific project? Well, it’ll take time to figure out how to create that unique template and to deploy that within your infrastructure.
幸运的是,CloudFormation团队中的那些聪明人已经看到了这些挑战,并提出了一个功能来帮助您减轻这些挑战,并帮助您在AWS帐户中快速部署非常复杂的基础设施,并在整个组织中共享这些功能。这个新功能被称为AWS CloudFormation模块。我们来谈谈什么是AWS CloudFormation模块。什么是CloudFormation模块,为什么我应该使用它们?模块很酷。具体来说,它们有三个主要的优点,那就是,它允许你封装通用的解决方案,它们针对最佳实践进行了优化,你可以在你的组织中重用它们。例如,您创建了一个具有安全S3存储桶的体系结构。具体来说,您有这个CloudFormation片段。我假设您花了一个小时或一天的时间来定义这个很棒的基础设施,但是您希望在您的组织中重用它。
您将创建一个CloudFormation模块。这个模块看起来是这样的。因此,正如你在这个CloudFormation模板中看到的,我们使用了一种特殊的资源,称为AWS:S3::bucketprivateaccess:: module,结束部分有一个特殊的名称,称为module。它所做的是,它封装了这个CloudFormation模板的完整的最佳实践,并将它整合成一个它看起来就像一个叫做模块的小资源。因此,如果你看一个模块,基本上它们是在CloudFormation模板的资源部分中使用的,它们的区别在于有以模块结束的第四部分。使用模块的模板可以是YAML,也可以是JSON。在上面的模块下面,我们有资源模式。知道如何定义模式并不重要,因为幸运的是,当您创建一个模块时,这个模式会自动为您生成。所以你可以想象,如果你看左边,你可以把它想象成你有这个确认模板,我们创建一个JSON模式,CloudFormation可以用它来定义你的模块。
让我们来看看模块平台。所以当你创建一个模块时,你可以使用一个叫做CloudFormation注册表的中心工具来共享这个模块。让我们快速看一下。所以如果我们看左边,你会看到你可以让发布者,比如AWS服务,内部服务团队,整个社区创建这些模块或这些最佳实践。一旦他们创建了这些,他们就会提交给注册表。另一边是消费者。这些消费者可以是您组织中的开发人员,也可以是世界上真正想要使用公共模块的任何人。他们可以把这些放在模板中,他们可以在CDK中编写这些。所以他们可以在他们的开发模式中使用它来一次又一次地重用这个架构。
你可能会问自己,谁有这个好处?这对出版商有利吗?它对开发者有利吗?谁在创建模块时受益?嗯,这对每个人都有好处。让我们快速看一下这是怎么回事。所以如果我们看看左边的发布者,他们能够在整个组织中封装和共享这些最佳实践。他们能够使用模块中内置的本地版本管理来分发更新,这有多酷?另一方面,消费者可以毫不费力地遵守最佳实践和指导方针。而且它抽象了资源的复杂性,允许更容易地创作CloudFormation模板。 And then they can leverage these reusable template code and reduced development time. And then finally, they can build their infrastructure and applications in module components. So the registry has two different ways to access it. You have a private registry and you have a public registry.
所以那些私有注册中心是你可以在你的AWS账户中找到的模块或可重用架构,它们属于并保留在你的AWS账户中。组织中的任何人都可以在CloudFormation模板中使用它们。但在另一方面,我们有公共注册中心,公共发布者可以在其中创建这些最佳实践和架构,它们可以在您的组织中重用。例如,AWS可以在EKS上创建一个模块,你可以在CloudFormation模板中使用它来反复使用。幸运的是,我们在JFrog的朋友已经创建了一个模块,并将其发布到公共注册中心。在这节课中,我们会稍微讲一下我会给你们看一个很酷的新模块的演示。
现在在CloudFormation控制台中,你可以搜索模块,在CloudFormation控制台中,你可以看到许多来自第三方贡献者的不同模块。其中之一就是JFrog。我们来谈谈JFrog的新模块。这个新模块非常酷。它允许您在不到30分钟的时间内部署Artifactory和一个容错、可靠、高度可扩展的解决方案。这个模块包含了部署所需的所有资源,您可以在CloudFormati2022世界杯阿根廷预选赛赛程on模板中非常简单地使用它。所以,如果你想跟随,请访问这个URL。
现在,让我们跳到演示部分。好了,让我们进入我最喜欢的部分,那就是演示。因此,在这个演示中,我将向您展示如何使用JFrog模块在AWS帐户中部署Artifactory。然后,我们将创建一个EKS集群,并实际开始使用它。因此,作为先决条件,您需要的是Artifactory许可证。如果你目前还没有Artifactory的许可证,没关系,因为你可以访问www.si-fil.com/start-free并获得30天的免费试用许可证。这个过程又快又简单。你所需要做的只是填写几条信息,JFrog就会给你发一张许可证。所以接下来你需要的是CentOS 7 AMI。
你可以到aws.amazon.com/marketplace上订阅,搜索CentOS 7,点击订阅按钮。对于这个演示和使用这个模块,实际上需要三个许可密钥。实际上,每个副本和每个master都需要一个,因为我们将把Artifactory的高可用版本部署到我们的AWS帐户中。我们要做的第一件事就是把这些钥匙存放在一个安全的地方。为此,我们将使用AWS Secrets Manager。Secret Manager实际上需要为每个许可证创建一个秘密。
(沉默)。
好吧。我们会给这些秘密起一个我们能记住的名字。因此,让我们使用人工许可证,并保持默认值不变。我们点击next来创造秘密。现在,对于这个演示,我们要做的是生成一个自签名证书,但我强烈建议您不要在生产中这样做,而是实际使用来自受信任的安全权威的证书。现在我们已经生成了自签名证书。如果我们cat那个证书,你会看到它被创建了。我们要做的就是把这个复制到剪贴板上然后转到AWS机密管理器。因此,我们正在创建一个包含证书信息的新秘密。好的。 So this will be our first certificate. And we actually need to create two secrets, one for our private key and one for our public key.
(沉默)。
就像我们之前做的一样,我们给它取一个我们能记住的名字。我们称之为人工证书。我们将保持默认值不变,并创建secret。好的。因此,如果您按照下面的步骤进行操作,您的秘密管理器仪表板应该看起来与此类似,其中实际上有两个秘密。好吧。因此,接下来我们需要做的是启用JFrog模块。所以你可以通过在你的AWS CloudFormation仪表板中找到公共扩展并搜索Artifactory或JFrog来快速做到这一点。在执行搜索时,不要忘记单击模块单选按钮和第三方单选按钮。我只想快速指出一个事实,为了使用JFrog模块,您需要启用所有的公共扩展。
对于这个演示,我已经在我的AWS帐户中启用了这些公共资源类型。现在,如果你想在你的帐户中启用这些资源类型,你只需要点击模块,你就可以看到模式,输入参数,示例模板等等,你只需要点击激活按钮。然后,一旦你点击激活按钮,你就可以在你的AWS帐户内使用这些。但同样,您需要启用所有JFrog扩展。为了节省时间,我已经使用官方的AWS快速入门在我的AWS帐户中预先部署了一个EKS集群。
现在我们已经设置了所有的先决条件,让我们回到JFrog博客站点,实际启动包含模块的CloudFormation模板。因此,首先我们将单击“安装在一个新的VPC中”的链接,它将带我们到一个GitHub存储库。在GitHub存储库中,你实际上看到了一个使用这些模块的CloudFormation模板。我们复制GitHub的URL然后用Wget下载CloudFormation模板。一旦我这样做了,我实际上会在我的编辑器中打开CloudFormation模板。
在这个演示中,我将使用PyCharm,但你可以使用任何文本编辑器,包括Visual Studio Code或Vim或类似的东西。现在打开我的ID,您将在我的项目目录中看到几个文件。如果您按照下面的步骤操作,您应该拥有CloudFormation模板和两个证书文件,这些文件是我们使用自签名证书生成的。所以这个CloudFormation模板是这个演示的一个很好的开始,但我需要稍微修改一下,使这个演示更快一点。所以首先,我们将硬编码堡垒和x射线属性的值,以减少我们部署的大小。在编辑这个模板时,我将指出一件具体的事情。注意,在使用Cf Lent IDE集成时,我们会对未使用的条件和参数等情况发出警告。因此,这有助于您快速诊断CloudFormation模板中的错误,并允许您快速修复这些错误。我现在就来做这个。
现在我们已经编辑了CloudFormation模板,让我们继续部署这个CloudFormation堆栈。所以在CloudFormation控制台中,我实际上要上传我刚刚编辑的CloudFormation模板。接下来我要给它起一个我能记住的名字。我要为我的数据库设置密码。注意,我们为演示保留了开放访问,但建议将其设置为可信IP范围。因此,我接下来要做的事情是跳转到Secrets Managers控制台,并复制之前创建的许可证和证书的名称。我要把这些作为云形成模板的输入参数。
现在我们继续为CloudFormation模板填写输入参数。接下来我们需要做的是设置主机名。因此,我使用的主机名与生成自签名证书时使用的主机名相同。接下来,我将为Artifactory集群创建一个主密钥。因此,我将为此使用开放SSL,我将从CloudFormation仪表板复制命令,并在我的终端中运行它。然后复制主密钥。我需要做的下一件事是选择可用区域。所以我选择从美国东部到A,从美国东部到B,以使其高度可用。最后,我输入x射线的密码,x射线数据库,然后点击下一步。我将保留所有其他参数的默认值,然后点击下一步。 And finally, I’ll acknowledge that I’m using IM resources inside my CloudFormation template. So I’ll select these three and click create stack.
好的,这个部署大约需要20分钟才能完成。因此,在部署这个CloudFormation模板时,让我们快速看一下一些东西。你会注意到,在堆栈上,你会看到它在创建进度,注意到它在创建一些资源。2022世界杯阿根廷预选赛赛程基本上就是在模块内部部署资源。2022世界杯阿根廷预选赛赛程您可以看到,为了使这个Artifactory部署具有高可用性,有许多资源。2022世界杯阿根廷预选赛赛程我们把它放在这里,烤一会儿,然后我们会回来,我们会看一下创建的基础设施。
好吧,看来我们的资源和基础设施都准备好了。2022世界杯阿根廷预选赛赛程我们要做的是在输出中搜索外部负载均衡器的URL。这里有负载均衡器URL。一旦我们有了这个负载均衡器URL,你就可以把这个放到浏览器中去到那个URL。但在这个演示中,我们要让它高可用性,我们要让它容易找到。我们要做的是,我们要为route 53内部创建一个DNS记录。我们来做一下。
(沉默)。
好吧。所有东西都准备好了,都部署好了。我们有53号路由的DNS名称。我们的基础设施由CloudFormation和模块部署。因此,让我们使用DNS名称登录到Artifactory部署。在这里,我们将使用默认用户名和密码,并登录到Artifactory UI。现在在这里,我们需要做几件事。首先,我们需要设置一个新密码。我们需要这样做,我们要把它设为强密码。接下来我们要做的是为URL设置base。 So to do that we actually need to use the same host thing we used to generate our certificates. So in this demonstration I used demo-art and I’m going to give it the rest of the DNS name that we set in route 53 and then I’ll hit next. Next, I’m actually going to create a Docker repository. So we’ll go here to JFrog UI and we’ll create our Docker repository.
现在我们已经创建了Docker存储库,让我们创建一个用户。对于这个用户,我们会设置一个强密码。接下来,我们要创建一个组把我们的用户添加到那个组,然后点击保存。最后,我们将创建权限,并将其附加到刚刚创建的组和用户。太棒了。现在让我们克隆hello-kubernetes repo。我们会跳到命令行,使用Docker login我们会提供demo的名字给Docker repo我们会使用刚创建的用户名和密码。
太棒了。现在我们已经成功地登录到JFrog Artifactory中托管的Docker存储库。太棒了。现在我们已经建立了Artifactory基础设施。现在让我们跳转到CloudFormation控制台,快速查看一些内容。因此,我在前面告诉过您,我使用官方的AWS快速入门部署了AWS EKS集群。然后在快速开始时,他们给了我一些输出。因此,我将找到EKS集群名称,实际上我将使用它来配置我的kubectl命令行。好的,看起来我们在这里有一个错误,看起来我的权限可能在这个配置文件上有点太紧了。我要做的就是把我的旧值改成600这样就能修复这个错误了。 So if you’re following along and you get this error, basically you can fix it by opening up the permissions just a little bit. Now we should be able to configure our kubectl command line authorization.
看起来我们得到了一个授权错误,但我们可以通过输入一个角色来快速修复它。所以你注意到了一个文档。我们可以将-role ARN标志与我们的调用结合使用来输入角色。接下来,我们将看看是否可以使用kubectl Git notes连接到集群。你可以看到我们可以很好地连接到我们的笔记上。所以,到目前为止,我们已经建立了基础设施,并且能够连接到我们的EKS集群。现在我们需要为部署设置映像池秘密。
(沉默)。
现在我们只是验证我们得到的秘密名称是正确的。看起来已经创建好了,我们可以进行下一步了。现在让我们快速回到AWS控制台和地板图像。为了简单一点,我们要克隆这个存储库。这个存储库实际上有一个make文件用于构建Docker镜像和部署Docker镜像。它还有一个hem文件,我们可以使用它将基础设施部署到EKS集群上。如果你快速复制这个项目,看一下文件,你会看到这里有一个make文件。我们需要提供一些环境变量,比如存储库名称和URL等等。一旦我们能够这样做,我们实际上可以使用这个make文件来构建Docker映像。
(沉默)。
看来我们的形象已经树立起来了。现在我们需要进行下一步,我们需要将映像推到存储库中。好,现在让我们快速看一下Helm图表。你可以看到我们在Helm图中有一个部署。因此,我们实际上可以使用它来部署示例hello-kubernetes基础设施。我们要做的是看一下这个部署模板。正如你所看到的,我们可以在容器图像中输入很多值,等等。所以基本上这可以帮助我们建立一个赫尔姆图,这样我们就可以部署到我们的EKS集群,并测试这个基础设施。
现在,在部署内部,我们需要为部署设置映像池秘密。我们将继续设置这个秘密。看起来它是不可配置的,所以我们需要将它添加到部署模板中。现在我们要验证这个秘密是否正确。你可以看到它是正确的,我们已经准备好开始部署了。现在让我们继续安装Helm图表。所以我们将Helm install -n hello- kubernetes。好吧。我们称它为hello-world。看起来很成功。 And now we’ll check the running pods and you can see it’s still using the default image.
因此,让我们更新值以指向汽车工厂。在我们的部署文件中,我们要做的是将Helm图表指向我们的Artifactory部署。因此,我们将在这里将图像从默认图像更改为Artifactory存储库,然后更新Helm发行版。我们来做一下。我们将使用Vim为我们快速编辑它。现在让我们使用更新后的部署文件升级Helm部署。现在请记住,我们现在指向的是Artifactory存储库。所以当我们升级这个头盔部署,所有的舱现在应该使用更新的图像。因此,我们将使用kubectl,我们将使用Git pods命令来查看是否所有pod都使用了最新的图像。
您可以看到,我们成功地使用了JFrog Artifactory Docker存储库中的新映像。如果我们使用Git pods并进行部署,我们可以在部署文件中看到我们确实在使用该存储库。现在让我们打开浏览器,快速查看一下部署。因此,如果我们使用低平衡器的URL,我们将看到部署成功,我们的Kubernetes部署目前正在运行。
好了,让我们回顾一下我们做了什么。所以我们做的第一件事就是在AWS上使用官方JFrog模块创建了一个高可用性和可扩展性的JFrog Artifactory部署。然后,一旦我们部署了它,我们实际上将它连接到我们的EKS集群,并最终使用Helm在不到30分钟的时间内部署了该映像。感谢你花时间参加这次演讲,请在社交媒体@ needhelpbrian上关注我。所以,如果你想了解更多关于JFrog的新模块或CloudFormation注册表,请参阅他们的新博客。再次感谢大家,希望你们有非常非常棒的一天。
