|
|
|
|
公众号矩阵

Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票。愿最好的 emoji 获胜。

作者: 为少来源: 黑客下午茶|2021-07-21 05:23

一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票。愿最好的 emoji 获胜。

该应用程序由以下 3 个服务组成:

emojivoto-web:Web 前端和 REST API

  • https://github.com/BuoyantIO/emojivoto/tree/main/emojivoto-web

emojivoto-emoji-svc:用于查找和列出 emoji 的 gRPC API

  • https://github.com/BuoyantIO/emojivoto/tree/main/emojivoto-emoji-svc

emojivoto-voting-svc:用于投票和排行榜的 gRPC API

  • https://github.com/BuoyantIO/emojivoto/blob/main/emojivoto-voting-svc

实战

腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用

运行

在 Minikube 中

使用 Linkerd2 服务网格将应用程序部署到 Minikube。

1.安装 linkerd CLI

  1. curl https://run.linkerd.io/install | sh 

2.安装 Linkerd2

  1. linkerd install | kubectl apply -f - 

3.查看仪表盘!

  1. linkerd dashboard 

4.Inject, Deploy, and Enjoy

  1. kubectl kustomize kustomize/deployment | \ 
  2.     linkerd inject - | \ 
  3.     kubectl apply -f - 

5.使用应用程序!

  1. minikube -n emojivoto service web-svc 

在 docker-compose 中

也可以使用 docker-compose(不带 Linkerd2)运行应用程序。

构建并运行:

  1. make deploy-to-docker-compose 

Web 应用程序将在 docker 主机的端口 8080 上运行。

通过 URL

独立部署到现有集群:

  1. kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment 

生成一些流量

VoteBot 服务可以为你带来一些流量。它对表情符号“随机”投票如下:

  • 15% 的选票投给 🍩
  • 不给 🍩 投票时,它会随机选择一个表情符号

如果您使用上述 instructions(部署说明) 运行应用程序,则 VoteBot 将已部署,并将开始向投票端点发送流量。

如果您想手动运行机器人:

  1. export WEB_HOST=localhost:8080 # replace with your web location 
  2. go run emojivoto-web/cmd/vote-bot/main.go 

发布新版本

要构建和推送 multi-arch docker 镜像:

1.更新 common.mk 中的标签名称

2.创建 Buildx 构建器实例

  1. docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 
  2. docker buildx create --name=multiarch-builder --driver=docker-container --use 
  3. docker buildx inspect multiarch-builder --bootstrap 

3.构建 & 推送 multi-arch docker 镜像到 hub.docker.com

  1. docker login 
  2. 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

  1. kubectl kustomize kustomize/deployment  > ../website/run.linkerd.io/public/emojivoto.yml 
  2. kubectl kustomize kustomize/daemonset   > ../website/run.linkerd.io/public/emojivoto-daemonset.yml 
  3. 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 文件,构建应用程序

  1. make build 

启动投票服务

  1. GRPC_PORT=8081 go run emojivoto-voting-svc/cmd/server.go 

[在单独的终端窗口中] 启动 emoji 服务

  1. GRPC_PORT=8082 go run emojivoto-emoji-svc/cmd/server.go 

[在单独的终端窗口中] 捆绑前端资源

  1. cd emojivoto-web/webapp 
  2. yarn install 
  3. yarn webpack # one time asset-bundling OR 
  4. yarn webpack-dev-server --port 8083 # bundle/serve reloading assets 

[在单独的终端窗口中] 启动 Web 服务

  1. export WEB_PORT=8080 
  2. export VOTINGSVC_HOST=localhost:8081 
  3. export EMOJISVC_HOST=localhost:8082 
  4.  
  5. # if you ran yarn webpack 
  6. export INDEX_BUNDLE=emojivoto-web/webapp/dist/index_bundle.js 
  7.  
  8. # if you ran yarn webpack-dev-server 
  9. export WEBPACK_DEV_SERVER=http://localhost:8083 
  10.  
  11. # start the webserver 
  12. go run emojivoto-web/cmd/server.go 

[可选] 启动投票机器人以自动生成流量。

  1. export WEB_HOST=localhost:8080 
  2. go run emojivoto-web/cmd/vote-bot/main.go 

查看 emojivoto

  1. open http://localhost:8080 

测试 Linkerd 服务配置文件

Service Profiles 是 Linkerd 的一个特性, 它提供了每条路由的功能,如遥测(telemetry)、超时(timeouts)和重试(retries)。 Emojivoto 应用程序旨在通过以下说明展示服务配置文件。

Service Profiles:https://linkerd.io/2/features/service-profiles

从 .proto 文件生成 ServiceProfile 定义

emoji 和 voting 服务是具有 Protocol Buffers (protobuf) definition 文件的 gRPC 应用程序。这些 .proto 文件可用作 linkerd profile 命令的输入, 以创建 ServiceProfile definition yaml 文件。Linkerd Service Profile 文档 概述了创建 yaml 文件所需的步骤,这些是您可以从该存储库的根目录使用的命令:

  1. linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto 
  2. linkerd profile --proto proto/Voting.proto voting-svc -n emojivoto 

Protocol Buffers (protobuf):https://developers.google.com/protocol-buffers

gRPC:https://grpc.io

Linkerd Service Profile 文档:https://linkerd.io/2/tasks/setting-up-service-profiles/#protobuf

这些命令中的每一个都会输出 yaml,您可以将其写入文件或管道, 直接将其写入 kubectl apply。例如:

  • 写入文件:
  1. linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto > emoji 
  2. -sp.yaml 
  • 直接 apply:
  1. linkerd profile --proto proto/Voting.proto voting-svc -n emojivoto | \ 
  2. kubectl apply -f - 

为 Web 部署生成 ServiceProfile 定义

emojivoto 的 web-svc 部署是一个由 Go server 托管的 React 应用程序。我们可以使用 linkerd profile auto creation,使用以下命令为 web-svc 生成 ServiceProfile 资源:

  1. linkerd profile -n emojivoto web-svc --tap deploy/web --tap-duration 10s | \ 
  2.    kubectl apply -f - 

现在为所有服务生成了服务配置文件,您可以在 Linkerd Dashboard 上或使用 linkerd routes 命令观察每个服务的每条路由指标

  1. linkerd -n emojivoto routes deploy/web-svc --to svc/emoji-svc 

linkerd profile auto creation

  • https://linkerd.io/2/tasks/setting-up-service-profiles/#auto-creation

Linkerd Dashboard

  • https://linkerd.io/2/features/dashboard

【编辑推荐】

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区
  2. 为了让你上网更爽,路由器这些年都经历了啥
  3. 六个应该避免的IT管理陷阱
  4. Java 8 失宠!开发人员向 Java 11 转移...
  5. 这5款软件工具,让你的工作效率翻倍提升
  6. 惊喜!新的Windows 10 21H2版正式发布,推出三个新功能
【责任编辑:姜华 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

带你轻松入门 RabbitMQ

带你轻松入门 RabbitMQ

轻松入门RabbitMQ
共4章 | loong576

26人订阅学习

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

12人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

41人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微