Istio + SkyWalking + Spring Boot 實戰 -Zadig 自測模式搞定開發者子環境
微服務架構被企業級開發廣泛採用,而隨著業務迅速發展,服務數量也呈現爆炸式的增長。日常開發過程中一套測試環境可能包含成千上百個服務。在協作過程中等待環境、搶佔環境、驗證衝突已成為常態。而長期發展導致的技術債和基礎架構複雜度又非常高,複製多套環境存在較高難度,工程師日常協作只能在等待中苦不堪言。
在 Zadig V1.11.0 版本中推出了環境自測模式,工程師可以基於一套含全量服務的基準環境低成本搭建獨享的開發者子環境。利用 Istio 和 Tracing 元件的鏈路追蹤和流量動態路由的能力,實現開發者子環境與基準環境聯調的目的,從而解決大規模微服務下工程師被環境問題阻塞的情況。
下面以服務網格元件
Istio + 企業採用率非常廣泛的
SkyWalking + 典型微服務架構 Spring Boot 專案
PiggyMetrics 為例,演示如何使用 Zadig 自測模式實現工程師日常自測聯調過程。
專案簡介
本例
PiggyMetrics 專案,架構如下:
服務配置檔案參考
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 資訊可實現訪問子環境的能力。效果圖如下:
前置準備工作
基礎元件資訊
- 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 http://github.com/apache/skywalking-kubernetes cd skywalking-kubernetes helm repo add elastic http://helm.elastic.co helm dep up chart/skywalking helm install skywalking skywalking -n skywalking -f ./skywalking/values-es7.yaml
準備基準環境
1、在 Zadig 上建立專案 piggymetrics
,配置服務,服務 YAML fork 自 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 /
業務映象所使用的 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
2、建立包含全量服務的基準環境 base
。
部署完成後,可從 SkyWalking UI 上檢視的服務之間的依賴關係如下:
開啟自測模式
在基準環境準備完成以後即可開啟自測模式並建立包含
config-service
和
statistics-service
服務的子環境
subdev
.
建立完成後,修改子環境的中服務依賴的中介軟體等配置,環境配置-編輯 configmap
special-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
完成配置修改後,子環境環境即可正常和基準環境互動。
驗證自測模式
訪問 gateway 服務的介面:/account/current
訪問鏈路如下:
-
訪問基準環境
本機訪問叢集中的 gateway 服務,需要先做埠轉發。
kubectl port-forward service/gateway 8085:80 -n piggymetrics-env-base
- 方式一:Chrome 訪問 localhost:8085 頁面正常操作,即訪問的是基準環境。
- 方式二:使用 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 token
Bearer c7f5d94f-8eca-4702-96b4-f496837e8e29
可以通過登入 piggymetrics web 端新建使用者獲取,如下圖所示。
-
訪問子環境
訪問地址使用 base 環境的地址,並在請求 header 中新增欄位:
- x-env:表示請求轉發到的子環境名,如 x-env=subdev
- sw8:參考 跨程序傳播的頭部協議 sw8 詳情
方式一:利用
Chrome 外掛 ModHeader ,使頁面發起的請求在 header 中新增欄位。加上欄位後,可以使用 Chrome 頁面操作,訪問子環境進行自測聯調。
方式二:使用 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-"
至此已實現自測模式的能力,工程師可以根據實際情況基於基準環境建立屬於自己的子環境。
「其他文章」
- KodeRover/Zadig 攜手阿里雲端計算巢幫助企業構建數字化基建:做工程師背後的工程師!
- Don't Block Developer,Zadig v1.16.0 好用小功能集錦
- 終於等到你:Zadig v1.16.0 開發者福利版重磅釋出,用的爽是硬道理,細節拉滿
- 路特斯如何使用 Zadig 實現混合雲全球交付
- 國際化多版本環境如何用 Zadig Migrate 統一資料和程式碼變更
- Zadig 快速體驗,玩轉本地安裝!
- 為什麼說軟體工程能力是產業數字化的核心驅動力? | WISE2022 新經濟之王大會
- 釋出策略知多少?藍綠/紅黑/灰度/滾動...
- 自動駕駛團隊如何用 Zadig 為開發者提供更好體驗
- Zadig Liquibase:資料變更、業務變更、資料回滾,一鍵搞定
- 神奇的 Zadig 工作流:以連結廣大開發者為使命
- 資料庫/SQL 版本管理工具選型指北
- 如何實現 MySQL 程式碼和資料的一站式變更
- Zadig 跨團隊之最佳使用姿勢:搞定開發、測試、運維協作自動化
- 基於 Zadig 的 GitOps 實踐
- 極速 Zadig 構建效率是這樣煉成的
- 主機基礎設施如何使用 Zadig 做持續交付
- Zadig 環境負載均衡:0 人工干預,極速部署
- 打通了!Jira Zadig 實現需求與研發過程追蹤
- 雲原生 DevOps 現狀調研問卷徵集:KodeRover 聯合 OSCHINA 推出