一个微服务应用程序,允许用户为他们最喜欢的表情符号(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. Java读取SQL server数据库

    要打开SQL server 的三个服务,然后再执行代码. package com.sql; import java.sql.SQLException; import java.sql.Statemen ...

  2. 08.ElementUI 2.X 源码学习:源码剖析之工程化(三)

    0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...

  3. Mobileye独创性创新

    Mobileye独创性创新 尽管存在相似之处,但Nvidia的SFF无法与Mobileye的RSS相匹配,后者是领先的AV安全模型 迈向无人驾驶的未来,Mobileye继续以新的创新引领行业,不仅将使 ...

  4. AIFramework框架Jittor特性(下)

    AIFramework框架Jittor特性(下)

  5. NVIDIA安倍架构

    NVIDIA安倍架构 NVIDIA Ampere ArchitectureNVIDIA The Heart of the World's Highest-Performing, Elastic Dat ...

  6. 使用nGraph的Intel&#174;Xeon&#174;上的高性能TensorFlow

    使用nGraph的IntelXeon上的高性能TensorFlow High-performance TensorFlow* on Intel Xeon Using nGraph 最近宣布了nGrap ...

  7. GVS灵动系列家族上新 | 稳住,我们能“银”

    用天赐的色库 给生活增加些艺术的气息 生活本应多点探索的乐趣 今天 GVS灵动系列家族流光银(白玻璃) 全新上线 用灵感朝圣自然之道 邂逅另一种柔性美学 与早前的经典黑.星耀灰 和而不同,美美与共 携 ...

  8. Java-数组拷贝

    数组拷贝 首先了解深拷贝 浅拷贝数组的四种拷贝方式: 1.for循环拷贝 代码示例: import java.util.Arrays; public class TestDemo{ public st ...

  9. MySQL笔记03(黑马)

    今日内容 DQL:查询语句 排序查询 聚合函数 分组查询 分页查询 约束 多表之间的关系 范式 数据库的备份和还原 DQL:查询语句 排序查询 语法:order by 子句 order by 排序字段 ...

  10. Django(63)drf权限源码分析与自定义权限

    前言 上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问 权限源码分析 源码入口:APIView.py文件下的initial方法下的check_per ...