• [大咖交流] Istio最佳实践:在Kubernetes上通过Istio服务网格进行灰度发布
    Istio是什么?Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司。它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管理、网络连接以及安全管理等关键能力,无需修改任何代码就能够实现微服务的负载均衡,服务与服务之间的认证授权以及监控。从整个基础设施角度上看,可以将它理解为PaaS平台上的一个面向微服务管理平台的补充。Istio架构示意图Istio与KubernetesKubernetes提供了部署、升级和有限的运行流量管理能力;利用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的差别:自建华为云CCEIstio包管理用户自行下载和管理用户不感知运行配置用户自行配置运行环境和依赖用户不感知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:2、 第二步,点击添加组件,按照上方的应用拓扑和网络设计,把组件加入到服务网格:A、添加ratings微服务组件(容器内监听端口为9080,开放至service mesh内部访问端口也配置为9080,后者可根据客户端配置自行调整)1)配置组件基本信息:2)选择负载镜像,并配置版本号为v13) 点击“下一步”,负载高级配置中可以选择配置升级策略、缩容策略、自定义监控等,我们这里不做配置,点击“添加“:可以看到我们为bookinfo添加了一个微服务组件进网格B、 添加reviews微服务组件参考上述添加ratings的步骤,添加reviews:C、 添加details微服务组件参考上述添加组件步骤,添加details微服务组件:D、                添加productpage微服务组件3、 最后,配置应用对外开放的访问路由,从上方拓扑设计可知,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/meshList
  • 关于Istio v1.0,你需要知道的事儿
    关于Istio v1.0,你需要知道的事儿         千呼万唤,根据社区最新的计划, Istio 1.0版本将于7月20日发布。本次1.0版本紧随6月1号的第一个LTS的0.8版本后,不到两个月的时间,并未做大的特性开发,主要还是集中在:提供了稳定新的流量管理模型;改进了调试功能;增强了性能和扩展性等。 对于Istio v1.0是否能用于生产环境以及需要考虑哪些问题,社区将会发布SRE指南来回答,敬请期待!主要功能         Istio的feature主要分布在流量管理、可视化、安全和核心等几个领域,每个特性都需要通过自身的生命周期进行交付(dev/alpha/beta/stable)。一般生产可以使用beta和stable阶段的组件,而测试使用alpha阶段的组件。目前这些领域的大部分关键功能进入 了beta 或者stable的阶段。下表列出了这些特性(详细参照Istio.io 官方网站):DomainFeaturePhaseTraffic managementProtocols: HTTP 1.1BetaMemquota   Implementation and IntegrationStableObservabilityPrometheus   IntegrationBetaLocal Logging   (STDIO)StableStatsd IntegrationStableService Dashboard   in GrafanaBetaIstio Component   Dashboard in GrafanaBetaSecurityDeny CheckerStableList CheckerStableKubernetes: Service   Credential DistributionStablePluggable Key/Cert   Support for Istio CAStableService-to-service   mutual TLSStableVM: Service   Credential DistributionBetaCoreKubernetes: Envoy   Installation and Traffic InterceptionBetaKubernetes: Istio   Control Plane InstallationBetaKubernetes: Istio   Control Plane UpgradeBetaPilot Integration   into Kubernetes Service DiscoveryStableAttribute   Expression LanguageStableMixer Adapter   Authoring ModelStableHelmBeta1.0 版本内容接下来让我们看看Istio 1.0版本有哪些方便的改进:稳定新的流量管理模型        Istio v0.8引入了新的配置资源来控制进入网格、网格内部和离开网格的流量路由。包括:Gateway、VirtualService、DestinationRule和ServiceEntry。其中,VirtualService、DestinationRule和ServiceEntry分别替换了原API中的RouteRule、DestinationPolicy和EgressRule;Gateway用于对流入专用中间设备的流量进行建模。       但v0.8在新的流量模型上还有一些不足,某些功能需要补齐,例如v0.8不能支持networking/v1alpa3的TCP/TLS的路由;两个版本存在时设置v1版本权重为0、v2版本为100策略不生效等。这些问题都将在v1.0发布时解决。调试功能的改进        目前调试中如果需要查看sidecar的实时配置,需要进入相应的容器内调用envoy admin API去获取这些信息。v1.0用户可以直接使用istioctl进行调试。例如istioctl proxy-status可以查看envoy和Pilot的配置差异(将支持clusters,listeners,routes和endpoints): istioctl proxy-config可以得到envoy的clusters/listeners/routes的总览和dump信息:性能和可扩展性的增强         针对v0.8的性能问题,社区做了一些改进,进一步识别并较少开销。         插件中集成了可观测性分析服务Kiali,丰富和提高对服务的可视化和监控能力, 利用Kiali可以看到service mesh的拓扑(包括熔断和请求速率),调用链等信息(详情参考https://github.com/kiali/kiali)。  资源的校验       之前的 Istio 版本中,只能通过 istioctl 验证 Istio 相关 CRD 的有效性,Galley为Istio提供了配置管理服务,提供在k8s服务端验证Istio的CRD 资源的合法性的方法,校验目标包含 Pilot(例如 destinationpolicies 和 routerules) 和 Mixer(例如 memquotas 和 prometheuses)两类 CRD。 v1.0开放的Galley接口:galley probe、galley server、galley validator和version等。文档和示例的改进       文档方面包括Istio官网的对中文的支持,Istio首页和各章节的排版改进,扩展troubleshooting 指南等。 Samples增加了websockets app、health check等样例,改进上手体验。其它方面•             1.0要求使用Kubernetes1.9 或更高版本•             使能Pilot decomposition的API•             各种bug的修复生产案例使用Istio的生产案例主要有Weather Company和American Airline。其中,Weather Company是一个销售和传播天气数据的平台,有40个后端服务,每秒可处理400K请求。Weather Company使用Istio已有8个月,目前支持Istio v0.8.0.关于Weather Company使用Istio的详情可以参考视频https://www.youtube.com/watch?v=0fKi3NeCsSE          目前基于release-1.0分支的每日构建版本可以在http://bit.do/istio10-latest-daily获取。我们期待Istio v1.0在本月的发布,届时将会带来一个更稳定,更易用的Istio来管理和监控我们的服务。 
  • Istio最佳实践:在Kubernetes上通过Istio服务网格进行灰度发布
    Istio是什么?Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司。它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管理、网络连接以及安全管理等关键能力,无需修改任何代码就能够实现微服务的负载均衡,服务与服务之间的认证授权以及监控。从整个基础设施角度上看,可以将它理解为PaaS平台上的一个面向微服务管理平台的补充。                                                               Istio架构示意图Istio与KubernetesKubernetes提供了部署、升级和有限的运行流量管理能力;利用service的机制来做服务注册和发现,转发,通过kubeproxy有一定的转发和负载均衡能力。但并不具备上层如熔断、限流降级、调用链治理等能力. Istio则很好的补齐了k8s在微服务治理上的这部分能力,同时是基于k8s构建的,但不是像SpringCloud Netflix等完全重新做一套。Istio是谷歌微服务治理上的非常关键的一环。  自建与公有云上使用Istio的对比目前业界大部分云平台上所提供的Istio能力均需要自己负载Istio包的下载、配置、安装等,还是比较费劲的。不过华为云CCE服务这里深度集成了Istio服务网格,个人感觉使用上还是方便很多的,简单对比了下:自建华为云CCEIstio包管理用户自行下载和管理用户不感知运行配置用户自行配置运行环境和依赖用户不感知Istio安装用户自行探索和安装用户不需要关注具体细节,创建集群时按需启用。Sidecar注入用户自行探索和开发、配置用户不感知Istio升级用户自行探索、开发不影响业务的升级方案提供完整解决方案,按需进行控制面和数据面的升级操作应用调用链用户自行探索、开发和安装、配置对接华为云APM/AOM服务,提供请求调用链跟踪查看能力应用拓扑用户自行探索、开发和安装、配置对接华为云APM/AOM服务,提供查看应用拓扑能力性能监控用户自行探索、开发和安装、配置对接华为云APM/AOM服务,提供请求响应时延的实时性能状态监控流量治理需要自行编写配置文件提供界面进行流量和发布的管理 云原生应用的部署、管理实践云原生应用、云平台与微服务架构云原生应用,是指原生为在云平台上部署运行而设计开发的应用。公平的说,大多数传统的应用,不做任何改动,都是可以在云平台运行起来的,只要云平台支持这个传统应用所运行的计算机架构和操作系统。只不过这种运行模式,仅仅是把虚拟机当物理机一样使用,不能够真正利用起来云平台的能力。云计算平台的核心能力就是提供按需分配资源和弹性计算的能力,而云原生应用的设计理念就是让部署到云平台的应用能够利用云平台的能力实现按需使用计算资源和弹性伸缩。微服务架构是实现企业分布式系统的一种架构模式,即将一个复杂的单体应用按照业务的限定上下文,分解成多个独立部署的组件。这些独立部署的组件,就称为微服务。而在谈论云原生应用与微服务架构关系的时候,根据上下文不同可以从两个角度去看。1) 宏观的云原生应用,即将整个分布式系统看作一个应用,这个角度下,微服务架构是实现云原生应用的一种架构模式;2) 微观的云原生应用,即每个微服务是一个应用,这种语境下,每个微服务要按照云原生应用的设计理念去设计(如我们所熟知的云原生12要素),才能真正实现微服务架构所要达到的目的,即让分布式系统具备按需使用计算资源和弹性伸缩的能力。在华为云CCE中,将宏观的云原生应用,称之为“应用”,而将微观层面的云原生应用,称之为“组件“,用这两个概念来对分布式应用进行管理:                                          图:应用、组件与工作负载的关系云原生应用管理的实践创建Kubernetes集群       在创建应用前,需要准备好一个Kubernetes集群(1.9及以上版本),并启用Istio服务网格治理。登录CCE控制台,在左侧导航栏中单击“资源管理 > 虚拟机集群”,在“虚拟机集群”界面,单击“创建Kubernetes集群”,按照向导式逐步配置: 图1:创建Kubernetes集群 图2:使能服务网格,一键式安装Istio并自动使能应用sidecar注入:其他集群创建步骤、配置不变.创建云原生应用这里我们以Istio开源社区的bookinfo样例应用为例,其包含ProductPage、Reviews、Details、Ratings这4个微服务,拓扑结构以及网络访问信息如下: 在左侧导航栏中选择“应用管理”,单击“创建应用”->“向导式创建”:1、 首先定义应用的基本信息:名称、选择所在集群和namespace,并按照上方的应用拓扑和网络设计添加组件 A、添加ratings微服务组件机器监听端口,容器内监听端口为9080,开放至service mesh内部访问端口也配置为9080:1)配置组件基本信息:2)选择负载镜像和版本后点击“添加”,可以看到我们为bookinfo添加了一个微服务组件进网格:B、     参考上述步骤,添加reviews、details和productpage微服务组件2、    配置应用对外开放的访问路由:A、点击“添加应用访问方式“B、选择开放至外部访问的组件,并配置开放端口:最后点击右下角“创建”,启动应用,应用及其微服务组件如下所示: 通过应用开放的入口访问productpage:使用Istio两步实现灰度发布在集群上启用Istio服务网格集群下应用如果需要做微服务治理,只需要在创建集群时点击启用服务网格即可,不需要自行进行Istio镜像下载、yaml配置、安装、升级等与应用业务无关的复杂基础设施构建工作。开发打包新版本下方我们以开发了一个新版本reviews微服务为例(初始容器镜像版本号为1.5.0),新版本镜像版本号为1.5.0-v2,并且已上传至华为云容器镜像服务(SWR),新版本在现在版本基础上增加对ratings微服务的调用,支持评分星星级别展示. 发布灰度版本并配置灰度策略在应用列表页面,展开bookinfo下的组件信息,选择reviews微服务组件的“添加灰度版本”: 启动灰度版本:配置灰度版本号v2,系统已自动选择最新镜像版本,点击“启动负载”即可启动灰度版本:观察灰度版本运行状态并配置灰度策略:按照20%比例分配灰度版本流量可以看到,review微服务已处于灰度发布状态: 对review服务进行灰度发布前后的流量对比:初始版本:reviews服务未调用ratings来获取星级评价能力灰度状态:review v2版本调用ratings服务获取星级评价,并将20%流量分流至本版本上访问productpage,可以看到部分请求可以显示星级评价,部分请求仍然是老版本的显示效果,部分访问结果为带有星级评价特性的页面: 持续观测灰度版本运转状态,并进行流量切换持续观测灰度版本的运行状态,在确认业务处理、性能满足要求后,我们可以选择逐步调大灰度版本的流量比例,而后进一步将流量全部导流至灰度版本上: Ø  观察健康与性能状态:点击左侧导航栏“运维中心”进入AOM服务,选择“指标”->“应用”菜单,持续观察review-v2的健康与性能状态:  下一步我们将逐步扩大流量比,最后将流量全部导至灰度版本,点击“接管所有流量”:现在所有访问reviews的流量都导向v2版本,访问productpage,所有的请求都会呈现星级评价特性: Istioctl命令行工具       Istio服务网格还提供了命令行工具,满足更多的流量规则配置诉求,如限流、熔断、连接池管理、会话保持等。进入”资源管理“->“虚拟机集群“,选择对应集群,可以看到Istio命令行的下载和使用指导:总结总的来说,华为云CCE + Istio + AOM/APM服务在组件部署、灰度版本管理、流量策略配置以及灰度过程中的监控还是能够满足基本诉求,操作上也比较简单,通过简单的两三步配置即可实现新版本的发布和流量切换,期待华为云CCE Istio服务网格这里能够有更多能力开放出来。
总条数:78 到第
上滑加载中