目录

  • 1. 引言
  • 2. Linkerd入门
    • 2.1 安装Linkerd CLI(Command Line Interface)工具
    • 2.2 安装Linkerd控制平面Control Plane
    • 2.3 安装示例程序
    • 2.4 将示例程序加入到Linkerd服务网格(即注入linkerd-proxy)
    • 2.5 安装Linkerd扩展viz
    • 2.6 使用Linkerd viz Dashboard调试HTTP/GRPC请求

1. 引言

随着单个服务的代码库越来越大(提交冲突、维护困难)、服务逻辑越来越复杂、单体服务性能出现瓶颈(分布式、功能拆分重点优化)以及开发团队的日益壮大(部门拆分、职能分工),我们将服务进行拆分进行微服务化管理。但是微服务化后也加重了服务部署、监控、运维的难度,例如使用Spring Cloud框架会将微服务管理的功能引入到业务代码中,增加了应用的集成、开发难度,且具有一定学习难度。而随着K8S以及Service Mesh的兴起,引入Sidecar代理的方式(不侵入代码、应用无感知)来接管微服务管理的功能,带来了更便捷的微服务接入方式,使得开发人员仅需关注核心业务逻辑开发,而由架构和运维人员统一制定Service Mesh管理策略。但Servie Mesh也不是万能药水,由于额外引入了Sidecar代理(A -> proxy for A -> proxy for B -> B)所以资源消耗(CPU、内存)、请求延时均有所增加,所以要考虑清楚是否真的需要Service Mesh(取舍)。

记得当初团队决定接入Istio,是建立在:

  • 团队技术栈由Spring刚升级到SpringBoot(并无实际落地SpringCloud的经验)
  • 对服务路由编排有要求(例如服务编号s257到具体服务的映射)
  • 服务间请求调用采用HTTP + JSON
  • Pass平台决定升级K8S
  • 开发语言包括Java、Python、Nodejs等

在上述场景下,借助Istio应该是成本最小的微服务升级:

  • 建立在K8s之上
  • 不侵入代码(后续服务追踪需透传tracing相关请求头)且语言无关(开发人员无感)
  • 丰富的流量路由策略(VirtualService、Destination、Gateway)

由于Service Mesh(无论Istio还是本文介绍的Linkerd)是具有一定难度和门槛的,所以要充分考虑好团队是否真正需要接入Service Mesh:

  • 如已全栈接入Spring Cloud(功能比Service Mesh更强大),则可优先使用SpringCloud相关模块解决问题(但相比起侵入代码的微服务框架我更看好Service Mesh的前景)。
  • Service Mesh需配合K8S使用(通过K8S可以方便的部署服务及其Sidecar代理)
  • 目前Service Mesh对HTTP/1.1、 HTTP/2、gRPC支持的较为完善,其他RPC协议还有待完善,所以团队若使用其他RPC目前并不适合接入ServiceMesh。
  • 关于代理的形式Sidecar(每个Pod内注入代理)、Per-node(每个K8s节点注入代理)、Per-service-account、eBPF还有待观望(目前Istio、Linkerd均使用Sidecar模式,且Linker1.x由最初的Per-node模式调整为Linker2.x的Sidecar模式)。
  • 如果对安全要求较高,如需集群内服务均采用TLS或mTLS加密通信,则可考虑Service Mesh无侵入全栈升级TLS。
  • 如全栈无侵入接入OAuth2协议,服务作为Resource Sever(借助Istio RequestAuthentication、AuthorizationPolicy)。
  • 以较小侵入(如透传tracing相关请求头)集成分布式服务追踪(HTTP、GRPC)、请求监控。
  • 有灰度发布的需求(如按比例、用户拆分流量等)

