一个微服务应用程序,允许用户为他们最喜欢的表情符号(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. Windows家庭版打开或关闭Hyper-V

    打开hyper-v 创建open_hyper-v.bat文件 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper ...

  2. 接触追踪解决方案建立在UWB而不是蓝牙上

    接触追踪解决方案建立在UWB而不是蓝牙上 Contact tracing solution builds on UWB rather than Bluetooth 几个月前,当社会距离明显成为对抗CO ...

  3. MapReduce —— MapTask阶段源码分析(Output环节)

    Dream car 镇楼 ~ ! 接上一节Input环节,接下来分析 output环节.代码在runNewMapper()方法中: private <INKEY,INVALUE,OUTKEY,O ...

  4. JDBC连接MongoDB

    pom文件中导入驱动 <!-- MongoDB驱动 --> <dependency> <groupId>org.mongodb</groupId> &l ...

  5. 【NX二次开发】Block UI 表达式

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

  6. DDD实战课(实战篇)--学习笔记

    目录 DDD实践:如何用DDD重构中台业务模型? 领域建模:如何用事件风暴构建领域模型? 代码模型(上):如何使用DDD设计微服务代码模型? 代码模型(下):如何保证领域模型与代码模型的一致性? 边界 ...

  7. 详解Apache Dubbo的SPI实现机制

    一.SPI SPI全称为Service Provider Interface,对应中文为服务发现机制.SPI类似一种可插拔机制,首先需要定义一个接口或一个约定,然后不同的场景可以对其进行实现,调用方在 ...

  8. CyclicBarrier 原理(秒懂)

    疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 面试必备 + 面试必备 [博客园总入口 ] 疯狂创客圈 经典图书 : <Sprin ...

  9. 【模拟7.19】那一天我们许下约定(组合数学,DP)

    看了题目名字深切怀疑出题人是不是失恋了,然后出题折磨我们.然后这题就愉快的打了个暴力,最后莫名其妙wa20,伤心..... 其实这题正解不是很难想,如果说把暴力的DP搞出来,正解也差不到哪去了, 我们 ...

  10. Linux网络基础TCP/IP

    1.osi:七层 上三层,主要是用户层面;下四层是实际进行数据传输物理层: 设备之间比特流的传输,物理接口,电气特性等 端口号的作用 通过IP找到服务器,通过端口号找到具体哪个服务.网页服务的端口号是 ...