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

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

作者头像
ArrayZoneYour
发布于 2018-01-10 08:01:26
发布于 2018-01-10 08:01:26
3.2K10
代码可运行
举报
运行总次数:0
代码可运行

看到这个标题,你可能会问:什么是服务网格?在云服务广泛应用的现在又如何应用?马上我们就会在本文中将向您展示如何在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
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/k8s/linkerd.yml

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

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

第2步:安装示例应用

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-examples/master/k8s-daemonset/k8s/hello-world.yml

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd-viz/master/k8s/linkerd-viz.yml

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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, 便携式按需存储)很棒,怎么多用都不为过。

评论
登录后参与评论
1 条评论
热度
最新
这里有一处翻译不对:第二部分中的意思是 Pod是最基本的操作单元,但不是最好的部署单元,也就是Pod没有那么好,在此订正一下
这里有一处翻译不对:第二部分中的意思是 Pod是最基本的操作单元,但不是最好的部署单元,也就是Pod没有那么好,在此订正一下
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Kubernetes中的Service Mesh(第1部分):Service的重要指标
原文地址:https://dzone.com/articles/a-service-mesh-for-kubernetes-part-1-top-line-service-metrics
Techeek
2018/01/10
1.6K0
Kubernetes的服务网格(第4部分):通过流量切换持续部署
除了服务发现,重要指标和TLS之外,linkerd还具有强大的路由语言,称为dtabs,可以用来改变请求的方式 - 甚至是单个请求 - 流经应用程序拓扑。在本文中,我们将向您展示如何使用linkerd作为服务网格来作为CI / CD管道的最后一步来执行新代码的蓝绿部署。
Techeek
2018/01/18
1.7K0
Kubernetes的服务网格(第4部分):通过流量切换持续部署
Kubernetes的服务网格(第3部分):对通信进行加密
在本文中,我们将展示如何在不修改当前应用代码的前提下来为所有的服务到服务的(service-to-service) HTTP 调用提供 TLS 支持。
Techeek
2018/01/11
1K0
Kubernetes服务网格(第8部分):Linkerd作为入口控制器
Linkerd的设计目的是使service-to-service的内部通信在应用程序中安全、快速和可靠。然而,这些目标同样适用于edge。在这篇文章中,我们将展示Linkerd的一个新特性,允许它充当Kubernetes入口控制器,并展示它如何在使用和不使用TLS的情况下处理通信流。
VincentXu
2018/01/12
1.5K0
Kubernetes服务网格(第8部分):Linkerd作为入口控制器
Kubernetes服务网格(第10部分):服务网格API
作为上个月发布的Linkerd 1.0的一部分,我们发现一些人已经开始注意Linkerd的服务网格API。随着1.0版本的发布,我们认为需要花些时间来解释这个API的作用,以及这对于Linkerd的未来意味着什么。我们还将展示这个API的即将发布的功能之一 —— 动态控制Linkerd的每项服务的通信策略。
Techeek
2018/01/17
8440
Kubernetes服务网格(第10部分):服务网格API
Kubernetes的服务网格(第3部分):加密一切数据
在本文中,我们将向您展示如何使用linkerd作为服务网格,将TLS添加到所有服务到服务的HTTP调用中,而不用修改任何应用程序代码。
Hi胡瀚
2018/01/15
1.8K0
Kubernetes的服务网格(第6部分):简单轻松的分期微服务
在将代码暴露给生产流量之前,分期新代码是构建可靠的,低故障停机时间软件的关键部分。然而不幸的是,对于微服务来说,每个新服务的添加都提升了分期过程的复杂性,因为服务之间的依赖关系图与服务数量会成正比地增长。在本文中,我们将向您展示linkerd最强大的功能之一,按请求路由,可以让您灵巧地回避这个问题。
Techeek
2018/01/15
7940
Kubernetes的服务网格(第6部分):简单轻松的分期微服务
Kubernetes中的Service Mesh(第5部分):Dogfood环境和入口
原文地址:https://dzone.com/articles/a-service-mesh-for-kubernetes-part-v-dogfood-envir
Techeek
2018/01/10
1.2K0
Kubernetesr的Service Mesh(第7部分):让分布式跟踪变得简单
在这篇文章中,我们将通过一个简单的例子来介绍一下Linkerd和Zipkin如何在Kubernetes(Google开源的容器集群管理系统)中协同工作以自动获得分布式跟踪,只需要对应用程序进行一些小小的修改。
Techeek
2018/01/12
1.2K0
Kubernetesr的Service Mesh(第7部分):让分布式跟踪变得简单
A Kubernetes Service Mesh(第9部分):使用gRPC的乐趣和收益
原文地址:https://dzone.com/articles/a-service-mesh-for-kubernetes-part-ix-grpc-for-fun
Techeek
2018/01/10
1.7K0
A Kubernetes Service Mesh(第9部分):使用gRPC的乐趣和收益
Kubernetes服务网格(第8部分):Linkerd作为入口控制器
Linkerd旨在使应用程序内部服务间的通信安全,快速和可靠。但是,这些目标同样适用于网络的接入层(应用程序对外的服务)。在这篇文章中,我们将展示Linkerd的一个新特性,Linkerd可以充当Kubernetes入口控制器,并展示Linkerd如何处理入站流量的能力。
Techeek
2018/01/22
1.5K0
Kubernetes服务网格(第8部分):Linkerd作为入口控制器
使用服务网格来实现Kubernetes可观察性
你们刚刚采用了Kubernetes。恭喜你!但是现在要做什么?任何Kubernetes采用者的第一个可观察性任务之一是监控——至少,你需要知道什么时候出现了问题,以便你可以快速地修复它们。
CNCF
2021/03/15
3690
使用服务网格来实现Kubernetes可观察性
Linkerd服务网格安装部署
Linkerd 是 Kubernetes 的一个完全开源的服务网格实现。它通过为你提供运行时调试、可观测性、可靠性和安全性,使运行服务更轻松、更安全,所有这些都不需要对你的代码进行任何更改。
王先森sec
2023/10/17
3270
Linkerd服务网格安装部署
Kubernetes的服务网格(第2部分):Pods目前看来还是很棒的
在我们最近关于Kubernetes的序列,Kubernetes的服务网格,第一部分:顶级服务质量一文中,细心的读者注意到,linkerd是使用DaemonSet而不是sidecar进程安装的。在这篇文章中,我们将解释我们为什么(以及如何)这样做。
lemoon1993
2018/01/17
2.7K0
Kubernetes的服务网格(第2部分):Pod是最基本的操作单元,但不是最好的部署单元
在本系列文章的上一篇中,细心的读者注意到,linkerd是使用DaemonSet而不是作为挎斗(SideCar)进程安装的(关于SideCar的概念及翻译引用自Azure技术社区的文档)。在这篇文章中,我们将解释为什么这样做以及怎样做。
Techeek
2018/01/11
1.2K0
详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
Linkerd 提供了许多功能,如:自动 mTLS、自动代理注入、分布式追踪、故障注入、高可用性、HTTP/2 和 gRPC 代理、负载均衡、多集群通信、重试和超时、遥测和监控、流量拆分(金丝雀、蓝/绿部署)等。
为少
2021/07/07
1.4K0
在 Linkerd 中获取应用的黄金指标
前面文章中我们了解了如何使用 CLI 部署 Linkerd 控制平面和 Linkerd-viz 扩展,并在几分钟内收集指标是多么容易。在本章中,我们将详细了解这些指标,并使用 Emojivoto 示例应用程序了解它们的含义。
我是阳明
2022/09/29
2.5K0
在 Linkerd 中获取应用的黄金指标
Linkerd|实现Kubernetes可观察性监测
在本文中,我们将向您展示如何完成基本的Kubernetes可观察性任务:从运行在Kubernetes集群上的应用程序获得黄金指标或黄金信号。我们不需要修改任何代码,也不需要进行任何配置,只要安装Linkerd(一个开源的超轻服务网格)就可以做到这一点。我们将介绍什么是服务网格,术语可观察性是什么意思,以及这两者在Kubernetes上下文中是如何关联的。
用户5166556
2023/03/18
4150
Linkerd|实现Kubernetes可观察性监测
使用Prometheus和Linkerd建立Kubernetes服务水平目标(SLO)的指南
https://buoyant.io/2020/10/21/kubernetes-SLO-with-prometheus-linkerd/
CNCF
2020/11/25
9700
使用Prometheus和Linkerd建立Kubernetes服务水平目标(SLO)的指南
服务网格(Service Mesh)与Kubernetes的服务发现
伴随着微服务架构,容器编排技术和云原生(Cloud Native)应用的发展,William Morgan 两年前一篇《What's a service mesh? And why do I need
曲奇泡芙
2019/08/16
2.5K0
服务网格(Service Mesh)与Kubernetes的服务发现
推荐阅读
相关推荐
Kubernetes中的Service Mesh(第1部分):Service的重要指标
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验