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
相关文章
|
6月前
|
运维 负载均衡 监控
服务网格技术对比:深入比较Istio、Linkerd和Envoy等服务网格解决方案的优缺点
服务网格技术对比:深入比较Istio、Linkerd和Envoy等服务网格解决方案的优缺点
213 0
|
4月前
|
人工智能 Kubernetes TensorFlow
轻松搭建基于服务网格的 AI 应用,然后开始玩
轻松搭建基于服务网格的 AI 应用,然后开始玩
65210 24
|
6月前
|
监控 安全 测试技术
服务网格和CI/CD集成:讨论服务网格在持续集成和持续交付中的应用。
服务网格和CI/CD集成:讨论服务网格在持续集成和持续交付中的应用。
100 0
|
6月前
|
Kubernetes 监控 Go
《Linkerd 2.0:下一代服务网格的探索》
《Linkerd 2.0:下一代服务网格的探索》
292 0
|
9月前
|
Kubernetes 监控 负载均衡
企业级服务网格优化中心:优化Service Mesh以提高性能和高可用性
 以下内容是根据王夕宁在2023年6月份在北京举行的CNCF Kubernetes Community Day(KCD)会议上的演讲主题整理而成。 Service Mesh是一种用于管理微服务架构中网络通信的解决方案,通过在每个服务实例中添加代理,实现流量控制、服务发现、负载均衡等功能。虽然Service Mesh能够提供很多优秀的功能,但也存在一些性能问题, 譬如:延迟增加:Service Me
105 0
企业级服务网格优化中心:优化Service Mesh以提高性能和高可用性
|
9月前
|
Kubernetes Linux 网络安全
Service Mesh 服务网格一:Sidecar模式
Service Mesh 服务网格一:Sidecar模式
|
9月前
|
运维 负载均衡 Kubernetes
Service Mesh 服务网格-宏观介绍
Service Mesh 服务网格-宏观介绍
|
9月前
|
弹性计算 运维 资源调度
Service Mesh 服务网格研发涨薪力作
Service Mesh 服务网格研发涨薪力作
|
2月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
35 2
|
2月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例