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

為少發表於2021-07-21

一個微服務應用程式,允許使用者為他們最喜歡的表情符號(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

相關文章