一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji
)投票,并跟踪排行榜上收到的投票。愿最好的 emoji
获胜。
该应用程序由以下 3
个服务组成:
Web
前端和 REST API
emoji
的 gRPC API
gRPC API
腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用
使用 Linkerd2
服务网格将应用程序部署到 Minikube
。
安装 linkerd
CLI
curl https://run.linkerd.io/install | sh
安装 Linkerd2
linkerd install | kubectl apply -f -
查看仪表盘!
linkerd dashboard
Inject, Deploy, and Enjoy
kubectl kustomize kustomize/deployment | \
linkerd inject - | \
kubectl apply -f -
使用应用程序!
minikube -n emojivoto service web-svc
也可以使用 docker-compose
(不带 Linkerd2
)运行应用程序。
构建并运行:
make deploy-to-docker-compose
Web
应用程序将在 docker
主机的端口 8080
上运行。
独立部署到现有集群:
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
镜像:
更新 common.mk
中的标签名称
创建 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
构建 & 推送 multi-arch docker
镜像到 hub.docker.com
docker login
make multi-arch
更新:
docker-compose.yml
kustomize/deployment/emoji.yml
kustomize/deployment/vote-bot.yml
kustomize/deployment/voting.yml
kustomize/deployment/web.yml
分发到 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
默认情况下,投票服务在端口 8801
上公开有关当前投票计数的 Prometheus 指标。
这可以通过取消设置 PROM_PORT
环境变量来禁用。
这个应用程序是用 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
Service Profiles 是 Linkerd
的一个特性,
它提供了每条路由的功能,如遥测(telemetry
)、超时(timeouts
)和重试(retries
)。
Emojivoto
应用程序旨在通过以下说明展示服务配置文件。
.proto
文件生成 ServiceProfile 定义emoji
和 voting
服务是具有
definition 文件的 gRPC 应用程序。
这些 .proto
文件可用作 linkerd profile
命令的输入,
以创建 ServiceProfile
definition yaml 文件。
概述了创建 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 | <br /> kubectl apply -f -
emojivoto
的 web-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 routes
命令观察每个服务的每条路由指标
linkerd -n emojivoto routes deploy/web-svc --to svc/emoji-svc
手机扫一扫
移动阅读更方便
你可能感兴趣的文章