云工程——应用程序交付的最后前沿

保罗堆栈
软件工程师

DevOps改变了团队协作的方式,以确保更快地交付价值。

随着团队变得越来越成熟,基础设施和安全实践被嵌入到这些系统的交付中。

在这次演讲中,Paul将介绍云工程团队以及应用程序交付是如何由作为软件的基础设施驱动的。将基础设施作为软件的实践允许基础设施测试和遵从性作为CI / CD管道来驱动,以确保我们不仅能够更快地交付客户价值,而且能够以更可靠的方式交付客户价值。

视频记录

大家好,我叫Paul stack。我在这里要告诉你们为什么我相信云工程是应用程序交付的最后前沿。我是Pulumi的一名软件工程师,我很高兴能在今年的JFrog会议上发言。所以我们现在正处于云的进化阶段,而且不仅如此我们发现人们正在迁移到云端,但我们也发现不同的人正在以不同的方式迁移到云端。不同的人以不同的速度移动。

不幸的是,过去一年的新冠肺炎事件加速了向云端的迁移。因此,我们开始看到越来越多的活动,越来越多的工具需求,以及对如何在云中工作的理解。快速介绍一下人们是如何迁移到这里的。在Pulumi,我们把它们分为V1 V2 V3。

V1主要是n层架构,从物理数据中心获取并移动到云中。如果你认为这可能是公司第一次涉足云计算,他们不确定如何开始,或者为了达到目的可能会冒什么风险。这是非常私有的,他们有一些应用服务器,一些网络服务器他们可能通过冲突管理工具来管理它们,甚至手工管理。这在很大程度上是公司内部的一个实验。然后你会看到我们称之为V2生态系统进化的人,这种进化是越来越多的人开始有更多的实验性。所以可能会有虚拟机或计算和容器之间的混合。他们开始混合可能的SaaS产品或平台即服务产品,你知道,甚至可能开始谈论像数据狗,或JFrhth华体会最新官方网站og,或New Relic之类的工具,它更有动态性,更具有实验性,因为不同的团队实际上可以在其上使用不同的变体,这在某种程度上让人们了解他们可以在云中做什么。然后我们有很多人,你知道,我们将其归类为现代云转型,你可能听说过云原生,Soa,微服务,人们在这里使用的各种不同的术语,这是一个非常动态的基础设施,它有很多超连接的服务,它很可能使用类似容器编排系统的东西,可能是Kubernetes, hashey, Corp, Nomad,任何这些类型的工具,你可以利用一些函数,一些lambda,你知道,一些分析和一些机器学习。它甚至开始将多云纳入其中。这种类型的团队,他们肯定不能够手工管理事情,他们还没有理解不同的部分是如何组合在一起的,以及不同的部分实际上是如何相互交流的。

当然,这意味着有不同的方式来管理云。所以我们有了网络控制台,在门户网站上点击,很容易提供一些服务,但很难扩展和复制。

我们是人类,我们会犯很多错误,我们会走捷径正因为如此,我们不是为这些类型的工作而设计的。所以团队意识到也许主机对他们来说并不是最有效的。所以他们开始利用CLA工具,脚本,模板,他们可以开始,比如提高工作流的自动化,他们实际上在做什么,但这仍然会带来一些可重用性问题。更新是困难的,你知道,我们正在关注云形成、Azure资源管理器、谷歌的云部署管理器等领域,你知道,这些领域确实是推动人们将基础设施视为代码的永久性领域。然后有些人又变得成熟了一些,他们已经开始了要意识到这一点,在云中构建他们的基础设施实际上非常像编写和构建在其中运行的软件。所以他们实际上所做的是他们采用了代码,我指的是代码,我的意思是他们开始利用代码和生态系统的最佳实践来实际构建他们的基础设施。

现在,DevOps已经改变了我们现在在生态系统的这一部分所做的一切。

