Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

简介: Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

实战



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


运行



在 Minikube 中


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

  1. 安装 linkerd CLI


curl https://run.linkerd.io/install | sh


  1. 安装 Linkerd2


linkerd install | kubectl apply -f -


  1. 查看仪表盘!


linkerd dashboard


  1. Inject, Deploy, and Enjoy


kubectl kustomize kustomize/deployment | \
    linkerd inject - | \
    kubectl apply -f -


  1. 使用应用程序!


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


  1. 构建 & 推送 multi-arch docker 镜像到 hub.docker.com


docker login
make multi-arch


  1. 更新:
  • docker-compose.yml
  • kustomize/deployment/emoji.yml
  • kustomize/deployment/vote-bot.yml
  • kustomize/deployment/voting.yml
  • kustomize/deployment/web.yml
  1. 分发到 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 应用程序旨在通过以下说明展示服务配置文件。


Service Profileshttps://linkerd.io/2/features/service-profiles


.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


Protocol Buffers (protobuf):https://developers.google.com/protocol-buffers

gRPChttps://grpc.io

Linkerd Service Profile 文档:https://linkerd.io/2/tasks/setting-up-service-profiles/#protobuf


这些命令中的每一个都会输出 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
相关文章
|
1月前
|
Kubernetes Cloud Native JavaScript
为使用WebSocket构建的双向通信应用带来基于服务网格的全链路灰度
介绍如何使用为基于WebSocket的云原生应用构建全链路灰度方案。
|
2月前
|
自然语言处理 监控 Cloud Native
探索微服务架构中的服务网格Service Mesh
【10月更文挑战第7天】服务网格(Service Mesh)是微服务架构中的关键组件,通过在每个服务实例旁部署Sidecar代理,实现服务间通信的管理、监控和安全增强。本文介绍了服务网格的基本概念、核心组件、优势及实施步骤,探讨了其在现代开发中的应用,并提供了实战技巧。
|
4月前
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
5月前
|
Kubernetes Dubbo Cloud Native
如何将Dubbo应用接入服务网格
介绍使用传统Dubbo微服务体系的客户要如何将自己的服务接入到服务网格这一新一代云原生基础设施。
|
5月前
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。
|
7月前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
7月前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
462 1
|
7月前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
|
7月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
342 2
|
2月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。