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
。
安装
linkerd
CLIcurl https://run.linkerd.io/install | sh
安装
Linkerd2
linkerd 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.com
docker login
make multi-arch
更新:
docker-compose.yml
kustomize/deployment/emoji.yml
kustomize/deployment/vote-bot.yml
kustomize/deployment/voting.yml
kustomize/deployment/web.yml
分发到
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
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 公司的 ...
随机推荐
- Django(49)drf解析模块源码分析
前言 上一篇分析了请求模块的源码,如下: def initialize_request(self, request, *args, **kwargs): """ Retu ...
- XLearning - 深度学习调度平台
XLearning - 深度学习调度平台 软件简介 XLearning **** 是奇虎 360 开源的一款支持多种机器学习.深度学习框架调度系统.基于 Hadoop Yarn 完成了对TensorF ...
- 智能物联网(AIoT,2020年)(下)
智能物联网(AIoT,2020年)(下) 12工业物联网是AIoT在工业领域第一战场 工业物联网分为感知.决策.执行,OS与软件是大脑+神经 13工业场景下一步如何使用AIoT 不止工业物联网:用人工 ...
- 基于TensorRT优化的Machine Translation
基于TensorRT优化的Machine Translation 机器翻译系统用于将文本从一种语言翻译成另一种语言.递归神经网络(RNN)是机器翻译中最流行的深度学习解决方案之一. TensorRT机 ...
- 【NX二次开发】Block UI 反向
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- Pytest学习笔记2-setup和teardown
前言 我们在做自动化的时候,常常有这样的需求: 执行每一条用例时,都重新启动一次浏览器 每一条用例执行结束时,都清除测试数据 在unittest中,我们可以使用 setUp() 和 tearDown( ...
- noip模拟9[斐波那契·数颜色·分组](洛谷模拟测试)
这次考试还是挺好的 毕竟第一题被我给A了,也怪这题太简单,规律一眼就看出来了,但是除了第一题,剩下的我只有30pts,还是菜 第二题不知道为啥我就直接干到树套树了,线段树套上一个权值线段树,然后我发现 ...
- WPF Frame 的 DataContext 不能被 Page 继承
转载至https://blog.csdn.net/sinat_31608641/article/details/88914517 已测试解决方案可行,因为WPF相关资料稀少,防止日后404,特搬运到自 ...
- 关于 Windows 下 Qt 开发,这个问题必须要搞清楚!
小伙伴们,大家好,小北师兄又来喂饭啦,从上次写完<一个例子让你秒懂 Qt Creator 编译原理>后,师兄对于 Qt 的一些环境配置有了更深的理解,这对师兄进行 Qt 的后续学习起到了很 ...
- IP地址与子网的划分
一.IP地址 1.IP地址的定义 (1).IP地址有32位二进制数组成,一般用点分十进制来表示 (2).IP地址由两部分组成 网络部分(NETWORK) 主机部分(HOST) 2.IP地址的分类 IP ...