一個微服務應用程式,允許使用者為他們最喜歡的表情符號(emoji
)投票,並跟蹤排行榜上收到的投票。願最好的 emoji
獲勝。
該應用程式由以下 3
個服務組成:
- emojivoto-web:
Web
前端和REST API
- emojivoto-emoji-svc:用於查詢和列出
emoji
的gRPC API
- emojivoto-voting-svc:用於投票和排行榜的
gRPC API
實戰
騰訊雲 K8S 叢集實戰 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 應用
執行
在 Minikube 中
使用 Linkerd2
服務網格將應用程式部署到 Minikube
。
-
安裝
linkerd
CLIcurl https://run.linkerd.io/install | sh
-
安裝
Linkerd2
linkerd install | kubectl apply -f -
-
檢視儀表盤!
linkerd dashboard
-
Inject, Deploy, and Enjoy
kubectl kustomize kustomize/deployment | \ linkerd inject - | \ kubectl apply -f -
-
使用應用程式!
minikube -n emojivoto service web-svc
在 docker-compose 中
也可以使用 docker-compose
(不帶 Linkerd2
)執行應用程式。
構建並執行:
make deploy-to-docker-compose
Web
應用程式將在 docker
主機的埠 8080
上執行。
通過 URL
獨立部署到現有叢集:
kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment
生成一些流量
VoteBot
服務可以為你帶來一些流量。它對錶情符號“隨機”投票如下:
15%
的選票投給 ?- 不給 ? 投票時,它會隨機選擇一個表情符號
如果您使用上述 instructions(部署說明)
執行應用程式,則 VoteBot
將已部署,並將開始向投票端點傳送流量。
如果您想手動執行機器人:
export WEB_HOST=localhost:8080 # replace with your web location
go run emojivoto-web/cmd/vote-bot/main.go
釋出新版本
要構建和推送 multi-arch docker
映象:
-
更新
common.mk
中的標籤名稱 -
建立
Buildx
構建器例項docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker buildx create --name=multiarch-builder --driver=docker-container --use docker buildx inspect multiarch-builder --bootstrap
-
構建 & 推送
multi-arch docker
映象到hub.docker.com
docker login make multi-arch
-
更新:
docker-compose.yml
kustomize/deployment/emoji.yml
kustomize/deployment/vote-bot.yml
kustomize/deployment/voting.yml
kustomize/deployment/web.yml
-
分發到
Linkerd website repo
kubectl kustomize kustomize/deployment > ../website/run.linkerd.io/public/emojivoto.yml kubectl kustomize kustomize/daemonset > ../website/run.linkerd.io/public/emojivoto-daemonset.yml kubectl kustomize kustomize/statefulset > ../website/run.linkerd.io/public/emojivoto-statefulset.yml
Prometheus 指標
預設情況下,投票服務在埠 8801
上公開有關當前投票計數的 Prometheus 指標。
這可以通過取消設定 PROM_PORT
環境變數來禁用。
本地開發
Emojivoto webapp
這個應用程式是用 React
編寫的,並使用 webpack
打包。
使用以下命令執行 emojivoto go services
並在前端進行開發。
設定 proto
檔案,構建應用程式
make build
啟動投票服務
GRPC_PORT=8081 go run emojivoto-voting-svc/cmd/server.go
[在單獨的終端視窗中] 啟動 emoji
服務
GRPC_PORT=8082 go run emojivoto-emoji-svc/cmd/server.go
[在單獨的終端視窗中] 捆綁前端資源
cd emojivoto-web/webapp
yarn install
yarn webpack # one time asset-bundling OR
yarn webpack-dev-server --port 8083 # bundle/serve reloading assets
[在單獨的終端視窗中] 啟動 Web
服務
export WEB_PORT=8080
export VOTINGSVC_HOST=localhost:8081
export EMOJISVC_HOST=localhost:8082
# if you ran yarn webpack
export INDEX_BUNDLE=emojivoto-web/webapp/dist/index_bundle.js
# if you ran yarn webpack-dev-server
export WEBPACK_DEV_SERVER=http://localhost:8083
# start the webserver
go run emojivoto-web/cmd/server.go
[可選] 啟動投票機器人以自動生成流量。
export WEB_HOST=localhost:8080
go run emojivoto-web/cmd/vote-bot/main.go
檢視 emojivoto
open http://localhost:8080
測試 Linkerd 服務配置檔案
Service Profiles 是 Linkerd
的一個特性,
它提供了每條路由的功能,如遙測(telemetry
)、超時(timeouts
)和重試(retries
)。
Emojivoto
應用程式旨在通過以下說明展示服務配置檔案。
從 .proto
檔案生成 ServiceProfile 定義
emoji
和 voting
服務是具有
Protocol Buffers (protobuf)
definition 檔案的 gRPC 應用程式。
這些 .proto
檔案可用作 linkerd profile
命令的輸入,
以建立 ServiceProfile
definition yaml 檔案。
Linkerd Service Profile 文件
概述了建立 yaml
檔案所需的步驟,這些是您可以從該儲存庫的根目錄使用的命令:
linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto
linkerd profile --proto proto/Voting.proto voting-svc -n emojivoto
這些命令中的每一個都會輸出 yaml
,您可以將其寫入檔案或管道,
直接將其寫入 kubectl apply
。例如:
- 寫入檔案:
linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto > emoji
-sp.yaml
- 直接 apply:
linkerd profile --proto proto/Voting.proto voting-svc -n emojivoto | \
kubectl apply -f -
為 Web 部署生成 ServiceProfile 定義
emojivoto
的 web-svc
部署是一個由 Go server
託管的 React
應用程式。我們可以使用
linkerd profile auto creation,使用以下命令為 web-svc 生成 ServiceProfile
資源:
linkerd profile -n emojivoto web-svc --tap deploy/web --tap-duration 10s | \
kubectl apply -f -
現在為所有服務生成了服務配置檔案,您可以在
Linkerd Dashboard
上或使用 linkerd routes
命令觀察每個服務的每條路由指標
linkerd -n emojivoto routes deploy/web-svc --to svc/emoji-svc