实现无服务器化,在云上运行Artifactory和container

Guillaume Laforge | Google Cloud Platform开发者倡导者
Ayrat Khayretdinov | CNCF大使

在Google Cloud上,现代工作负载以无服务器的方式运行容器。

使用Cloud Run,您可以轻松地部署工作负载,并让它们透明地向上和向下扩展,以适应流量高峰和低需求。在本节中,我们将向您介绍Cloud Run的无服务器容器世界,如何使用Cloud build构建它们,我们将看到如何利用JFrog Artifactory来托管我们的容器工件。

在一系列现场演示中,我们将演示不同的Cloud Run用例。遗留的单体、机器学习API、Vault、微服务或基于事件的架构——Google Cloud Run和JFrog将覆盖你!

视频记录

大家好,欢迎来到这个主题为无服务器容器和与不同系列产品集成的会议。hth华体会最新官方网站我是Guilaume Laforge,我是Google Cloud的开发者倡导者,专注于无服务器技术。今天和我在一起的是我的同事Ayrat,他是谷歌的混合云专家,也是CNCF在谷歌开发者专家中的大使。最近你可能听说过,JFrog将其云DevOps产品扩展到Google cloud市场,用户可以轻松地将端到端JFrog DevOps平台从Google cloud部署到Google cloud上,以加速和保护他们的应用程序交付。这就是为什么我们想告诉你一些谷歌云技术的伟大结合,特别是无服务器技术,比如cloud Run,这就是我们要告诉你的产品,以及JFrog的酷产品。hth华体会最新官方网站

在进一步讨论之前,让我们定义一下无服务器是什么。有两种方式可以考虑无服务器的概念。有一个操作模型和一个编程模型。从操作的角度来看,作为用户,您正在使用完全托管的环境,您不必处理硬件及其工作、操作系统等问题。所以安全方面也会考虑到。

例如,为已知漏洞应用补丁。这是云提供商,谷歌云,它将在幕后处理无服务器产品。hth华体会最新官方网站无服务器的一个关键特征就是只为使用付费的模式。所以成本与使用量成正比。

不堵车的时候,你可以付很多钱,零。基础设施可扩展,您的服务可上下浮动,根据需要透明。因此,从编程的角度来看,您倾向于编写更小粒度的服务,而不是更大的单体。

您经常编写事件驱动的方法,对来自系统或云的各种事件作出反应。而且,由于您的服务可以缩小到零,因此您还应该使用无状态方法进行某种程度上的防御性编程,因为一旦运行工作负载的实例被关闭,您永远不知道资源将会发生什么。2022世界杯阿根廷预选赛赛程因此,如果你看看谷歌云提供的一系列产品,你会发现有用于虚拟机的计算引擎,有用hth华体会最新官方网站于编排容器的Kubernetes引擎,在无服务器领域,你会发现诸如用于容器的Cloud run,用于web应用程序的App Engine,用于移动后端,以及用于业务逻辑的小型大脑功能的Cloud Functions等产品。

今天,我们将关注Cloud Run,它允许您以无服务器的方式部署容器。那么什么是Cloud Run呢?Cloud Run是一个无服务器平台,允许您在完全托管的环境中部署容器化的工作负载。所以你可以使用你喜欢的编程语言。所以这不是一个有限的选择。

你可以使用任何你想要的语言,使用你想要的库、二进制文件等等。所有的基础设施,扩展方面,在那个层面上的一切都是由平台为你完成的。你会得到很好的开发者体验,因为你专注于你的应用,它的业务逻辑,它的代码,而不是设置组成项目的所有东西。因此,容器技术对于可移植性非常有用。

但如果你想让整个缩放和管理方面都是可移植的,你希望整个平台都是可移植的。这就是为什么《Cloud Run》是基于加拿大的开源标准而开发的。

多亏了加拿大标准,您可以在完全托管的Cloud run服务中运行容器化的应用程序,这些应用程序可能会运行在其他云提供商的混合云平台上,或者在任何安装了加拿大原语的Kubernetes集群上把它锁在谷歌云平台上。

