微服务架构被企业级开发广泛采用,而跟着事务迅速开展,服务数量也呈现爆破式的增长。日常开发过程中一套测验环境或许包含成千上百个服务。在协作过程中等待环境、抢占环境、验证冲突已成为常态。而长期开展导致的技术债和根底架构复杂度又十分高,复制多套环境存在较高难度,工程师日常协作只能在等待中苦不堪言。

在 Zadig V1.11.0 版别中推出了环境自测形式,工程师能够根据一套含全量服务的基准环境低成本建立独享的开发者子环境。运用 Istio 和 Tracing 组件的链路追踪和流量动态路由的才能,完成开发者子环境与基准环境联调的意图,从而解决大规模微服务下工程师被环境问题堵塞的情况。

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

下面以服务网格组件Istio+ 企业采用率十分广泛的SkyWalking+ 典型微服务架构 Spring Boot 项目PiggyMetrics为例,演示如何运用 Zadig 自测形式完成工程师日常自测联调过程。

Zadig on Github
Zadig on Gitee

项目简介

本例PiggyMetrics项目,架构如下:

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境


服务装备文件参阅YAML,服务组成如下:

8 个 Spring Boot 应用程序:

  • account-service
  • auth-service
  • config-service (首要管理服务依靠的 configmap 和 secret 等装备)
  • gateway
  • monitoring-service
  • notification-service
  • registry-service
  • statistics-service

4 个 MongoDB 实例:

  • account-mongodb
  • auth-mongodb
  • notification-mongodb
  • statistics-mongodb

1 个 RabbitMq:

  • rabbitmq

关于 statistics-service 服务开发者需求自测联调,能够根据基准环境拉起一套含有 config-service’ 和 statistics-service’ 服务的子环境,经过拜访基准环境的地址,并且在恳求中加上子环境相应的 header 信息可完成拜访子环境的才能。效果图如下:

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

前置预备工作

根底组件信息

  • Kubernetes 版别:v1.20.11(Node 2*8c16g)
  • Zadig 版别:1.11.0+
  • Skywalking 版别:v8.8.1
  • ElasticSearch 版别:7.5.1
  • Istio 版别:1.12.1

装置组件

  1. 装置 Zadig:装置方法参阅官方文档:快速装置 | Zadig 文档
  2. 装置 Istio:装置方法参阅官方文档:Installation Guides
  3. 装置 SkyWalking
kubectl create ns skywalking
git clone https://github.com/apache/skywalking-kubernetes
cd skywalking-kubernetes
helm repo add elastic https://helm.elastic.co
helm dep up chart/skywalking
helm install skywalking skywalking -n skywalking -f ./skywalking/values-es7.yaml 

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

预备基准环境

1、在 Zadig 上创立项目piggymetrics,装备服务,服务 YAML fork 自Zadig 代码库,可运用「从代码库同步」方法批量导入服务装备。

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境



服务 YAML 声明中,已经过 initContainer 同享 SkyWalking Agent jar 到事务容器。initContainer 所运用的 IMAGE 经过以下方法生成:

# 选择对应版别的 Agent jar 包下载,并构建成镜像。Dockerfile示例如下:
FROM busybox:latest
RUN mkdir -p /usr/skywalking/agent/
ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/
WORKDIR /

Agent jar 包下载

事务镜像所运用的 IMAGE 生成方法举例:

FROM java:8-jre
ADD ./target/statistics-service.jar /app/
ENTRYPOINT ["sh","-c","java -Dapp.id=$SW_AGENT_NAME -Xmx200m $JAVA_OPTS -Dskywalking.agent.service_name=$SW_AGENT_NAME -Dskywalking.collector.backend_service=$SW_AGENT_COLLECTOR_BACKEND_SERVICES -jar /app/statistics-service.jar"]
EXPOSE 7000

需求根据实际情况修改服务 YAML 的环境变量中 skywalking-oap 的地址:SW_AGENT_COLLECTOR_BACKEND_SERVICES 的值,即 < service-name >. < namespace-name >.svc.cluster.local

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

2、创立包含全量服务的基准环境base

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境



部署完成后,可从 SkyWalking UI 上检查的服务之间的依靠联系如下:

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

敞开自测形式

在基准环境预备完成今后即可敞开自测形式并创立包含config-servicestatistics-service服务的子环境subdev.

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

