Linkerd服务网格项目构建与开发指南

Linkerd服务网格项目构建与开发指南

linkerd Old repo for Linkerd 1.x. See the linkerd2 repo for Linkerd 2.x. linkerd 项目地址: https://gitcode.com/gh_mirrors/li/linkerd

前言

Linkerd是一个高性能、轻量级的服务网格解决方案,作为云原生架构中的重要组件,它提供了服务间通信的可观测性、可靠性和安全性保障。本文将深入介绍如何从源码构建Linkerd项目,帮助开发者快速上手项目开发工作。

项目结构概述

Linkerd项目主要包含两大核心组件:

  1. Linkerd:服务网格路由器,负责处理服务间的通信流量
  2. Namerd:路由策略管理中心,提供服务发现和路由规则管理功能

项目采用多模块化设计,使用Scala语言开发,构建工具采用sbt(Scala Build Tool)。

开发环境准备

sbt构建工具配置

项目提供了专门的sbt启动脚本,开发者应使用项目提供的./sbt脚本而非系统安装的sbt版本,这能确保使用兼容的sbt版本。

启动sbt交互式环境:

$ ./sbt
>

查看所有子项目:

> projects

项目配置主要位于:

  • project/LinkerdBuild.scala:定义子项目和构建配置
  • project/Base.scala:扩展sbt API功能

构建与测试

编译项目

全项目编译:

> compile

指定子项目编译(以router-http为例):

> router-http/compile

测试体系

Linkerd项目包含多层次的测试策略:

  1. 单元测试(test):纯逻辑测试,不依赖系统和网络

    > test
    
  2. 端到端测试(e2e):多模块组合测试,可能使用随机端口和临时文件

    > e2e:test
    
  3. 集成测试(integration):依赖外部服务或程序的测试

开发过程中推荐使用testQuick命令,它能智能地只运行受代码变更影响的测试:

> ~testQuick

HTTP/2协议测试

项目提供了专门的HTTP/2一致性测试工具:

  • h2spec:协议一致性测试
  • h2load:性能测试工具

运行测试:

$ ./ci/h2.sh spec    # 运行一致性测试
$ ./ci/h2.sh load    # 运行性能测试
$ ./ci/h2.sh spec load  # 同时运行两种测试

打包与发布

构建可执行文件

使用assembly插件打包包含所有依赖的可执行文件:

打包Linkerd:

> linkerd/assembly

打包Namerd:

> namerd/assembly

无Zookeeper构建

对于不使用Zookeeper的环境,可以构建精简版本:

./sbt linkerd-no-zk/assembly  # Linkerd无ZK版本
./sbt namerd-no-zk/assembly   # Namerd无ZK版本

版本发布流程

  1. 确保CHANGES.md文件已更新
  2. 创建并推送git标签:
    git tag 0.0.10 && git push origin 0.0.10
    
  3. 执行打包命令

Docker镜像构建

构建基础Docker镜像:

> ;linkerd/docker ;namerd/docker

构建JDK版本镜像:

> ;linkerd/jdk:docker; namerd/jdk:docker

运行Docker容器示例:

docker run -p 4140:4140 -p 9990:9990 -v /path/to/config:/config buoyantio/linkerd:0.9.1-SNAPSHOT /config/static_namer.yaml

自定义镜像配置

修改基础镜像:

./sbt 'set Base.dockerJavaImage in (linkerd, Bundle) := "myFromImage"' linkerd/docker

构建无Zookeeper依赖的Docker镜像:

./sbt linkerd-no-zk/docker   # Linkerd无ZK镜像
./sbt namerd-no-zk/docker   # Namerd无ZK镜像

DCOS支持

Namerd提供了专门的DCOS配置,与ZooKeeper dtab存储配合使用时,可以自动初始化ZooKeeper pathPrefix并提供默认dtab。

本地运行引导程序

$ ./sbt "namerd/dcos:run-main io.buoyant.namerd.DcosBootstrap namerd/examples/zk.yaml"

DCOS打包与运行

打包可执行文件:

$ ./sbt namerd/dcos:assembly
$ namerd/target/scala-2.12/namerd-0.9.1-SNAPSHOT-dcos-exec namerd/examples/zk.yaml

打包Docker镜像:

$ ./sbt namerd/dcos:docker
$ docker run -p 2181:2181 -p 4180:4180 -v /path/to/repo:/myapp -w /myapp buoyantio/namerd:0.9.1-SNAPSHOT-dcos namerd/examples/zk.yaml

测试开发建议

  1. 测试目录结构

    router/http/src/
    ├── e2e      # 端到端测试
    ├── main     # 主代码
    └── test     # 单元测试
    
  2. 测试框架:使用ScalaTest的FunSuite风格,避免过度使用mock框架

  3. 异步测试:利用test-util项目提供的工具测试Finagle异步API

结语

通过本文的指导,开发者可以全面了解Linkerd项目的构建流程和开发规范。项目采用现代化的构建工具和测试策略,为开发者提供了良好的开发体验。无论是进行功能开发、问题修复还是自定义构建,都能基于这套完善的工具链高效开展工作。

linkerd Old repo for Linkerd 1.x. See the linkerd2 repo for Linkerd 2.x. linkerd 项目地址: https://gitcode.com/gh_mirrors/li/linkerd

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢璋声Shirley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值