由于云原生,您可以选择运行和扩展容器化工作负载。在Cloud Run中,正如我所说,你不局限于使用特定的语言、堆栈或框架。有了容器,您可以使用任何语言、任何库、依赖任何二进制文件,并利用丰富的基础映像生态系统。因此,在Cloud Run上,您获得了容器的灵活性,但与此同时,您获得了无服务器计算平台的所有好处和速度。

您的容器化工作负载应该遵循一些契约,比如听在端口环境变量的Localhost上,它应该不会花费太多时间来准备服务第一个请求。服务请求也不应该花太长时间,对吧?也可以以无状态的方式编程。

例如,文件系统刚好在内存中。因此,您永远无法确定文件系统上的内容将用于下一个传入请求的其余部分。

还要避免后台活动,因为运行工作负载的实例可能会在另一个实例启动之前关闭。因此,不再接收任何请求的线程将在CPU级别上被限制,甚至在完成请求后一段时间内被杀死。所以后台活动也会被杀死,不一定能及时完成。

在资源方面,你有一到四个2022世界杯阿根廷预选赛赛程v - cpu,从256兆内存到8兆内存,默认情况下容器可以运行80个并发请求。默认情况下可以分离多达100个容器。但它是可配置的,你可以增加这些数字。

在谈到运营模式时,我们说Cloud Run是一种按使用付费的模式。所以你使用的CPU越多,你使用的内存越多,你得到的请求就越多,成本将与之成正比。它以100毫秒的增量计费。所以它很细粒化。如果请求只需要100毫秒就能完成,你就不用花一秒钟的时间?

此外,计费时间不只是针对每个请求。假设你有两个并发请求,你会为执行付费,两个请求的总执行,不,它不是这样工作的,你实际上是从第一个并发请求开始到最后一个请求执行结束。这在定价方面很有趣。当然,一定要利用并发性。

说到并发,就像你在之前的图表中看到的那样,不像其他一些无服务器平台,比如我们的竞争对手,甚至是Cloud Functions,它们的并发级别是1,这意味着一个实例一次只能处理一个请求,Cloud Run可以接收80到250个并发请求,如果你这样配置的话。因此,这也有助于应对传入的流量高峰,并在没有太多冷启动的情况下优雅地扩展。

这对于无服务器平台来说是非常重要的。好的,还有什么?这已经很多了,但还有更多。所以《Cloud Run》可以在世界上许多地区使用。而且,如果您将Cloud Run与Google Cloud负载均衡器配对,您可以公开一个全局端点,将用户请求路由到最近的区域,因此它有助于对区域中断具有弹性。

它有助于以尽可能小的延迟为用户请求提供服务,因为用户将被路由到最近区域中最近的服务实例。

你可以利用像云CDN这样的东西来缓存资产,以减少负载对您的服务和提高性能。您还可以集成用于DDoS保护的云盔甲,以便根据纯IP地址或地理位置过滤流量,并定义其他防火墙规则。

就Cloud Run服务的部署而言,您可以创建服务的新版本。你可以使用那个机制来做各种部署场景。

例如,在蓝绿部署、金丝雀或AB测试中,您可以定义几个版本之间的流量百分比,甚至可以使用标签轻松识别服务并将流量路由到它们,因此它非常有效。您可以访问谷歌云VPC和其他通过VPC提供Google云服务,例如内存存储redis或memcached。或者,如果您想访问谷歌计算引擎上的虚拟机,您可以利用VPC访问。

还可以跨项目共享VPC。除了Cloud Run或Cloud Run的补充之外,如果你需要协调各种Cloud Run服务,甚至是第三方api,你可以使用Cloud工作流。它也是完全托管的服务,也是无服务器的。你可以很容易地链接服务调用,处理重试请求策略,它可以通过驱动的方法真正理清微服务的意大利面和它们之间的协调。所以这也是一个很好的方法,特别是如果你能够将你的业务流程定义为流程图,比如说,你可以设计或将该流程图实现为工作流,以便协调应该一起完成某项工作的一系列服务。我提到过,寒冷开始得更早。

