前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes的服务网格(第1部分):获取关键的服务指标

Kubernetes的服务网格(第1部分):获取关键的服务指标

作者头像
ArrayZoneYour
发布2018-01-10 16:01:26
3.1K1
发布2018-01-10 16:01:26
举报

看到这个标题,你可能会问:什么是服务网格?在云服务广泛应用的现在又如何应用?马上我们就会在本文中将向您展示如何在Kubernetes上使用linkerd作为服务网格,以及如何在不更改应用程序代码的情况下收集并报告度量服务质量所需的关键指标(top-level service matrics)(如成功率,请求数量和延迟)。

注意:这是关于linkerd和基于云服务的应用的系列文章中的第一篇,这一系列的文章清单如下:

  1. 获取关键的服务指标(本文)
  2. PODS(Portable On Demand Storage, 便携式按需存储)很棒,怎么多用都不为过
  3. 对所有的内容进行加密
  4. 通过流量转移实现持续部署
  5. Dogfood环境,入口(ingress)和边界路由(edge routing)
  6. 渐进式微服务
  7. 让分布式跟踪变得容易
  8. 用Linkerd作为入口控制器
  9. 为了乐趣与提升,尝试一下gRPC吧
  10. 自动重试,期限传播(deadline propagation)与优雅降级
  11. 根据关键指标实现弹性伸缩

正如开头所说,我们看到的关于linkerd的最常见的问题之一就是:服务网格究竟是什么?为什么服务网格是基于云服务打造的应用的核心组件?为什么像Kubernetes一样的环境会提供诸如服务对象(service object)和负载均衡之类的原语(pimitives)?

简而言之,服务网格是管理应用通信的中间层(除了不同应用间的通信,也可以同一应用中的不同部分之间的通信,如微服务)。在传统的应用中,很多逻辑是直接构建在应用上的:重试和超时,监视/可见性,跟踪,服务发现(Service Discovery)等等都被硬编码到每个应用中。

然而,随着应用程序架构中越来越多的服务被拆分出来,将通信逻辑从应用上层转移至基础架构的底层也变得越来越重要。就像写应用的时候大家都不会从TCP堆栈写起一样,负载均衡,服务发现管理,重试和超时逻辑也不应该在应用层实现。(如果想深入了解,可以参阅Oliver Gould‘s MesosCon talk其中分享了跨服务场景下重试和超时的困难)

像linkerd这样的服务网格为大规模运行的多服务应用提供了以下关键特性:

  • 基线弹性:支持重试预计算,超时处理,通信链路的断开。
  • 记录关键服务指标:成功率,请求量和延迟。
  • 延迟和容错能力:支持故障和延迟感知的负载均衡可以通过路由绕过缓慢或中断的服务实例。
  • 分布式追踪Zipkin OpenTracing
  • 服务发现:查找目标实例。
  • 协议升级:使用TLS封装跨网络通信,将HTTP / 1.1切换至HTTP / 2.0。
  • 路由:支持将请求路由至不同版本的服务,在集群之间进行故障转移等。

在本文中,我们将重点关注可见性:服务网格如何自动收集和报告服务的成功率等关键指标。下面我们将通过Kubernetes快速创建一个简单例子来引导你。

在Kubernetes中使用linkerd监控服务情况

在请求层操作的优点之一是服务网格可以在协议层判断访问成功还是失败。例如,如果你有一个HTTP服务,linkerd可以理解返回玛200,400,500的语义,并根据它自动计算成功率等指标。(当我们谈论重试时,在这一层的操作将变得更加重要 - 具体我们会在后面的文章讲解)。

让我们通过一个简单的例子来说明如何在Kubernetes上安装linkerd,在不更改应用的情况下自动获取汇总关键服务的成功率。

第1步:安装linkerd

使用这个Kubernetes配置来安装linkerd 。这会linkerd作为DaemonSet安装(即每个主机对应一个实例)并运行在Kubernetes默认的命名空间:

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/k8s/linkerd.yml

您可以通过查看linkerd的管理页面来确认安装是否成功:

代码语言:javascript
复制
INGRESS_LB = $(kubectl get svc l5d -o jsonpath ="{.status.loadBalancer.ingress [0].*}")
open http://$INGRESS_LB:9990

第2步:安装示例应用

使用hello-world config安装两个服务“hello”和“world” 。这两个服务将被安装到默认的命名空间中:

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/k8s/hello-world.yml

这两个服务将共同组成一个高度可扩展的“hello world”微服务(hello服务通过调用world服务来完成一次请求流程)。

可以设定通过linkerd的外部IP发送流量来观察请求的动作:

代码语言:javascript
复制
http_proxy = $INGRESS_LB:4140 curl  -s http://hello

你应该会看到字符串“Hello world”。

第3步:安装linkerd-viz

最后,让我们通过安装linkerd-viz来观察我们服务的运行情况。linkerd-viz是一个扩展包,其中包括实现自动查找linkerd实例所需的Prometheus、Grafana的配置。

使用其中的配置来安装linkerd-viz。这会将linkerd-viz安装到默认的命名空间中:

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-viz/master/k8s/linkerd-viz.yml

打开linkerd-viz的外部IP来查看仪表板页面:

代码语言:javascript
复制
VIZ_INGRESS_LB = $(kubectl get svc linkerd-viz -o jsonpath ="{.status.loadBalancer.ingress [0].*}")
open http://$VIZ_INGRESS_LB

您应该看到一个仪表板界面,包括服务和实例的选择器。所有图表都会根据你选择的服务和实例进行进行展示:

linkerd-viz仪表板包括三个部分:

  • 整体指标(TOP LINE):整个集群的成功率和请求量。
  • 服务指标:部署的每个应用的指标。包括成功率,请求量和延迟。
  • 每个实例的指标:集群中每个节点的成功率,请求量和延迟。

只需三个简单的步骤,我们就在我们的Kubernetes集群上安装了linkerd和一个应用,并使用linkerd来监控应用服务的运转状况。当然,linkerd提供的不仅仅是可见性:在底层,我们启用了支持延迟感知的负载均衡,自动重试和断路,分布式跟踪等等。在本系列的文章中,我们将陆续介绍如何利用这些功能。

同时,有关在Kubernetes中运行linkerd的更多详细信息,可以参考Kubernetes入门指南或在linkerd slack进行交流!

请继续关注本系列的第2部分:PODS(Portable On Demand Storage, 便携式按需存储)很棒,怎么多用都不为过。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在Kubernetes中使用linkerd监控服务情况
  • 第1步:安装linkerd
  • 第2步:安装示例应用
  • 第3步:安装linkerd-viz
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档