它改变了沟通模式,它尝试了工作模式的形式,我相信它实际上开始进一步改变我们。过去,运营团队是所有进入生产的东西的把关人。现在,他们是考虑安全性的人,他们是考虑性能的人,他们是考虑系统可操作性的人,就像我们之前在谈话中看到的那样,开发人员创建包,然后把它扔给运营团队,这实际上产生了一些争论,DevOps打破了这些障碍,DevOps使这些不同团队之间的对话发生了,然后我们有DevOps DevSecOps,你知道,我们有很多不同的术语,但最终是Pulumi,我们试图开始为这个术语创建一个保护伞,为所有这些在一起工作的不同团队,我们实际上称之为云工程。我们实际上开始看到的是,运营团队,或SRE团队,以及基础设施团队,或平台团队,无论你在组织中如何称呼他们,实际上是应用程序交付的使能者。因此,他们不仅为应用程序开发团队提供了护栏、策略和基础设施,以便将系统部署到其中,而且他们实际上与安全团队密切合作,他们在应用程序团队和安全团队之间工作和沟通,从而建立了这种真正的理解,使系统能够交付。当我们开始努力更快地为我们的客户提供更好的系统时,这开始变得越来越重要。

现在,在我们继续之前,我认为了解一些术语是非常重要的,以确保每个人都理解我在说什么。我提到人们可以通过代码来管理他们的基础设施。那么什么是作为代码的基础设施?这是一种消除容易出错的手动更改的方法。

这是一种将最佳实践引入基础设施管理的方式,也是一种不仅通过代码评审,而且还通过预览来获得变更可见性的方式。这样你就能理解应用或部署会是什么样子因为这个工具会告诉我们它要做什么。

我们为什么要关心这个问题呢?或者我们为什么要把基础设施当作代码来关心?或者如果你今天不做,我为什么要开始做呢?第一,它是自动化的,可重复的。所以它不需要在传送门中点击,不需要尝试事后猜测,不需要尝试跳过步骤来让事情变得更快。它可以更快地得到你的应用程序,因为事情可以并行进行。

那里的工具实际上理解操作需要发生的顺序。

做出必要的改变,以便真正并肩而坐。最后,也是最重要的,就像我之前说的,你们可以预览一下。这是更安全,更可预测的变化在控制台中点击,或者实际上只是运行bash脚本或CI工具。在Pulumi,我们开始说我们再进一步,我们不仅把基础设施作为代码,而且我们把现代基础设施作为代码,我们正在基础设施是代码生态系统,我们正在通过采用真正的编程语言来推动它,这意味着您可以创建、共享和重用您的抽象,以向那些不需要了解复杂性的人隐藏复杂性。你可以开始使用和集成你最喜欢的工具,你的id,你的测试工具,但当然,仍然保持在你的CI生活的保护范围内,你的Dev和Ops熟悉度,你的集成到你的CI\CD工作流程,当然,重要的是,所有正在发生的变化的审计跟踪。因此,我们开始改变基础设施的创建方式,而不仅仅是部署本身。

现在,当然,随着我们开始将软件开发实践引入基础设施管理,我们开始删除这些手动更改,我们正在执行关于抽象的最佳实践,并且能够创建可重用的功能,然后我们可以开始做一些事情,比如引入语义版本控制、代码审查,甚至测试。也许我们的观点是,基础设施不仅仅是代码,但基础设施实际上现在是软件,因为在最成熟的团队中存在这种关系和理解,没有良好的基础设施,你的应用程序无法运行,没有应用程序,你的基础设施只是在云计算中花费你的钱。所以这两个概念之间有直接的联系。把这两个概念结合起来就变得非常重要。Pulumi是一个基于CLA的工具,它适用于你的云,你的语言和你的工作流程。所以在2021年的今天,我们支持超过55家供应商。

