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

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

实战

腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用

运行

在 Minikube 中

使用 Linkerd2 服务网格将应用程序部署到 Minikube

  1. 安装 linkerd CLI

    curl https://run.linkerd.io/install | sh
  2. 安装 Linkerd2

    linkerd install | kubectl apply -f -
  3. 查看仪表盘!

    linkerd dashboard
  4. Inject, Deploy, and Enjoy

    kubectl kustomize kustomize/deployment | \
    linkerd inject - | \
    kubectl apply -f -
  5. 使用应用程序!

    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 镜像:

  1. 更新 common.mk 中的标签名称

  2. 创建 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
  3. 构建 & 推送 multi-arch docker 镜像到 hub.docker.com

    docker login
    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

    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 ProfilesLinkerd 的一个特性,

它提供了每条路由的功能,如遥测(telemetry)、超时(timeouts)和重试(retries)。

Emojivoto 应用程序旨在通过以下说明展示服务配置文件。

.proto 文件生成 ServiceProfile 定义

emojivoting 服务是具有

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 定义

emojivotoweb-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)的示例应用程序的更多相关文章

  1. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

  2. 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片

    目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 ...

  3. Service Mesh服务网格新生代--Istio(转)

    万字解读:Service Mesh服务网格新生代--Istio  官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...

  4. Linkerd 2:5 分种厘清 Service Mesh 相关术语

    API Gateway(API 网关) API gateway 位于应用程序的前面,旨在解决身份验证和授权.速率限制以及为外部消费者提供公共访问点等业务问题. 相比之下,service mesh 专注 ...

  5. 服务网格istio概念应知应会

    一.背景 最近架构组基于istio开发了服务网格(Service Mesh)平台,借此机会把相关的背景知识做一次学习和记录,方便回头查看. 初版的效果: 二.istio 官方手册:https://is ...

  6. Service Mesh服务网格之Linkerd架构

    今天详细介绍一下Linkerd的架构. 控制平面 Linkerd控制平面是一组在专用Kubernetes命名空间中运行的服务(在Linked默认情况下).这些服务完成各种事情——聚合遥测数据.提供面向 ...

  7. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

  8. Service Mesh服务网格:是什么和为什么

    Service Mesh服务网格:是什么和为什么 - 好雨云帮 CSDN 博客 - CSDN博客 https://blog.csdn.net/zyqduron/article/details/8043 ...

  9. Service Mesh(服务网格)

    Service Mesh(服务网格) 什么是Service Mesh(服务网格)Service mesh 又译作 "服务网格",作为服务间通信的基础设施层.Buoyant 公司的 ...

随机推荐

  1. Django(49)drf解析模块源码分析

    前言 上一篇分析了请求模块的源码,如下: def initialize_request(self, request, *args, **kwargs): """ Retu ...

  2. XLearning - 深度学习调度平台

    XLearning - 深度学习调度平台 软件简介 XLearning **** 是奇虎 360 开源的一款支持多种机器学习.深度学习框架调度系统.基于 Hadoop Yarn 完成了对TensorF ...

  3. 智能物联网(AIoT,2020年)(下)

    智能物联网(AIoT,2020年)(下) 12工业物联网是AIoT在工业领域第一战场 工业物联网分为感知.决策.执行,OS与软件是大脑+神经 13工业场景下一步如何使用AIoT 不止工业物联网:用人工 ...

  4. 基于TensorRT优化的Machine Translation

    基于TensorRT优化的Machine Translation 机器翻译系统用于将文本从一种语言翻译成另一种语言.递归神经网络(RNN)是机器翻译中最流行的深度学习解决方案之一. TensorRT机 ...

  5. 【NX二次开发】Block UI 反向

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  6. Pytest学习笔记2-setup和teardown

    前言 我们在做自动化的时候,常常有这样的需求: 执行每一条用例时,都重新启动一次浏览器 每一条用例执行结束时,都清除测试数据 在unittest中,我们可以使用 setUp() 和 tearDown( ...

  7. noip模拟9[斐波那契·数颜色·分组](洛谷模拟测试)

    这次考试还是挺好的 毕竟第一题被我给A了,也怪这题太简单,规律一眼就看出来了,但是除了第一题,剩下的我只有30pts,还是菜 第二题不知道为啥我就直接干到树套树了,线段树套上一个权值线段树,然后我发现 ...

  8. WPF Frame 的 DataContext 不能被 Page 继承

    转载至https://blog.csdn.net/sinat_31608641/article/details/88914517 已测试解决方案可行,因为WPF相关资料稀少,防止日后404,特搬运到自 ...

  9. 关于 Windows 下 Qt 开发,这个问题必须要搞清楚!

    小伙伴们,大家好,小北师兄又来喂饭啦,从上次写完<一个例子让你秒懂 Qt Creator 编译原理>后,师兄对于 Qt 的一些环境配置有了更深的理解,这对师兄进行 Qt 的后续学习起到了很 ...

  10. IP地址与子网的划分

    一.IP地址 1.IP地址的定义 (1).IP地址有32位二进制数组成,一般用点分十进制来表示 (2).IP地址由两部分组成 网络部分(NETWORK) 主机部分(HOST) 2.IP地址的分类 IP ...