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

一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票。愿最好的 emoji 获胜。
该应用程序由以下 3 个服务组成:
- emojivoto-web:
Web前端和REST API - emojivoto-emoji-svc:用于查找和列出
emoji的gRPC API - emojivoto-voting-svc:用于投票和排行榜的
gRPC API
实战
腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用
运行
在 Minikube 中
使用 Linkerd2 服务网格将应用程序部署到 Minikube。
安装
linkerdCLIcurl https://run.linkerd.io/install | sh
安装
Linkerd2linkerd install | kubectl apply -f -
查看仪表盘!
linkerd dashboard
Inject, Deploy, and Enjoy
kubectl kustomize kustomize/deployment | \
linkerd inject - | \
kubectl apply -f -
使用应用程序!
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 镜像:
更新
common.mk中的标签名称创建
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
构建 & 推送
multi-arch docker镜像到hub.docker.comdocker login
make multi-arch
更新:
docker-compose.ymlkustomize/deployment/emoji.ymlkustomize/deployment/vote-bot.ymlkustomize/deployment/voting.ymlkustomize/deployment/web.yml
分发到
Linkerd website repokubectl 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
Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序的更多相关文章
- 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless
作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...
- 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片
目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 ...
- Service Mesh服务网格新生代--Istio(转)
万字解读:Service Mesh服务网格新生代--Istio 官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...
- Linkerd 2:5 分种厘清 Service Mesh 相关术语
API Gateway(API 网关) API gateway 位于应用程序的前面,旨在解决身份验证和授权.速率限制以及为外部消费者提供公共访问点等业务问题. 相比之下,service mesh 专注 ...
- 服务网格istio概念应知应会
一.背景 最近架构组基于istio开发了服务网格(Service Mesh)平台,借此机会把相关的背景知识做一次学习和记录,方便回头查看. 初版的效果: 二.istio 官方手册:https://is ...
- Service Mesh服务网格之Linkerd架构
今天详细介绍一下Linkerd的架构. 控制平面 Linkerd控制平面是一组在专用Kubernetes命名空间中运行的服务(在Linked默认情况下).这些服务完成各种事情——聚合遥测数据.提供面向 ...
- 微服务(Microservices)和服务网格(Service Mesh)架构概念整理
注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...
- Service Mesh服务网格:是什么和为什么
Service Mesh服务网格:是什么和为什么 - 好雨云帮 CSDN 博客 - CSDN博客 https://blog.csdn.net/zyqduron/article/details/8043 ...
- Service Mesh(服务网格)
Service Mesh(服务网格) 什么是Service Mesh(服务网格)Service mesh 又译作 "服务网格",作为服务间通信的基础设施层.Buoyant 公司的 ...
随机推荐
- javascript获取日期,年月,日
<SCRIPT LANGUAGE="JavaScript"> var myDate = new Date(); myDate.getYear(); ...
- double类型数据有的时候null的判断
double不是Double,无法通过 == null来判断 如何进行double的null判断呢 double avg = avg.getValue() // 此时不会报错 // 通过如下进行判断 ...
- onnx算子大全
本文通过此脚本从def文件自动生成.不要直接修改,而是编辑算子定义. 对于算子输入/输出的可辩别的,它可以是可辩别的.不可辩别的或未定义的.如果未指定变量的可辩别的,则该变量具有未定义的可辩别的. a ...
- 基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化
基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化 Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Auto ...
- java数据提交时问题
form 表单中的action有参数时,当method为get时,servlet无法获取该参数 ajax提交数据,servlet无法进行请求转发和重定向. ${pageContext.request. ...
- .NET平台系列22:.NET Core/.NET5/.NET6 对比 .NET Framework
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<.NET平台系列2 .NET Framework 框架详解>与 <.NET平台系列7 .NET Core 体系结构 ...
- 我的N年软件测试感悟
1.前言 大家好!我是Meng前段时间,很荣幸被一合作伙伴邀请发表一篇文章,主题为"这些年,我所从事软件测试的一些感悟",正好趁着这个机会,我也好好总结一下. 2.测试培训 对于软 ...
- Java基础_循环嵌套_打印乘法口诀、菱形,各种图形,计算二元一次和三元一次方程组_7
循环嵌套 打印乘法口诀 for(int j=1;j<=9;j++){ for(int i=1;i<=j;i++){ System.out.print(i+"*"+j+& ...
- selenium常用方法集合
一.selenium定位元素的8种方法: 1.find_element_by_id() 2.find_element_by_name() 3.find_element_by_css() 4.find_ ...
- PTA题目集4-6总结
PTA题目集4-6总结 一:前言 在题集4-6中,所考查的主要知识点有正则表达式,类与类之间的调用,类的聚合,继承,封装,接口与多态,三种排序方法如选择排序,冒泡排序,插入排序,ArrayList,s ...