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

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

[[412321]]

一个微服务应用程序,允许用户为他们最喜欢的表情符号(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

 

责任编辑:姜华 来源: 黑客下午茶
相关推荐

2021-06-05 10:16:55

Linkerd 服务网格Kubernetes

2021-04-25 08:48:36

Traefik mes服务网格Kubernetes集

2022-08-21 07:17:16

LinkerdKubernetes服务网格

2021-12-08 17:54:55

架构控制平面

2021-12-11 22:21:00

服务配置文件

2021-12-10 18:19:14

授权 Linkerd策略

2021-10-31 20:56:25

Mesh ServiceAPI

2023-11-07 17:32:31

Istiok8s

2022-11-24 14:21:27

微服务ISTIO

2023-06-18 19:21:04

技术架构服务网格

2020-11-15 23:48:57

服务网格微服务网络网络技术

2022-05-16 08:00:00

服务网格架构Kuma

2022-08-30 20:00:37

零信任Linkerd

2020-01-07 09:25:02

服务网格微服务Kubernetes

2019-08-29 08:00:00

微服务架构服务网格

2020-07-13 07:00:03

微服务服务网格架构

2020-08-26 05:45:40

服务网格DevOps开发

2020-10-21 13:31:53

服务网格开源微服务

2022-08-09 08:00:00

服务网格云原生工具

2022-07-06 08:25:17

服务网格Kubernetes
点赞
收藏

51CTO技术栈公众号