云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云解析_云服务器方案_免费

小七 141 0

利用领事服务网部署金丝雀

这是该博客系列的第四篇文章,重点介绍了领事服务网的新功能。上个月在HashiConf EU上我们发布了Consul 1.6.0。此版本提供了一组新的第7层流量管理功能,包括L7流量拆分,它支持canary服务部署。这篇博客文章将指导您完成在两个上游服务之间分流流量的必要步骤。»金丝雀部署金丝雀部署是一种在避免停机的同时部署新版本服务的技术。在canary部署期间,您可以将一小部分流量转移到服务的新版本,同时监视其行为。最初,您向新服务发送尽可能少的流量,同时仍然生成有意义的性能数据。当你对新版本有信心时,你会慢慢增加它处理的流量比例。最终,canary版本处理100%的所有流量,此时旧版本可以完全弃用,然后从环境中删除。新版本的服务被称为金丝雀版本,作为对"煤矿中的金丝雀"的引用。要确定新服务的正确功能,必须在应用程序中具有可观察性。度量和跟踪数据将允许您确定新版本是否按预期工作,并且不会引发错误。与Blue/Green部署不同,Blue/Green部署需要一步到位地转换到服务的新版本,而Canary部署则采用更为渐进的方法,这有助于防止只在特定负载下出现的服务错误。»先决条件本指南中的步骤使用consur的服务网格功能consur Connect。如果您还不熟悉它,您可以通过以下指南了解更多信息。我们为这里描述的步骤创建了一个演示环境。环境依赖于Docker和Docker-Compose。如果您还没有Docker和Docker Compose,可以从Docker的安装页面进行安装。»环境您将使用的演示架构由3个服务组成:一个公共Web服务、两个版本的API服务和一个Consul服务器。这些服务构成了一个两层的应用程序;Web服务接受传入的流量并对API服务进行上游调用。您将设想API服务的版本1已经在生产和处理流量中运行,并且版本2包含一些您希望在canary部署中发布的更改。要部署API服务的版本2,您将:在生产环境中启动v2 API服务的实例。设置流量分割,以确保v2一开始不会收到任何流量。注册v2以便领事可以向它发送流量。缓慢地将流量切换到v2,并从v1开始,直到新版本处理所有流量。»启动演示环境首先克隆包含此博客文章源代码和示例的repo。$git克隆git@github.com:hashicorp/consur演示流量-拆分.git将目录切换到克隆文件夹中,使用docker compose启动演示环境。此命令将在前台运行,因此您需要在运行后打开一个新的终端窗口。$docker合成正在创建consur-demo-traffic-splitting\u api v1\u 1。。。完成正在创建consur-demo-traffic-splitting-consur\u 1。。。完成正在创建consur-demo-traffic-splitting_web_1。。。完成正在创建consur-demo-traffic-splitting_-web_-jean_-1。。。完成正在创建consur-demo-traffic-splitting\u api_proxy_v1_1。。。完成附在consur-demo-traffic-splitting_-1、consul-demo-traffic-splitting_web_1、consul-demo-traffic-splitting_-api_v1_1、consul-demo-traffic-splitting_-web_特使_1、consul-demo-traffic-splitting_-api_proxy_v1_1以下服务将在您的本地Docker环境中自动启动并向consur注册。领事服务器使用特使侧车的Web服务API服务版本1,带特使侧车您可以在consu config文件夹中看到consur的配置,在service config文件夹中可以看到服务定义。一旦一切都启动并运行,您就可以查看注册服务的运行状况,方法是查看:8500。所有的医疗机构都应该通过健康检查。卷曲Web端点以确保整个应用程序正在运行。您将看到Web服务从API服务的版本1获得响应。$卷曲本地主机:9090你好,世界###上游数据:本地主机:9091###服务V1%最初,您将希望将API服务的版本2部署到生产环境中,而不向其发送任何流量,以确保它在新环境中表现良好。阻止流量流向版本2当您注册它时,您将预先设置一个流量拆分,以将100%的流量发送到API服务的版本1,0%发送到尚未部署的版本2。拆分流量利用consur服务网格中内置的新的第7层功能。»配置流量拆分流量分割使用配置条目(Consul 1.5和1.6中引入)来集中配置服务和特使代理。要启用流量拆分,需要创建三个配置条目:API服务的服务默认设置为HTTP协议。服务拆分器,定义服务子集之间的通信量拆分。定义哪些服务实例是版本1和版本2的服务解析程序。»配置服务默认值流量拆分要求上游应用程序使用HTTP,因为拆分发生在第7层(基于请求的基础上)。您将通过在API服务的"服务默认值"配置项中设置协议,告诉consur您的上游服务使用HTTP。这个配置已经在您的演示环境中的l7配置/api服务中_默认值.json. 看起来像这样。{"kind":"服务默认值","name":"api","协议":"http"}kind字段表示您正在定义的配置条目的类型;在本例中,服务默认值。name字段定义服务默认配置项应用于哪个服务。(此字段的值必须与在consur中注册的服务的名称匹配,在本例中为api)。要应用配置,您可以使用convercli或API。在本例中,我们将使用HTTP API的配置入口端点,该端点位于:8500/v1/配置。要应用配置,请在以下命令中使用PUT操作。$卷曲本地主机:8500/v1/config-XPUT-d@l7配置/api服务_默认值.json真实百分比有关服务默认配置项的更多信息,请参阅文档»配置服务解析程序您需要添加的下一个配置条目是服务解析器,它允许您定义conver的服务发现如何为给定的服务名称选择服务实例。服务解析程序允许您根据服务注册中的信息筛选服务子集。在本例中,我们将根据API服务注册的元数据为其定义子集"v1"和"v2"。演示中的API服务版本1已注册为标记v1和服务元数据版本:1。当您注册版本2时,您将给它标记v2和元数据版本:2。name字段设置为consur服务目录中服务的名称。服务解析程序已经在演示环境中的l7_config/api_service_解析器.json看起来像这样。{"kind":"服务解析程序","name":"api","子集":{"v1":{"过滤器":服务.Meta.version==1英寸},"v2":{"过滤器":服务.Meta.version==2英寸}}}使用上一个示例中使用的相同方法应用服务解析器配置条目。$卷曲本地主机:8500/v1/config-XPUT-d@l7配置/api服务_解析器.json真实百分比有关服务解析器的更多信息,请参阅文档。»配置服务拆分-100%的流量到版本1下一步,您将创建一个配置条目,该条目将流量百分比拆分到您刚刚定义的上游服务的子集。最初,您希望拆分器将所有流量发送到上游服务的v1,这样可以防止在注册时将任何流量发送到v2。在生产场景中,这将为您提供时间,确保服务的v2在发送任何实际流量之前按预期启动并运行。服务拆分的配置条目是一种服务拆分器。其名称指定拆分器将对哪个服务执行操作。splits字段使用一个数组来定义不同的拆分;在本例中,只有两个拆分;但是,可以配置更复杂的场景。每个拆分都有一个权重,它定义了要分配给每个服务子集的流量百分比。所有分割的总重量必须等于100。对于我们的初始分割,我们将配置所有流量以定向到服务子集v1。服务拆分器配置已经存在于演示环境中的l7_config/api_service_splitter_100_0.json,如下所示。{"kind":"服务拆分器","name":"api","分割":[{"重量":100,"service_subset":"v1"},{"重量":0,"服务子集":"v2"}]}通过向httpapi的consur配置条目端点发出另一个PUT请求来应用这个配置条目。$卷曲本地主机:8500/v1/config-XPUT-d@l7_config/api_服务_splitter_100_0.json真实百分比这个场景是我们的Canary部署的第一个阶段;现在您可以启动服务的新版本,而不必立即被上游负载平衡组使用。»启动并注册API服务版本2接下来,您将启动API服务的canary版本(版本2),并使用配置项中用于解析和拆分的设置对其进行注册。启动服务,注册它,并使用以下命令启动它的connect sidebar