创立完成后,修改子环境的中服务依靠的中间件等装备,环境装备 – 修改 configmapspecial-config-env,修改中间件地址为:< service-name >. < namespace-name >svc.cluster.local。

apiVersion: v1
data:
  account_mongodb_host: account-mongodb.piggymetrics-env-base.svc.cluster.local
  auth_mongodb_host: auth-mongodb.piggymetrics-env-base.svc.cluster.local
  auth_service_host: auth-service.piggymetrics-env-base.svc.cluster.local
  notification_mongodb_host: notification-mongodb.piggymetrics-env-base.svc.cluster.local
  rabbitmq_host: rabbitmq.piggymetrics-env-base.svc.cluster.local
  registry_service_host: registry.piggymetrics-env-base.svc.cluster.local
  statistics_mongodb_host: statistics-mongodb.piggymetrics-env-base.svc.cluster.local
kind: ConfigMap
metadata:
  name: special-config-env

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境


完成装备修改后,子环境环境即可正常和基准环境交互。

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

验证自测形式

拜访 gateway 服务的接口:/account/current
拜访链路如下:

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

拜访基准环境

本机拜访集群中的 gateway 服务,需求先做端口转发。

kubectl port-forward service/gateway 8085:80 -n  piggymetrics-env-base
  • 方法一: Chrome 拜访 localhost:8085 页面正常操作,即拜访的是基准环境。

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

  • 方法二: 运用 curl 命令恳求基准环境
curl -v -X PUT -H "Authorization: Bearer c7f5d94f-8eca-4702-96b4-f496837e8e29" -H "Content-Type:application/json" -d '{"note":null,"incomes":[{"income_id":1,"title":"10000www","icon":"wallet","currency":"USD","period":"MONTH","amount":"10000","converted":"NaN"}],"expenses":[],"saving":{"amount":0,"capitalization":false,"deposit":false,"currency":"USD","interest":0}}' localhost:8085/accounts/current

上述恳求中的 access tokenBearer c7f5d94f-8eca-4702-96b4-f496837e8e29能够经过登录 piggymetrics web 端新建用户获取,如下图所示。

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境

拜访子环境

拜访地址运用 base 环境的地址,并在恳求 header 中增加字段:

  • x-env:表示恳求转发到的子环境名,如 x-env=subdev
  • sw8:参阅跨进程传达的头部协议 sw8 详情

方法一: 运用Chrome 插件 ModHeader,使页面建议的恳求在 header 中增加字段。加上字段后,能够运用 Chrome 页面操作,拜访子环境进行自测联调。

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境



方法二: 运用 curl 命令将恳求转发到子环境,运用子环境进行自测联调,恳求 header 中增加字段 x-env、sw8。

curl -v -X PUT -H "Authorization: Bearer c7f5d94f-8eca-4702-96b4-f496837e8e29" -H 'x-env: subdev' -H 'sw8: 1-Mjk3ZWIyYTIzNzk2NGQzZDgzMzVkMjk3MTA3NjliNjQuNDkuMTY1MTczNjc1NDEwNTAwMDE=-Mjk3ZWIyYTIzNzk2NGQzZDgzMzVkMjk3MTA3NjliNjQuNDkuMTY1MTczNjc1NDEwNTAwMDA=-1-U2VydmljZUI=-MTEwY2VhMzFhODcwNDBlZTkwN2QxZjQxOTg0MjUzMTFAMTkyLjE2OC4wLjI0MA==-R0VUOi9ncmVldGluZy97bmFtZX0=-U2VydmljZUE6ODA=' -H "Content-Type:application/json" -d '{"note":null,"incomes":[{"income_id":1,"title":"10000www","icon":"wallet","currency":"USD","period":"MONTH","amount":"10000","converted":"NaN"}],"expenses":[],"saving":{"amount":0,"capitalization":false,"deposit":false,"currency":"USD","interest":0}}' localhost:8085/accounts/current


检查子环境 subdev 中 statistics-service 服务的日志,可知恳求已到子环境服务中。

kubectl logs statistics-service-5966d6b65c-5sc98 -n piggymetrics-env-subdev|grep "statistics-service-"

stio + SkyWalking + Spring Boot 实战 -Zadig 自测模式搞定开发者子环境


至此已完成自测形式的才能,工程师能够根据实际情况根据基准环境创立归于自己的子环境。

Zadig,让工程师更专注创造!欢迎参加开源吐槽群

Zadig on Github

Zadig on Gitee