Emoji.voto,Linkerd 服務網格(service mesh)的示例應用程序


一個微服務應用程序,允許用戶為他們最喜歡的表情符號(emoji)投票,並跟蹤排行榜上收到的投票。願最好的 emoji 獲勝。

該應用程序由以下 3 個服務組成:

實戰

騰訊雲 K8S 集群實戰 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 應用

運行

在 Minikube 中

使用 Linkerd2 服務網格將應用程序部署到 Minikube

  1. 安裝 linkerd CLI

    curl https://run.linkerd.io/install | sh
    
  2. 安裝 Linkerd2

    linkerd install | kubectl apply -f -
    
  3. 查看儀表盤!

    linkerd dashboard
    
  4. Inject, Deploy, and Enjoy

    kubectl kustomize kustomize/deployment | \
        linkerd inject - | \
        kubectl apply -f -
    
  5. 使用應用程序!

    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 鏡像:

  1. 更新 common.mk 中的標簽名稱

  2. 創建 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
    
  3. 構建 & 推送 multi-arch docker 鏡像到 hub.docker.com

    docker login
    make multi-arch
    
  4. 更新:

    • docker-compose.yml
    • kustomize/deployment/emoji.yml
    • kustomize/deployment/vote-bot.yml
    • kustomize/deployment/voting.yml
    • kustomize/deployment/web.yml
  5. 分發到 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 ProfilesLinkerd 的一個特性,
它提供了每條路由的功能,如遙測(telemetry)、超時(timeouts)和重試(retries)。
Emojivoto 應用程序旨在通過以下說明展示服務配置文件。

.proto 文件生成 ServiceProfile 定義

emojivoting 服務是具有
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 定義

emojivotoweb-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM