罗宾汉,Istio 监控计划解析,成康

咱们知道,“效劳网格”是当下科技职业的热门论题 ,Istio便是这一范畴最盛行的项目之一。Istio 由 IBM、谷歌和 Lyft 联合开发,用来处理当下微效劳架构面对的许多问题winner。容器和 Kubernetes 的盛行使微效劳架构得到了广泛运用,但与此同时它们也带来了一系列全新的问题和应战。

现在,咱们一切的效劳都在运用 HTTP/gRPC API 来相互通讯。在传统的单体架构年代,这些通讯只是在单个运用内部传递的函数调用罢了。比较而言,在微效劳体系中不同效劳之间存在着许多的交互,更难调查、保护和监控。

现在,已经有许多材料介绍Istio 的概略及其作业原理,这儿我不再赘述。本文将着前四后八重评论一个论题,也便是监控。Istio 的官方文档谈到了这方面的内容,但我花了不少时刻才搞清楚它是怎么回事。所以我会在这篇教程中带你阅读一遍相关内容,这样你就能更好地了解怎么运用 Istio 来监控使命了。

现状

挑选效劳网格(mesh)的首要意图之一是进步可调查性。直到现在,开发者都需求在自己的运用中刺进比方公共库或许New Relic或Datalog这样的署理效劳,然后露出一系列目标数据;这样一来,运营就能运用监控处理方案来获取运用的终端节点目标,然后知晓体系的运转情况。但为此不得不修正代码实在很费事,尤其是改动或新增内容较多时更让人痛苦不堪。别的一去二三里多个团队都运用这种办法做监控时,代码保护也会变得很困难。

Istio 的做法是在无需改动我是特种兵之火凤凰任何代码的前提下露出并追寻运用行为。这是经过所谓“边车(sidecar)”的概念完成的,它是一个与咱们的运用一同运转,并向中心入宅遥测组件供给数据的容器。边车能够辨认运用正在运用的协议(redis、mongo、http、grpc 等),然后嗅探出与数据恳求相关的许多信息。

混合器,Istio 的“瑞士军刀”

首要来看混合器(Mixer)组件,谈一谈它的效果以及它给监控带来的优点。在我看来,所谓“混合器”最好看作是一种特点处理器。网格中的署理都会发送一组内容各异的特点,比方数据恳求或环境信息之类,“混合器”会处理一切这些数据并将它们别离路由到正确的适配器上。

“适配器”是附加到“混合器”上的 handler罗宾汉,Istio 监控方案解析,成康,担任为后端调整特点数据。后端可所以对这些数据感兴趣的天路外部效劳,比方监控东西(如 Prometheus 或 St泡腾片ackdriver)、授权后端或日志仓库。


概念

入门 Istio 最难的进程之一是了解新术语。你刚认为自己好简单搞理解了整个 Kubernetes 词汇表的时分,却会发现 Istio 又多出来 50 多个新术语!

在监控这方面,以下是混合器规划中最风趣且有用的一些概念:

  • 特点(Attribute):指由混合器处理的一段数据。大多数特点是从边车发送来的,但适配器也能发生特点。在实例中会运用特点将所需数据映射到后端。
  • 适配器(Adapter):嵌入在混合器组件中罗宾汉,Istio 监控方案解析,成康的逻辑,用来将数据转发到指定的后端。
  • Handler:适配器的装备。由百度云资源共享于一个适配器能够效劳多个用例,因而将装备解耦就能够让适配器以多种设置来运转了。
  • 实例:将来自 Istio 的数据绑定到适配器模型的实体。 Ist罗宾汉,Istio 监控方案解析,成康io 有一套由边车容器获取的一致特点集,这些数据需求翻译成后端言语。
  • 模板:界说实例模板的通用接口。

创立一个新的监控事例

了解过 Istio 冰点复原暗码采桑子相关的界说和概念后,咱们要紧记它们的最好办法便是在实在场景中过一遍。

做这个操练时罗宾汉,Istio 监控方案解析,成康,我引荐咱们充分运用 Kubernetes 的标签元数据,用它来追寻咱们效劳的版别迭代。一般来说,转向微效劳架构后你的效劳最终都会有许多版别(A/B 测验,API 版别等)。 Istio 的边车会将你的群会集的一切元数据都发送到混合器。所以在咱们这个示例中,咱们将运用布置的标签来辨认效劳的版别,并调查每个版别的运用情况计算信息。

简略起见咱们先来找一个现成的项目,用谷歌微效劳演示项目就行了,然后做一些修正以适用咱们的方案。这个项目模拟了一个由多个组件组成的微效劳架构,用来构建一个电子商务网站。

首要,咱们要保证这个项目与 Istio 一同能在咱们的集群中正确运转。咱们运用主动注入功能在陈尚实命名空间中布置humble一切组件,并让 Istio 主动注入边车。

仿制代码

$ kubectl label namespace mesh is猫叫声响tio-injection=enabled

正告:一定要提早创立 mesh 命名空间,并让你的 kubectl舞狮子 上下文指向它。

假如启用了一个 pod 安全策略,则需求为 init 容器装备一些权限,以使其能正确装备 iptables。出于测验意图你能够运用:

仿制代码

$ kubectl create clusterrolebinding mesh --clusterrole cluster-admin --serviceaccount=mesh:default

这会将默许效劳帐户绑定到群集办理员人物。现在咱们能够运用全资源 YAML 文档来布置一切组件了。

仿制代码

$ kubectl apply -f release/kubernetes-manifests.yaml

现在你应该能看到 pod 在 mesh 命名空间中开端运转了。其间一些 pod 会犯错,由于 Istio 资源还没增加进去。例如,出口流量会被阻挠,currency 组件也会犯错。用下面这些资源来处理问题,并经过 Istio ingress 露出前端组件。

仿制代码

$ kubectl apply -f release/istio-manifests.yaml

现在咱们就能够检查正在运用你的云效劳商供给的 IP 或域作业的前端了(frontend-external 效劳经过云效劳商的负载均衡器露出)。

现在咱们的微效劳运用开端作业了,下面再进一罗宾汉,Istio 监控方案解析,成康步,将其间一个组件装备为多个版别。正像你在微效劳 YAML 中看到的那样,布置会有带着运用称号的单个标签。假如咱们要办理 canary 布置或运转咱们运用的多个版别,咱们能够增加另一个版别标签。

仿制代码

apiVersio绕柱击球n: extensions/v1beta1
kind: Deployment
metadata:
name: currencyservice
spec:
template:
metadata:
labels:
app: currency韩城service
version: v1

将更改运用于咱们的集群后,咱们能够用其他称号仿制布置并更改版别。

仿制代码

apiVersion: extensions/v1beta1
kind: Deploymen唯物主义t
metadata:
name: currencyservice2
spec:
template:
metadata:
la罗宾汉,Istio 监控方案解析,成康bels:
app: currencyservice
version: v2

现在再次将其提交给 API。

仿制代码

$ kubectl apply -f release/kubernetes-manifests.yaml

留意:尽管咱们又一次运用了一切的清单,但只要已更改的清单才会由 API 更新。

一位热心读者留意到咱们用了一个技巧,便是让效劳挑选器只指向 app 标签。这样一来流量就会在不同版别之间相等分配了。

进阶之路

现在轮到重头戏了。咱们需求创立三份资源来将版别露出为 prometheus 中的新目标。

首要,咱们创立一个实例。在这儿咱们运用 metric 实例模板来将边车供给的值供给程序映射到适配器的输入端。咱们只看负载的称号(源)和版别。

仿制代码

apiVersion: "config.istio.io/v1alpha2"
kind: metric
metadata:
name: versioncount
namespace: mesh
spec:
value: "1"
dimensions:
source: source.workload.name | "unknown"
version: destination.labels["version"] | "unknown"
monitored_resource_type: '"UNSPECIFIED"'

现在该装备适配器了。在这个示例中咱们期望将目标连接到一个 Prometheus 后端。所以咱们要在 handler 装备中界说目标称号,以及目标会为后端(Prometheus DSL)供给的数值类型,此外还有维度标识所需的标签称号。

仿制代码

apiV卓懿高ersion: "config.istio.io/v1alpha2"
kind: prometheus
metadata:
name: versionhandler
namespace: mesh
spec:
metrics:
- name: version_count # Prometheus metric name
instance_name: versioncount.metric.mesh # Mixer instance name (fully-qualified)
kind: COUNTER
label_names:
- source

- version

最终,咱们需求将这个 handler 与指定的实例(目标)链接起来。

仿制代码

apiVersion: "config.istio.io/v1alpha2"
kind: rule
metadata:
name: versionprom
namespace: mesh
spec:
match: des罗宾汉,Istio 监控方案解析,成康tination.service == "currencyservice
.mesh.svc.clremainuster.local"
actions:
- handler: versionhandler.prometheus

instances:
- versioncount.metric.mesh

一旦运用了这些界说,Istio 将指示 prometheus 适配器开端搜集并供给新目标。假如咱们看一下 prometheus 用户界面,会发现它现在正在查找新目标,内容类似于:


定论

微效劳架构中取得杰出的可调查性并不简单。 Istio 有助于简化开发者的作业,并将作业交给运营商。

一开端,处理效劳网格带来的各种复杂问题或许很难。可是一旦你驯服了它,就能让监控装备标准化和主动化,并在极短时刻内构建一个超卓的可调查体系。

更多材料

  • 怎么在集群中装置 Istio
  • 官方https://istio.io/docs/](https://istio.io/docs/">文档与示例

作者简介

Fernando Ripoll

Giant Swarm 的处理方案工程师,以丰厚的经历协助客户使他们的 Kubernetes 走上正轨。

检查英文原文:https://blog.giantswarm.io/Istio-monitoring-explained/

转载原创文章请注明,转载自188金博宝网站_金博宝188滚球_188足球比分直播,原文地址:http://www.dannyscontest.com/articles/278.html

上一篇:恒丰银行,浙江安吉:种好“扶贫苗” 传好“致富经”,bts

下一篇:克里斯,互联网金融渠道哪家强?微信“理财通”VS支付宝“财富”,奇游加速器