我们有亚马逊,我们有Azure,我们有谷歌云,我们有Kubernetes作为我们的主要提供商。我们还支持fastly, economics, metal, digitalocean, OpenStack, Ivan, Docker, Rancher等工具,当然我们也集成了NOJS, TypeScript, go, Python等任何dotnet核心语言,这意味着你可以开始引入你最喜欢的id,如VS code或JetBrains IntelliJ。当然,CLA工具意味着你可以开始嵌入它作为你的CI\CD管道的一部分,使用工具,如Circle CI或GitHub动作或三角舟,等等。因此,它使您可以灵活地选择创建基础设施的方式,以及将其部署到哪里。所以我觉得我们现在正处于基础设施代码的旅程中。我认为很多人刚刚开始这段旅程,或者刚刚开始加速这段旅程。在此之前或之前,我们有一个声明性语法,在这里你声明资源的结束状态,你就有了资源的一致对象模型,而不需要知道任何底层云API类型,或上传API操作。2022世界杯阿根廷预选赛赛程这是Pulumi中的一个例子,是TypeScript中的,你可以在TypeScript中声明你的基础设施,但它仍然是非常声明性的。我们首先要做的是导入Pulumi AWS包,我们声明了几个常量,我们实际上声明了一个安全组,它有两个Ingress端口,或者两个Ingress规则,一个用于端口22,一个用于端口80。然后我们实际上声明了一个实例,这个实例引用了size常量,它也引用了AMI常量它引用了上面引用的安全组ID。因此,Pulumi将了解如何部署这个应用程序,并且它将了解需要在创建EC2实例之前创建安全组,因为这两个信息之间存在隐式关系。最后,当然,我们可以导出一些信息。

然后我们开始能够引入条件语句和循环。所以在Pulumi,它变得更容易一些,因为我们能够使用编程语言来做到这一点。你可以看到,如果有一个变量公共子网ciders,而这个变量不等于mil,那么我们可以取这个变量,我们可以拆分它,我们可以用split和mop为每个元素运行a然后对于数组中的每一项,我们实际上可以创建一个新的子网。所以你可以看到它变得更复杂了,你可以利用编程语言更多的功能。当然,这让你对未来有更多的可重用性,然后你可以开始引入多提供商工作流,这允许你在同一个工作流中混合你的Kubernetes和你的云,你的服务器列表和Docker容器。在这种情况下,我们有一个S3桶,它实际上是用来存储NGINX配置的。在那之后,我们实际上可以使用这个桶作为位置来下载NGINX配置,这是我们Kubernetes部署的一部分。因此,Pulumi将理解在Kubernetes部署中使用S3桶之前必须首先创建或首先存在S3桶。请注意,Kubernetes部署对象实际上非常严格地遵循Kubernetes的API规范。我们有spec,有选择器,有副本,有模板模板也有元数据和spec,等等。所以你可以真正开始声明和理解发生了什么,但在植物的范围内,验证发生了什么。然后团队开始理解,因为它是代码,我们可以吸收包,我们可以吸收目前生态系统中存在的库,以便能够创建更复杂的部署和应用程序。因此,对于金丝雀版本来说,通常会发生的事情是,你会将基础设施作为代码工具作为应用程序运行,然后检查应用程序指标,以确保一切都按预期工作,如果一切都按预期工作,那么你就可以继续部署的其余部分。

使用Pulumi,您实际上可以说,让我们创建第一组部署。让我们创建三个副本。然后让我们吞下Kubernetes,不好意思,是Prometheus SDK。

让我们对Prometheus SDK在一个名为check app metrics的函数中运行一些查询。一旦我们高兴地看到在预定的时间内一切都按预期工作,并且我们了解到我们的系统……按预期工作,然后我们继续部署到生产环境的其余部分。这给了我们一种能力,你可以在相同的流程中,在相同的部署中编码所有东西,确保你实际上有端到端的可见性,当然,你可以通过正确的日志记录和理解,开始找出部署哪里出了问题。

我们已经能够将这个概念更进一步。

我们不仅希望能够测试我们的应用程序是否正确部署,还希望能够测试我们的代码是否正确编写。这不仅仅是测试云是否创建了我们想要的资源,我们实际上希望能够测试基础设施或实际的基础设施代码本身。2022世界杯阿根廷预选赛赛程因此,如果我想编写一些代码来测试AWS EKS部署,那么会发生什么呢在今天的生态系统中,我必须写Pulumi代码或任何你实际创建基础设施的代码,然后我必须部署它,然后我必须在部署的环境中实际运行烟雾测试。

大约需要20分钟。当然,这是一个相当缓慢的时间作为一个开发,理解,在你必须修复任何东西之前,但当然,我们可以标记这些请求和响应到云。

