
一個微服務應用程序,允許用戶為他們最喜歡的表情符號(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。
-
安裝
linkerdCLIcurl https://run.linkerd.io/install | sh -
安裝
Linkerd2linkerd 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.comdocker login make multi-arch -
更新:
docker-compose.ymlkustomize/deployment/emoji.ymlkustomize/deployment/vote-bot.ymlkustomize/deployment/voting.ymlkustomize/deployment/web.yml
-
分發到
Linkerd website repokubectl 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