还有一件事对避免冷启动很有用,那就是通过定义准备好服务的最小实例数量,这些实例是热的,准备好服务新的传入请求。所以如果你看蓝色的流量,对于绿线虚线以下的部分,通常你会有一个冷启动的请求在那些时期到来。

但是使用最小实例数,您可以确保总是有一个实例准备好为新传入的请求提供服务,即使有没有保持实例运行的流量。因此,避免大多数(如果不是全部)应用程序的冷启动是非常有用的。

还有什么?优雅的实例终止。当您的恢复服务在流量高峰后缩减规模时,容器实例将被关闭。但是,由于病态术语信号,您可以通过通知实例终止来优雅地做到这一点。它为您提供了更多的时间来清理可能仍然打开的资源,例如数据库连接或清理一些临时资源或缓存数据。2022世界杯阿根廷预选赛赛程除了处理通常的HTTP请求,这就是Cloud Run的目的,你还可以实现GRPC api之类的东西。你可以调用GRPC api或者实现GRPC api。我的意思是成为GRPC api的服务器。

除了GRPC,还有服务器端流媒体。例如,你可以做…正如我所说的GRPC,你也可以做GRPC流。

你也可以使用服务器,甚至,你可以使用HTTP 2流和web套接字来实现真正的实时和交互式应用。哇,很多东西啊,对吧?所以这是《Cloud Run》为开发者和用户提供的鸟瞰图或蛙瞰图。现在,说得够多了,是时候进行实际操作演示了,我的同事Aryat将向您展示与Artifactory和其他很酷的JFrog集成的集成。非常感谢大家的关注。轮到你了,艾拉特。谢谢你!

谢谢Guilaume。

嗨,我叫阿奇。我是来自加拿大的认知大使,在谷歌云工作。很高兴来到沼泽2021,与这个神奇的社区分享一些令人兴奋的技术。所以在覆盖范围之外那么,什么是Cloud Run及其功能呢?现在让我向您展示一些演示,介绍如何在无服务器Cloud Run上轻松部署应用程序,以及JFrog技术如何在这方面提供帮助。首先,我将在Cloud Run上部署一个简单的应用程序,并展示Cloud Run如何处理流量并利用并发性。我现在在Google Cloud Console Cloud Run菜单上。我要创建一个新服务。我要给它起个好听的名字。现在我可以选择提供Docker镜像或提供我的GitHub存储库。所以如果你有你的代码库,你想构建它,即使没有Docker文件,云运行,使用认知构建包自动构建你的映像,并部署到象限。但在我这里,我将使用我自己已经为这个演示准备好的图像。这里,你可以有一些高级设置如果你想玩,你可以设置你的内存和CPU等等。在我的例子中,我将指定并发性等于1。

您可以配置变量、秘密、连接、数据库等等,以及一些安全特性,但我们只需要继续部署这个应用程序。你可以看到应用程序正在启动和运行。

我们正在为你的指标和日志提供一些视图。好了,应用程序已经部署好了。我们可以看到端点在这里使用HTTPS。因此,我们将自动提供实用程序、证书验证,并启动并运行应用程序。太好了。然而,这更像是向您展示交通是如何工作的。所以我在这里有一个可视化的场景,在这个服务的背后发生了什么。正如你所看到的,现在它提供零流量,这意味着你现在不需要为任何东西付费。

现在,我将使用一个Linux实用程序,我将发送一些突发负载,假设是10秒,我们将有每秒20个请求。让我们看看我们的Cloud Run服务将如何运行。因此,您可以看到我们的服务立即扩展到30个容器,然后立即缩小到零。这就是你花钱买的东西。我认为这很棒。

你可以想想你今天有多少应用程序你可能在Kubernetes上运行,或者在prem上,它们坐在那里什么都不做,你为此付费,对吧?

