专栏首页黑客下午茶在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.2)

在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.2)

在我们 service mesh 之旅的第一部分中,我们讨论了“什么是服务网格以及我们为什么选择 Linkerd2?”。在第二部分,我们将讨论我们面临的问题以及我们如何解决这些问题。

系列

在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.1)

问题 1:Apache ZooKeeper Leader 的选举

Intenseye,我们使用 Apache Pulsar 代替传统的 Apache Kafka 队列系统。

Apache Pulsar 是一个云原生(cloud-native)、多租户(multi-tenant)、高性能分布式消息传递和streaming 平台,最初由 Yahoo 创建!

Apache Pulsar 使用 Apache Zookeeper 进行元数据存储、集群配置和协调。在我们将 ZookeeperLinkerd2 啮合后,K8S 一一重启了 pod,但它们卡在了 “CrashloopBackOff” 中。

我们检查了日志,发现 ZooKeeper 无法与其他集群成员进行通信。我们进一步挖掘,发现 Zookeeper 节点由于网格的原因无法选出一个 leaderZooKeeper 服务器监听三个端口: 2181 用于客户端连接,2888 用于 follower 连接——如果它们是 leader, 3888 用于 leader 选举阶段的其他服务器连接。

然后,我们查看了文档,找到了 Linkerd2 sidecar“skip-inbound-ports”“skip-outbound-ports” 参数。一旦我们添加 28883888 端口以跳过入站/出站,那么建立仲裁就起作用了。由于这些端口用于内部 Zookeeper pod 通信,因此可以跳过网格。

如果您使用具有 leader 选举的应用程序,这是所有服务网格的常见问题,例如;PulsarKafka 等,这是解决方法。

问题 2:Fail-Fast 日志

我们已经开始对我们的应用程序进行一一网格化。一切都很好,直到对其中一个 AI 服务进行网格划分,我们将其称为 application-a。我们有另一个应用程序作为 500 多个轻量级 Pod 运行,我们称之为 application-b,它使用 gRPCapplication-a 发出请求。

在成功 mesh 12 分钟后,我们看到数百个 Failed to proxy request: HTTP Logical service in fail-fast errorsapplication-b 中。我们检查了 linkerd-proxy 仓库的源代码,我们找到了打印这个日志的地方,但无法理解错误信息。我的意思是,什么是 HTTP Logical service

所以我们通过 GitHubLinkerd2 提出了一个 issue。他们对这个问题非常感兴趣,并试图帮助我们解决它,甚至发布了专门的包来调试这个问题。

经过所有讨论,结果证明在 application-a 上设置的 “max_concurrent_streams” 值为 10,不足以处理请求。 Linkerd2 使它可见。我们已将该值从 10 增加到 100。不再出现快速失败的错误。

问题 3:Sidecar 初始化前的出站连接

我们在应用程序启动期间进行 HTTP 调用的应用程序很少。它需要在服务请求之前获取一些信息。所以应用程序试图在 Linkerd2 sidecar 初始化之前建立出站连接,因此它失败了。 K8S 正在重新启动应用程序容器(不是 sidecar 容器),在此期间 sidecar 已准备就绪。所以它在 1 个应用程序容器重启后运行良好。

同样,这是所有服务网格的另一个常见问题。对此没有优雅的解决方案。非常简单的解决方案是在启动期间 “sleep”。GitHub 上有一个未解决的 issue,Linkerd2 人员提供了一个解决方案,我认为这比 “sleep” 需要更多的工作。

我们保持原样。 1 自动应用程序容器重启已经解决了问题。

问题 4: Prometheus

Prometheus是一个用于监控和警报的开源云原生应用程序。它在时间序列数据库中记录实时指标,具有灵活的查询和实时警报。

Linkerd2 有精美的文档教程,可让您携带自己的 Prometheus 实例。我们遵循它并且一切正常,直到我们将一个应用程序网格化,该应用程序使用 Prometheus“PushGateway” 将我们自己的内部指标推送到 Linkerd2 生成的指标之外。

PushGateway 是一种中介服务,它允许您从无法抓取/拉取的作业中推送指标。

在网格之后,500 多个轻量级 Pod 开始通过 sidecar 代理推送指标。我们开始在 PushGateway 端遇到内存问题,我们从 500 多个 pod 中跳过了 9091(PushGateway 端口)的网格。

结论

当艾莉亚杀死夜王时,并非一切都那么容易。在正在运行的系统中进行更改一直很困难。我们知道在与 Linkerd2 集成时会遇到一些障碍,但我们一一解决了我们的问题。

