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 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
posted @ 2021-07-21 10:00  为少  阅读(506)  评论(0)    收藏  举报