Cloud Run可以让你在没有流量的情况下将游戏规模降至零。当你遇到突发的流量时,它会迅速扩展系统,你知道,没有任何数据包丢失。这是缩放到0。至于流量行为,我想给你们看另一个很好的特性,叫做并发。实际上,并发是Cloud Run的一个非常独特的功能,Kubernetes上不存在。有了这个特性,您就可以在同一个容器中处理多个并发请求。因此,你可以节省一些成本。现在我会产生一些额外的负荷。这次,我要做一个3分钟的加载。我将创建一个应用程序的新版本。这里,我将指定并发选项卡,我将添加一个新变量来改变应用程序的颜色。所以它是绿色的,就像JFrog一样。我要取消选中这个冲浪百分比流量。那么现在会发生什么呢,应用程序将部署我的应用程序的新版本。我们应该在可视化中看到,我将有一个绿色的新容器,绿色的新应用程序。让我转移一些流量。在这种情况下,我将把流量对半分配。我们来看看我们的可视化。

好吧。从图中可以看出,对于绿色应用程序,我们拥有的并发性越高,在这种情况下容器越少,我们只需要运行5分钟,因此我们可以节省成本。

不使用并发的蓝色应用程序目前需要使用25个容器,而并发只使用5个因此这节省了相当可观的成本,对吧?好吧,我希望你现在可以了知道如何使用cloudron。也许你知道了,你马上就想自己试试。但你知道,无论你是在构建一个HTTP web应用程序,还是试图使用WebSockets构建一个多人游戏,也许你想要提供一些api,比如机器学习,或者做数据处理,Cloud Run都能帮到你。

还有一些领域我们仍在不断发展,所以Cloud Run对于运行有状态工作负载来说仍然不是很好。但是,我们可以为您提供连接到不同云服务并在那里保存状态的功能。好吧,虽然谷歌云提供了很多解决方案,来构建软件在GCP上使用Cloud Run的供应链,如Google Container Registry,云构建,我们生活在一个拥抱混合和多云方法的世界。因此,许多公司仍然在本地运行,或者在不同的云提供商上运行,或者同时在多云上运行,他们正在解决需要部署应用程序的挑战。理想情况下,他们希望以同样的方式来做这件事。这就是为什么我们与JFrog合作,做混合多云CI\CD解决方案,Anthos将Gk部署在本地、Azure、亚马逊或环境上,并将它们连接到谷歌云控制台。然后JFrog负责CI\CD部分。在下一个演示中,我们将进入现实生活中的例子,并向你们展示一些实现那个用例的工作流。

我们将使用的最好的工具是Anthos平台,它将在GCP上为Anthos部署Cloud Run。

对于自动化的软件交付,我们将使用JFrog云平台和GCP。

我们将为CI和CD部分利用不同的管道。我们将使用JFrog Artifactory来存储工件和Docker映像。最后,我们要用j来表示X射线,以确保我们的代码是安全完整的。

基本用例是,开发人员向GitHub存储库发出pull请求,触发管道。在这种情况下,我们使用JFrog管道,它将运行代码质量,构建我们的映像,扫描它,然后将其推送到JFrog Artifactory。最后,JFrog管道启动,我们将能够推出我们的图像到Anthos的前景。至于我们的演示应用程序,这次我们将使用微服务,它将是一个在线商店应用程序。

我们有不同的组成部分,一些现金,一些前端。让我们转到Google Cloud Console。我们可以看到实际上已经部署的服务。所以我们使用的不同之处在于它运行在完全托管的Cloud Run平台上,而这个微服务应用程序部署在Cloud Run平台上。

正如我们在这里看到的,有一些集群。让我们进入前端,看看它是什么样子。

应用程序已经启动并运行。但由于我们在不同的会议上,我们对青蛙自行车的需求很大。因此,让我们尝试更新我们的微服务应用程序,并在这里获得一些JFrog自行车。因此,要更改这段代码,我们实际上需要查看源代码。

