热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Istio***实践:在K8s上通过Istio服务网格进行灰度发布

Istio是什么?Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司。它提供了完整的非侵入式的微服务治理解决方

Istio是什么?

Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司。它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管理、网络连接以及安全管理等关键能力,无需修改任何代码就能够实现微服务的负载均衡,服务与服务之间的认证授权以及监控。从整个基础设施角度上看,可以将它理解为PaaS平台上的一个面向微服务管理平台的补充。

                                                               Istio架构示意图

 


Istio与Kubernetes

Kubernetes提供了部署、升级和有限的运行流量管理能力;利用service的机制来做服务注册和发现,转发,通过kubeproxy有一定的转发和负载均衡能力。但并不具备上层如熔断、限流降级、调用链治理等能力.

Istio则很好的补齐了k8s在微服务治理上的这部分能力,同时是基于k8s构建的,但不是像SpringCloud Netflix等完全重新做一套。Istio是谷歌微服务治理上的非常关键的一环。

 

Istio与k8s紧密结合,包括:Sicecar 运行在k8s pod里,作为一个proxy和业务容器部署在一起,部署过程对用户透明。Mesh中要求业务程序的运行感知不到sidecar的存在,基于k8sd的pod的设计这部分做的更彻底,对用户更透明,用户甚至感知不到部署sidecar的这个过程。试想如果是通过VM上部署一个agent,不会有这么方便。

Pilot中包含一个controller,通过list/watch kube-apiserver自动发现K8S中的services、endpoints。它通过在Kubernetes里面注册一个controller来监听事件,从而获取Service和Kubernetes的Endpoint以及Pod的关系,但是在转发层面,不再使用kube-proxy转发了,而是将这些映射关系转换成为pilot自己的转发模型,下发到envoy进行转发。

K8s编排容器服务已经成为一种事实上的标准;因为微服务与容器在轻量、快速部署运维等特征的匹配,微服务运行在容器中也正成为一种标准实践;对于云原生应用,采用Kubernetes构建微服务部署和集群管理能力,采用Istio构建服务治理能力,将逐渐成为应用微服务转型的标准配置。

 


自行管理Istio与CCE上使用Istio服务网格的对比

华为云 · 云容器引擎CCE(Cloud Container Engine)提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建:



  • 简单易用:自动化创建容器集群,一站式部署/运维容器应用,一键式滚动升级;

  • 高性能:自研高性能容器网络,秒级自动弹性伸缩,支持高性能裸金属容器私有集群;

  • 企业级:集群控制面HA和跨AZ高可用,容器应用优雅伸缩,安全下线,保障业务不掉线;

  • 开放兼容:兼容Kubernetes/Docker社区原生版本,CNCF认证的Kubernetes服务提供商,社区的主要贡献者;

 

下列从安装、运行管理和监控多维度对比自建Istio和华为云CCE上使用Istio的差别:


















































 


自建


华为云CCE


Istio包管理


用户自行下载和管理


用户不感知


运行配置


用户自行配置运行环境和依赖


用户不感知


Istio安装


用户自行探索和安装


用户不需要关注具体细节,创建集群时按需启用。


Sidecar注入


用户自行探索和开发、配置


用户不感知


Istio升级


用户自行探索、开发不影响业务的升级方案


提供完整解决方案,按需进行控制面和数据面的升级操作


应用调用链


用户自行探索、开发和安装、配置


对接华为云APM/AOM服务,提供请求调用链跟踪查看能力


应用拓扑


用户自行探索、开发和安装、配置


对接华为云APM/AOM服务,提供查看应用拓扑能力


性能监控


用户自行探索、开发和安装、配置


对接华为云APM/AOM服务,提供请求响应时延的实时性能状态监控


 


云原生应用在CCE上的部署、管理实践


云原生应用、云平台与微服务架构

云原生应用,是指原生为在云平台上部署运行而设计开发的应用。公平的说,大多数传统的应用,不做任何改动,都是可以在云平台运行起来的,只要云平台支持这个传统应用所运行的计算机架构和操作系统。只不过这种运行模式,仅仅是把虚拟机当物理机一样使用,不能够真正利用起来云平台的能力。

云计算平台的核心能力就是提供按需分配资源和弹性计算的能力,而云原生应用的设计理念就是让部署到云平台的应用能够利用云平台的能力实现按需使用计算资源和弹性伸缩。

微服务架构是实现企业分布式系统的一种架构模式,即将一个复杂的单体应用按照业务的限定上下文,分解成多个独立部署的组件。这些独立部署的组件,就称为微服务。而在谈论云原生应用与微服务架构关系的时候,根据上下文不同可以从两个角度去看。



  1. 宏观的云原生应用,即将整个分布式系统看作一个应用,这个角度下,微服务架构是实现云原生应用的一种架构模式;

  2. 微观的云原生应用,即每个微服务是一个应用,这种语境下,每个微服务要按照云原生应用的设计理念去设计(如我们所熟知的云原生12要素),才能真正实现微服务架构所要达到的目的,即让分布式系统具备按需使用计算资源和弹性伸缩的能力。

在华为云CCE容器服务中,我们将宏观的云原生应用,称之为“应用”,而将微观层面的云原生应用,称之为“组件“,用这两个概念来对分布式应用进行管理:

                                          图:应用、组件与工作负载的关系

 

 


在CCE上进行云原生应用管理的实践


创建Kubernetes集群

       在创建应用前,需要准备好一个Kubernetes集群(1.9及以上版本),并启用Istio服务网格治理。登录CCE控制台,在左侧导航栏中单击“资源管理 > 虚拟机集群”,在“虚拟机集群”界面,单击“创建Kubernetes集群”,按照向导式逐步配置:

 

图1:创建Kubernetes集群

 

图2:使能服务网格,一键式安装Istio并自动使能应用sidecar注入:

其他集群创建步骤、配置与已有CCE上创建虚拟机集群一致.


创建云原生应用

这里我们以Istio开源社区的bookinfo样例应用为例,其包含ProductPage、Reviews、Details、Ratings这4个微服务,拓扑结构以及网络访问信息如下:

 

在CCE左侧导航栏中选择“应用管理”,单击“创建应用”,选择“向导式创建” (后续将支持通过helm模板一键式创建微服务应用以及其流量策略配置,更方便管理),分三大块配置:应用基本信息、网格内组件定义、对外放开路由配置。



  1. 首先定义应用的基本信息:名称、选择所在集群和namespace:



  1. 第二步,点击添加组件,按照上方的应用拓扑和网络设计,把组件加入到服务网格:



  1. 添加ratings微服务组件(容器内监听端口为9080,开放至service mesh内部访问端口也配置为9080,后者可根据客户端配置自行调整)

1)配置组件基本信息:

2)选择负载镜像,并配置版本号为v1

 

3) 点击“下一步”,负载高级配置中可以选择配置升级策略、缩容策略、自定义监控等,我们这里不做配置,点击“添加“:

 

可以看到我们为bookinfo添加了一个微服务组件进网格

 

 



  1. 添加reviews微服务组件

参考上述添加ratings的步骤,添加reviews:

 



  1. 添加details微服务组件

参考上述添加组件步骤,添加details微服务组件:



  1. 添加productpage微服务组件



  1. 最后,配置应用对外开放的访问路由,从上方拓扑设计可知,productpage作为访问入口:

A、点击“添加应用访问方式“

B、选择开放至外部访问的组件,并配置开放端口

配置后的访问方式信息如下所示:

最后点击右下角“创建”,启动应用,在应用列表中可以看到新建的分布式微服务应用bookinfo及其包含的微服务组件:

 

通过应用开放的访问入口访问productpage:

 


在CCE上使用Istio进行灰度发布的实践


一键式在集群上启用Istio服务网格

集群下应用如果需要做微服务治理,只需要在创建集群时点击启用服务网格即可,不需要自行进行Istio镜像下载、yaml配置、安装、升级等与应用业务无关的复杂基础设施构建工作

 