我们知道你给亚马逊或Azure或谷歌一个格式良好的请求,它会做它应该做的事情,并返回一个众所周知的响应。所以让我们把这个标记掉,让我们真正地测试我们的基础设施代码的内部,为了真正地理解,你可以看到测试一个AWS实例实际上需要17毫秒,而不是在Amazon本身启动实际需要2分钟。当我们开始进行测试时,我们有了先进的工作流程,我们开始有了很多逻辑,我们希望能够创建和共享可重用的组件。这是非常重要的,因为我们开始走向自助部署,在你的组织内的自助基础设施。

你知道,我们已经听了很长一段时间关于神话平台,你知道,一个平台,人们实际上可以跨多云销售服务,甚至不关心内部发生了什么,他们只是说,给我一个Kubernetes集群,这就是我们今天要去的地方。

好的,在这个例子中,您将看到我们将所有的复杂性都打包起来创建一个Jenkins集群。所以你作为一个运营团队,或者一个运营人员会在Jenkins集群包中创建所有的逻辑,然后你会把它打包,放在pipey上,或者NPM上,或者新的Git上,或者使用一个go模块,真正需要使用它的团队可以下载它,或者用这种方式声明它,他们不需要了解里面发生了什么。所以作为一个应用程序,或者不好意思,作为一个基础设施开发人员,你可以为你的基础设施和你的公司,你的应用程序编码最佳的安全实践,开发人员将不得不使用那些你实际上必须看到的护栏。

我把这些看做是工程成熟的标志。

当你经历这些,你开始创造所有这些不同的东西。现在你不需要一步一步地走,你可以跳过这些步骤,你可以回到这些步骤,它可以是不同的顺序。但是理解这些步骤的存在是工程成熟的真正标志。但是有一件事,即使我们是成熟的工程师我们现在不太擅长的是秘密管理。很重要的一点是,我要告诉你,不管你喜不喜欢,有了Pulumi,当我们开始允许你创建基础设施时,我们会为你创建一个秘密提供者。所以它允许你配置你的秘密,不仅存储在…使用密码短语,当然,他们可以与亚马逊KMS, Azure密钥Vault GCP KMS和hashey Corp Vault集成。我们试图让你选择退出秘密管理,而不是选择进入秘密管理。

我认为这正是我们努力成为成熟工具并在这一领域向前发展的原因。所以对我们来说,我们试图看到Pulumi的力量或云工程师或生态系统中的云工程师快速交付。因此,创建可重用的基础设施和集成CI\CD,我们可以让您自信地部署、使用基础设施测试、使用组织策略进行安全操作,当然还可以轻松扩展,我们认为这是目前实现Kubernetes和无服务器的最简单方法。让我们来看看Pulumi是怎么做的。

我今天不会给你们看CLA,实际上我要给你们看的是我的一小段代码样本。所以如果我抓取立方体通信[句子听不清],你会看到我在这里有一个立方体配置,如果我立方体CTL,得到节点,你会看到我在这个演讲之前预先创建了一个Kubernetes集群。最后,如果我立方体控制,获得名称空间…

如果我能拼对的话,我道歉。您将看到系统中只有基本的名称空间,没有其他内容。Pulumi允许你做的其中一件事,我说过关于创建这些可重复使用和可重新共享的包,我的一个同事,Lee Briggs有实际上我创造了一个这样的例子,这是一个叫做策略的工具。这是我最喜欢向人们展示这方面的东西,因为策略实际上允许你用一个简单的CLA工具隐藏所有的复杂性。实际上,首先它会在你的本地机器上构建Docker并与之交互,然后它会创建一个ECR存储库,它会将Docker容器上传到ECR存储库,它会创建一个Kubernetes命名空间,它会创建一个Kubernetes部署,最后,它会创建一个Kubernetes服务。

当然,作为一名应用程序开发人员,我对Kubernetes了解不多,但我知道如何运行简单的工具来部署和测试我的代码是否能按预期工作。所以如果我运行命令ploy up…

首先,如果我向你们展示什么是策略,策略是一种CLA工具,你可以看到它是向上的,得到破坏和帮助。如果我说ploy up,那么ploy会在我的本地机器上,使用一个可用的Docker文件。如果你把它想象成我要做的应用程序,你会看到它首先会创建Docker映像。