References:

  • https://linkerd.io/
  • https://prometheus.io/
  • https://pulsar.apache.org/
  • https://youtu.be/3wGMV60wBm4

本文分享自微信公众号 - 黑客下午茶(hi-weishao),作者:为少

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.1)

    在 Intenseye,我们 follow(跟随) trends(趋势) & hype(最被炒作) 的技术,并在使用时应用最佳实践。我们在用 Scala、Go、...

    为少
  • Linkerd 2.10(Step by Step)—使用 Helm 安装 Linkerd

    Linkerd 可以选择通过 Helm 安装,而不是使用 linkerd install 命令。

    为少
  • Linkerd 2.10(Step by Step)—安装多集群组件

    Linkerd 中的多集群支持需要在默认控制平面安装之上进行额外的安装和配置。本指南将介绍此安装和配置以及您可能遇到的常见问题。

    为少
  • Linkerd 2.10(Step by Step)—生成您自己的 mTLS 根证书

    为了支持网格化 Pod 之间的 mTLS 连接, Linkerd 需要一个信任锚证书(trust anchor certificate)和一个带有相应 key ...

    为少
  • 为什么Linkerd不使用Envoy

    问卷链接(https://www.wjx.cn/jq/97146486.aspx)

    CNCF
  • Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

    一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票。愿最好的 emoji 获胜。

    为少
  • Service Mesh 框架选型对比分析:Linkerd、Envoy、Istio、Conduit

    当前,业界主要有以下主要几种Service Mesh框架,下面进行详细的说明及对比。

    xcbeyond
  • Linkerd 2.10(Step by Step)—调试 502s

    当 Linkerd 代理在处理请求时遇到连接错误时,它通常会返回 HTTP 502(Bad Gateway)响应。由于缺乏可用信息,很难弄清楚为什么会发生这些错...

    为少
  • 企业级服务网格架构之路解读|Service Mesh在会话层解耦

    这是一本由Nginx赞助,O’Reilly出版社出品的关于服务网格的书籍,本书标题是 The Enterprise Path to Service Mesh ,...

    CNCF
  • 【Service Mesh资料整理】可能是目前最全的

    Service mesh ,中文译作“服务网格”,一般情况下不翻译,因为太别扭,不禁让人想起当年的网格计算和志愿计算等概念。Service mesh 可能是今...

    杨振涛
  • 【Service Mesh资料整理】可能是目前最全的

    Service mesh ,中文译作“服务网格”,一般情况下不翻译,因为太别扭,不禁让人想起当年的网格计算和志愿计算等概念。Service mesh 可能是今...

    杨振涛
  • Kubernetes中的Service Mesh(第1部分):Service的重要指标

    原文地址:https://dzone.com/articles/a-service-mesh-for-kubernetes-part-1-top-line-se...

    Techeek
  • Linkerd 2.10(Step by Step)—导出指标

    按照设计,Linkerd 仅在较短的固定时间窗口(目前为 6 小时)内保留指标数据。这意味着如果 Linkerd 的指标数据对您很有价值,您可能希望将其导出到成...

    为少
  • Linkerd 2.10—使用 Debug Sidecar,注入调试容器来捕获网络数据包

    调试服务网格(service mesh)可能很困难。当某些东西不起作用时, 是代理(proxy)有问题吗?与应用程序(application)?与客户端(cli...

    为少
  • TB一周萃选第3期

    ? 一 一周文章精粹 01 Go初学者的类型系统入门 对于Go初学者而言,尤其是对那些从OO语言转到Go的开发者,在他们大脑中根深蒂固的OO type hie...

    企鹅号小编
  • 从Service Mesh谈如何做好监控

    谈到 Service Mesh,人们总是想起微服务和服务治理,从 Dubbo 到 Spring Cloud (2016开始进入国内研发的视野,2017年繁荣)再...

    用户5397975
  • Linkerd 2.10(Step by Step)—暴露 Dashboard

    您可以通过 ingress 暴露仪表板,而不是每次想要 查看发生了什么时都使用 linkerd viz dashboard。这也会暴露 Grafana。

    为少
  • 腾讯云Service Mesh生产实践及架构演进

    ? 背景介绍 Service Mesh(服务网格)是一个基础设施层,让服务之间的通信更安全、快速和可靠,是云原生技术栈的关键组建之一。2018 年是 Ser...

    腾讯技术工程官方号
  • 中国 KubeCon + CloudNativeCon 演讲提案征集

    ? ? PART ONE 概 述 提案征集 (CFP) 现已开放。 提交提案[1] 如果您没有使用过 CFP 系统,您需要在提交前注册并创建一个账户。 请在首...

    腾源会

扫码关注云+社区

领取腾讯云代金券