开发打包新版本

下方我们以开发了一个新版本reviews微服务为例(初始容器镜像版本号为1.5.0),新版本镜像版本号为1.5.0-v2,并且已在本地开发机通过docker push上传至华为云容器镜像服务(SWR):

新版本在现在版本基础上增加对ratings微服务的调用,支持评分星星级别展示.

 

 


发布灰度版本并配置灰度策略

现在我们计划通过灰度发布的方式,平滑的在现网升级,在应用列表页面,展开bookinfo下的组件信息,选择reviews微服务组件的“添加灰度版本”:

 

启动灰度版本:配置灰度版本号v2,确认好镜像版本(系统会默认选择最新版本的镜像),点击“启动负载”即可启动灰度版本,容器高级配置已默认继承已有版本

观察灰度版本运行状态并配置灰度策略:按照比例分配灰度版本流量比例(这里以20%为例),观察负载启动成功后,点击“提交策略”:

回到组件列表可以看到,review微服务已处于灰度发布状态:

 

 

对review服务进行灰度发布前后的流量对比如下所示:

初始版本:

灰度状态:如图示,review v2版本调用ratings服务获取星级评价,并将20%流量分流至本版本上

访问productpage,可以看到部分请求可以显示星级评价,部分请求仍然是老版本的显示效果(即没有评星这个新特性),并且出现的比例接近1:4.

部分访问结果为原有的页面:

 

部分访问结果为带有星级评价特性的页面:

 

 

 

 


持续观测灰度版本运转状态,并进行流量切换

接下来,我们会持续观测灰度版本的运行状态,在确认业务处理、性能满足要求后,我们可以选择逐步调大灰度版本的流量比例,而后进一步将流量全部导流至灰度版本上:

 



  • 观察健康与性能状态:

点击CCE左侧导航栏“运维中心”进入AOM服务:

选择“指标”->“应用”菜单,持续观察review服务灰度版本v2的健康状态与性能状态:

 



  • 观察调用链以及请求响应时延:在CCE应用管理中,点击bookinfo应用,查看详情,可以看到CCE服务提供了请求调用链跟踪能力,能够实现分布式异常请求的快速定位(当前提供开源zipkin和grafana能力,后续将对接至华为云AOM服务提供相应能力)

 

可以看到V2版本运转正常,那么下一步我们将逐步扩大流量比,最后将流量全部导至灰度版本,在cce服务中,点击组件名称,进入组件详情页面,点击“接管所有流量”:

系统提示会将接管原有版本的所有流量,点击“确定“按钮:

 

现在所有访问reviews的流量都导向v2版本:

 

              访问productpage,所有的请求都会呈现星级评价特性:

 

最后,我们将原有老版本(V1)从平台移除:

点击确认后,可以看到该微服务只剩下v2版本在运转:


通过Istioctl工具进行更多微服务流量治理

         在上述规则的基础上,cce Istio服务网格还提供了Istioctl命令行工具,实现更全面的流量治理能力,如限流、熔断、连接池管理、会话保持等。进入”资源管理“->“虚拟机集群“,点击所要管理的集群,可以看到Istio命令行的下载和使用指导:

 


总结

菊厂云CCE容器引擎 + Istio + 应用运维AOM/APM +容器镜像服务 SWR,提供了完整的云原生应用从开发、部署、上线、监控的完整生命周期管理全栈服务,让企业上云更简单,运行更高效。

目前Istio服务网格能力已开放公测,可通过下方链接,快速申请公测,华为云容器服务的专家将全力为您服务,为您的成功保驾护航.

 

申请链接:

https://console.huaweicloud.com/cce2.0/?region=cn-north-1#/app/istio/istioPublicBeta



推荐阅读
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 提供:ZStack云计算原创2016-12-26张鑫讲师介绍张鑫ZStack总架构师、联合创始人《系统虚拟化》主要作者,曾任职Intel开源软件技术中心 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
koujj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有