由于之前有过使用Istio的经验(上手较难、配置比较多),现在同样想对Linkerd2进行了解,所以有了本次的Linkerd快速上手。
Linkerd相较于Istio,官方号称其更轻量级、更简单,且其代理实现linkerd-proxy(Rust编写)相较于Istio Envoy(C++编写)实现在资源消耗、性能上提升近乎10倍,但目前支持的功能不如Istio丰富,且其采用和Istio类似的数据平面Data Plane(由linkerd-proxy组成)、控制平面Controll Plane的架构,如下图:

关于Linkerd架构的详细说明可参见:
https://linkerd.io/2.11/reference/architecture/

2. Linkerd入门

基础环境:

VirtualBox Ubuntu 20.04.3-live-server
IP: 192.168.3.120
Kubephere All-in-One V3.2.0
Kubernetes v1.21.5

可通过如下命令查看K8s版本:

kubectl version --short

2.1 安装Linkerd CLI(Command Line Interface)工具

可直接通过官方提供的脚本进行安装:

curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh

注:
可通过curl --proto ‘=https’ --tlsv1.2 -sSfL https://run.linkerd.io/install查看脚本内容,
具体脚本内容可参见:https://gitee.com/luoex/linkerd-install/blob/master/get-started/linkerd-cli.install

安装过程如下图:

在Github下载https://github.com/linkerd/linkerd2/releases/download/stable-2.11.2/linkerd2-cli-stable-2.11.2-linux-amd64 ,
总共44.7M花了半个小时

Linkerd2入门相关推荐

  1. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  2. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  3. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  4. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  5. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

  6. SpringBoot (一) :入门篇 Hello World

    什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  7. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  8. 5 分钟入门 Google 最强NLP模型:BERT

    BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...

  9. 命名实体识别入门教程(必看)

    关于开发自己的命名实体识别先期思路: 虽然网上有很多相关代码,但实际如何入门材料较少,故整理下: CRF:先期可以用人民日报语料库去做,步骤如下: https://blog.csdn.net/hude ...

最新文章

  1. python面向对象大段代码_python面向对象部分简单整理
  2. Zonbu-售价 99 美元的袖珍电脑
  3. java.lang.Record:规范草案
  4. 致诺奖得主:低报酬、超工时,为什么我们要追求科学事业?
  5. 【项目管理】合同和采购
  6. Tensorflow学习笔记(三)
  7. 驾校学员驾考成绩管理系统
  8. 变量可以存储在堆中,栈中,方法区中。哪里都可以啊。对象只能存储在堆中...
  9. mfc之CPtrArray数组
  10. 通过数据流处理-微信小程序生成临时二维码
  11. (转)2017中国互联网证券年度报告
  12. 转Java 开发环境配置
  13. Skype国际版使用国内卡
  14. win7 IE11下,无法通过Windows更新为其他微软产品获取更新
  15. 小米怎么卸载html,小米11内容中心有什么用?怎么关闭和卸载呢
  16. 域名被劫持的处理办法和预防
  17. java计算机毕业设计废品回收管理系统设计与实现源码+mysql数据库+系统+lw文档+部署
  18. GrayLog 设置日志保留时间每天1个索引,保留183天(6个月)
  19. 什么是安全沙箱技术?如何评估应用程序安全性?
  20. LoRa和NB-IoT的对比,LoRa感觉毫无胜算可言

热门文章

  1. 月末关账流程和政策规定
  2. 太虚幻境 文/江湖一劍客
  3. 《算法笔记》学习日记——5.2 最大公约数与最小公倍数5.3 分数的四则运算5.4 素数
  4. 家装与家电的碰撞,三星电视诠释“新春换新”的“新选择”
  5. 【微信小程序开发(云壁纸小程序教程)】
  6. SIGMOD 2017论文的摘要与看法
  7. 无线智能蓝牙追踪防丢器
  8. 佳能数码相机,不能安装驱动程序
  9. 【第二十四期】golang 一年经验开发 富途
  10. win7程序关闭后弹出 程序兼容性助手 这个程序可能安装不正确 如果此程序没有正确安装,处理方式