前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

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

作者头像
为少
发布2021-07-30 15:40:42
8090
发布2021-07-30 15:40:42
举报
文章被收录于专栏:黑客下午茶

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

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

  • emojivoto-web:Web 前端和 REST API
    • https://github.com/BuoyantIO/emojivoto/tree/main/emojivoto-web
  • emojivoto-emoji-svc:用于查找和列出 emojigRPC 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

安装 linkerd CLI

安装 Linkerd2

查看仪表盘!

Inject, Deploy, and Enjoy

使用应用程序!

在 docker-compose 中

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

构建并运行:

代码语言:javascript
复制
make deploy-to-docker-compose

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

通过 URL

独立部署到现有集群:

代码语言:javascript
复制
kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment

生成一些流量

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

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

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

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

代码语言:javascript
复制
export WEB_HOST=localhost:8080 # replace with your web location
go run emojivoto-web/cmd/vote-bot/main.go

发布新版本

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

更新 common.mk 中的标签名称

创建 Buildx 构建器实例

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

更新:

  • docker-compose.yml
  • kustomize/deployment/vote-bot.yml
  • kustomize/deployment/web.yml

分发到 Linkerd website repo

Prometheus 指标

默认情况下,投票服务在端口 8801 上公开有关当前投票计数的 Prometheus 指标。

这可以通过取消设置 PROM_PORT 环境变量来禁用。

本地开发

Emojivoto webapp

这个应用程序是用 React 编写的,并使用 webpack 打包。使用以下命令运行 emojivoto go services 并在前端进行开发。

设置 proto 文件,构建应用程序

代码语言:javascript
复制
make build

启动投票服务

代码语言:javascript
复制
GRPC_PORT=8081 go run emojivoto-voting-svc/cmd/server.go

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

代码语言:javascript
复制
GRPC_PORT=8082 go run emojivoto-emoji-svc/cmd/server.go

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

代码语言:javascript
复制
cd emojivoto-web/webapp
yarn install
yarn webpack # one time asset-bundling OR
yarn webpack-dev-server --port 8083 # bundle/serve reloading assets

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
export WEB_HOST=localhost:8080
go run emojivoto-web/cmd/vote-bot/main.go

查看 emojivoto

代码语言:javascript
复制
open http://localhost:8080

测试 Linkerd 服务配置文件

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

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

.proto 文件生成 ServiceProfile 定义

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

代码语言:javascript
复制
linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto
代码语言:javascript
复制
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。例如:

  • 写入文件:
代码语言:javascript
复制
linkerd profile --proto proto/Emoji.proto emoji-svc -n emojivoto > emoji
-sp.yaml
  • 直接 apply:
代码语言:javascript
复制
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 资源:

代码语言:javascript
复制
linkerd profile -n emojivoto web-svc --tap deploy/web --tap-duration 10s | \
   kubectl apply -f -

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

代码语言:javascript
复制
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-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客下午茶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实战
  • 运行
    • 在 Minikube 中
      • 在 docker-compose 中
        • 通过 URL
          • 生成一些流量
          • 发布新版本
          • Prometheus 指标
          • 本地开发
            • Emojivoto webapp
              • 测试 Linkerd 服务配置文件
                • 从 .proto 文件生成 ServiceProfile 定义
                • 为 Web 部署生成 ServiceProfile 定义
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档