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 公司的 ...
随机推荐
- Stopper的使用
工具类,抽象死循环逻辑的 import java.util.concurrent.atomic.AtomicBoolean; /** * if the process closes, a signal ...
- OneFlow 概念清单
OneFlow 概念清单 本文将对 OneFlow 中涉及到的,常用的一些概念/名词做一个概括性的解释.主要内容针对算法工程师和框架开发者分为以下两部分: 算法开发 框架开发 在算法开发部分,将解释深 ...
- IPv6 与 IPv4现状
IPv6 与 IPv4现状 一.概述 (1) IPv4可提供bai4,294,967,296个地址,IPv6将原来的32位地址空间增大du到128位,数目是zhi2的128次方.能够对地球上每平方米d ...
- HAL库与Cubemx系列|Systick-系统滴答定时器详解
Systick是什么? 关于Systick,在Context-M3权威指南中如此描述: SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号: 15).在以前,大多操作系统需要一 ...
- 十三、给已安装的nginx动态添加模块
给已安装的nginx动态添加模块说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢?具体:这里以安装 --with-http_ssl_module模块为例nginx的模块是需要 ...
- 【linux】驱动-12-并发与竞态
目录 前言 12. 并发&竞态 12.1 并发&竞态概念 12.2 竞态解决方法 12.3 原子 12.3.1 原子介绍 12.3.2 原子操作步骤 12.3.3 原子 API 12. ...
- jQuery04
jQuery内容总结: 1.既然是一个js库,使用之前就要引入js库,是一个.js文件,版本是1.8.3: 2.写一个jQuery页面加载函数(注意与js页面加载函数的区别): $(function( ...
- 面试官:为什么Mysql中Innodb的索引结构采取B+树?
前言 如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时,给自己留一条后路,不要把B树喷的一文不值.因为网上有些答案是说,B树不适合做文件存储系统的索引结构.如果按照那种 ...
- 【dp】10-8题解 vacation
vacations 原题codeforeces round 363 (Div2) c 题目描述 暑假到了, Pb 正在计划他的假期. Pb 准备假期去体育馆锻炼或看电影.但体育馆和电影院都有可能当天不 ...
- redis淘汰+过期双向保证高可用 | redis 为什么那么快?
前言 redis和数据相比除了他们的结构型颠覆以外!还有他们存储位置也是不相同.传统数据库将数据存储在硬盘上每次数据操作都需要IO而Redis是将数据存储在内存上的.这里稍微解释下IO是啥意思.IO就 ...