我们可以在这里看到所有微服务的源代码,到前端,我们可以看到它是用go Lang编写的我们的图像存储在这里的某个地方。所以我们需要改变这个形象,把它换成青蛙自行车。

让我们开始吧。

复制……我们需要一些代码。我们有了储存库,我们要确保我们有展位信息,这样我们就可以知道我们在这里做什么。我们想把它推送到我们的GitHub仓库。

我在这里使用基本的工作流程,没有拉取请求,因为我几乎是一个人在这里。我们现在应该看到的是管道应该启动了。

检查JFrog…这是运行在GCP上的JFrog平台。我们这里有人工管道。让我们来看看管道。这里我们有一些积分。因此,对于集成,我们使用Artifactory集成,以确保我们可以将代码和映像部署到JFrog Artifactory。

我们正在使用谷歌云集成来创建我们的服务帐户和连接以部署代码。我们还集成了GitHub,因为我们想确保在pull请求时,我们的代码将被部署。现在让我们检查管道本身。

我们可以看到我们的管道启动了,它正在处理。这里有一个很好的UI显示管道的样子。我们在这里有多个步骤,第一步是构建Docker映像,然后它会把它推送到我们的Artifactory,所以它也会扫描我们的映像如果扫描成功,它就会被部署在这里。

通常,你可以有多个步骤扫描然后部署。在我们的例子中,为了演示的目的,我们使用了这两个并行的步骤来加快速度。

让我们看看管道的内部,看看事情是如何进行的。现在,我们的Docker构建开始了。我们可以看到,在这里的步骤中,它实际上正在将我们的图像推送到。实际上,这是在塑造我们的形象。下一步就是推了。所以我们要等一段时间,看看情况如何发展。

与此同时,我可以做的是,实际上,我可以跳转到管道的源代码存储库。这里,我们定义了一些资源。2022世界杯阿根廷预选赛赛程所以我们提供了GitHub存储库集成和构建。

然后是我们刚刚研究过的管道的步骤。因此,我们正在构建前端Docker映像。然后我们把它推送到Docker本地,这是Artifactory仓库,然后我们执行x射线扫描。我认为最后一部分,对我来说很有趣的是,现在,可能没有与Google Cloud控制台的直接集成,所以我们在这里使用的是,我们实际上部署了Cloud SDK使用Google Cloud命令行。我们登录到谷歌云,然后我们可以执行部署步骤。

还有什么?实际上,有些东西在这里。所以实际上不部署这个应用程序,我们使用这个清单,它实际上不是Kubernetes清单,它实际上是[听不清]清单,它比Kubernetes清单小得多。

这允许您声明式地部署应用程序。这很好,因为现在有了Cloud Run,你有清单你可以在Cloud Run上部署完全管理的,或者在Cloud Run上部署其他的。因此,它提供了代码可移植性和零锁定,因为[听不清]可以在Cloud run或任何具有k native的Kubernetes集群上运行。让我们回到管道,看看它是如何进行的。我们完成了构建,推送部分也完成了。我们来检查一下push。

所以我们是来宣传你的形象的。然后是x射线扫描部分最后一部分是我们拉出谷歌云SDK的地方。这样我们就可以为部署的云执行命令了。它现在正在运行。希望它是完整的。例子很少。

好吧。给,再等几秒钟。然后看看我们的新版本会自动启动什么。是的,它刚刚被部署。让我们看看,是的,管道已经完全启动并运行了。让我们去看看应用程序的新版本。我要打开隐身窗口看看它是如何部署的。

是的,我们的前车也开动了。在我看来很不错。我们要回到幻灯片上来结束我们的演讲。

非常感谢。我希望你喜欢我们的演示。

希望你喜欢2021年的沼泽。在这里,你可以找到一些很棒的云跑链接,可以帮助你开始。

请跟吉劳姆和我发推特告诉我们你有问题吗?谢谢你!

再见。

要么释放,要么死亡