然后它会创建ECR存储库,它会创建Kubernetes名称空间,它会创建Kubernetes服务与该名称空间一起,然后它将能够实际部署我创建的映像,这样我们就可以实际看到它部署时发生了什么。这只船需要100秒才能完成部署。这实际上是非常快的为了做,在这期间我能做的是我能快速地向你们展示所有的逻辑实际上是编码在它自己里面的。如果我去Pulumi,我说我的Pulumi程序。你可以做你能说看一个新的ECR存储库,它知道如何得到ECR的凭证存储库,它会创建一个新的码头工人形象,特定名称的码头工人的图像,并将上传图片,具体注册创建它,那么它将创建一个新的Kubernetes名称空间,它将创建一个新的Kubernetes部署和使用多维数据集配置本地机器,你不需要把它……当然,你可以把它传递到程序中,如果你想,如果你想控制开发者部署到哪里。但你可以看到它正在创建一个部署这个部署实际上是基于我之前创建的映像最后,它实际上把这个放在负载均衡器后面这样你就能得到一个服务。

最后我能得到的是这个特定的URL。当然,这是我的URL。如果我把这个推进去,你可以看到这是一个NGINX容器。你可以看到NGINX容器实际上在刷新它每次刷新的时候都会改变时间。最后,我们可以说策略get。

Ploy会向我们展示环境中的所有应用。我们可以看到它叫做terminalstarfrog如果我立方体CTL,得到命名空间,我可以看到有一个命名空间叫做terminalstarfrog。如果我立方体CTL,得到pods,命名空间就是你看到的那个最终的星形蛙。

你会看到它有我的应用程序的三个副本,它们都是负载平衡的,而且是隐藏的,为了简单起见,它被放在负载平衡器后面。所以我们允许人们创造这些最佳实践,这种能力是为了真正做到这一点。

我们在这里可以做的另一件事是,基于这个,我们的一个团队…我们的一个开发人员也创造了做类似事情的能力,但隐藏在电子应用程序后面,这只需要几秒钟就可以开始。但是,它通过创建一个工具来隐藏复杂性他能够给营销团队,营销团队可以指向一个本地网站,并将这个本地网站部署到云S3存储桶中,它只会返回一个URL,他们可以测试一些东西。我可以说,我的swapamp演示和这里的堆栈将是产品。URL的路径可以是机器中需要的任何路径。通过这样做,你就可以创建预览,更新和销毁它,等等。这给了你很大的灵活性你可以做很多事情。的最后一件事我可以告诉你,因为我的时间不多了,是我的同事凯末尔,实际上,他们创造了一个非常简单的UI,他们能够创造,像一个自助服务平台,和他们称之为Pulumipus自助服务平台,在那里你可以部署静态网站,虚拟机,或者你甚至可以做数据库或vpc这已经开始编码逻辑,隐藏它远离团队不需要关心它,正如我之前所说的,它非常简单,很容易制作。

我今天在这里展示的所有东西都在我们的开源存储库中,你可以去看看,你可以尝试一下。你可以点击github.com/pulumi/automationAPlexamples,你可以看到这里所有的例子都在上面。

这个特定的生态系统中最酷的一个例子,我们有一个例子如何使用Pulumi作为木星笔记本电脑的一部分,因为它的代码,并集成了代码,它允许你的灵活性,您可以开始这样做,这正是系统的类型,我们相信我们想给人们创造基础设施的方式,在某种程度上他们知道,在某种程度上,他们知道发生了什么。所以让我们给他们这样做的能力。所以对我们来说,这是一个我们开始为每个人构建云工程的例子。我们非常相信这是系统部署的下一个进化,我们给人们提供工具,让他们自己创建它,创建这些抽象层,创建这些可共享的包,我们对Pulumi生态系统非常兴奋,在那里人们创建和共享这些不同的东西。所以我想说非常感谢你们,我希望你们享受接下来的会议。

我的联系方式是Paul@Pulumi.com,或者在Twitter上@stack72,如果你有兴趣进一步讨论这个问题,我永远都会很高兴就这个问题多谈谈。

非常感谢。

要么快速释放,要么死亡