DeathStarBench微服务部署

DeathStarBench部署

主要有三个应用,三个应用之间有公用的微服务

  • Social Network (released)
  • Media Service (released)
  • Hotel Reservation (released)

在这里插入图片描述
在这里插入图片描述

官方git仓库

hotelreservation 部署

在k8s集群中部署

Pre-requirements

  • Docker
  • luarocks (apt-get install luarocks)
  • luasocket (luarocks install luasocket)
  • kubernetes集群

step1: 构建所有微服务镜像

首先找到构建镜像的shell脚本<path-of-repo>/hotelReservation/kubernetes/scripts/build-docker-images.sh

#!/bin/bash

cd $(dirname $0)/..


EXEC="docker buildx"

USER="igorrudyk1"

TAG="latest"

# ENTER THE ROOT FOLDER
cd ../
ROOT_FOLDER=$(pwd)
$EXEC create --name mybuilder --use

for i in hotelreservation #frontend geo profile rate recommendation reserve search user #uncomment to build multiple images
do
  IMAGE=${i}
  echo Processing image ${IMAGE}
  cd $ROOT_FOLDER
  $EXEC build -t "$USER"/"$IMAGE":"$TAG" -f Dockerfile . --platform linux/arm64,linux/amd64 --push
  cd $ROOT_FOLDER

  echo
done
cd - >/dev/null

因为官方考虑到微服务要去多种架构的平台上部署,所以这里用了buildx工具,但是我的集群服务器都是amd架构的,所以直接用docker build就行,修改了一下:

#!/bin/bash

cd $(dirname $0)/..


EXEC="docker build"

USER="nuaaxyli"

TAG="latest"

# ENTER THE ROOT FOLDER
cd ../
ROOT_FOLDER=$(pwd)
# $EXEC create --name mybuilder --use
svc=("frontend" "geo" "profile" "rate" "recommendation" "reserve" "search" "user")
for i in "${svc[@]}" #frontend geo profile rate recommendation reserve search user #uncomment to build multiple images
do
  IMAGE=${i}
  echo Processing image ${IMAGE}
  cd $ROOT_FOLDER
  $EXEC -t "$USER"/"$IMAGE":"$TAG" -f Dockerfile .
  docker push "$USER"/"$IMAGE":"$TAG"
  cd $ROOT_FOLDER

  echo
done

里面的dockerfile在hotelReservation路径下

FROM golang:1.21 as builder

WORKDIR /workspace

COPY go.sum go.sum
COPY go.mod go.mod
COPY vendor/ vendor/

COPY cmd/ cmd/
COPY dialer/ dialer/
COPY registry/ registry/
COPY services/ services/
COPY tls/ tls/
COPY tracing/ tracing/
COPY tune/ tune/

COPY config.json config.json

RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go install -ldflags="-s -w" -mod=vendor ./cmd/...

遇到docker源访问超时问题就进入/etc/docker/daemon.json更换docker源就行,docker源最近封了很多,以下是我的:

{
  "registry-mirrors":  [
    "http://docker.registry.cyou",
    "http://dhub.kubesre.xyz",
    "https://dockerpull.com",
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://dockerhub.icu",
    "https://hub.rat.dev",
    "https://docker.1panel.live",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "exec-opts":["native.cgroupdriver=systemd"]
}

其他步骤出问题也一样,尽量把构建过程用日志打印出来,使用命令

docker build -t <image> --progress=plain

如果遇到docker镜像内部启动程序等的问题,因为无法查看未启动容器的docker log,所以就想办法让容器启动,但不触及错误部分,举个例子:


FROM golang:1.21 as builder

WORKDIR /workspace

COPY go.sum go.sum
COPY go.mod go.mod
COPY vendor/ vendor/

COPY cmd/ cmd/
COPY dialer/ dialer/
COPY registry/ registry/
COPY services/ services/
COPY tls/ tls/
COPY tracing/ tracing/
COPY tune/ tune/

COPY config.json config.json

RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go install -ldflags="-s -w" -mod=vendor ./cmd/...

# 添加这两句
RUN chmod a+x ./main.sh
CMD ["sh", "./main.sh"]

mail.sh

sleep 10000s

然后执行docker exec <image> /bin/bash即可进入容器查看文件结构等

step2: 部署

执行kubectl apply -Rf <path-of-repo>/hotelReservation/kubernetes/

执行后出现一下问题:
https://github.com/delimitrou/DeathStarBench/issues/343

我已经把我的解决办法放上去了

拿geo举例,容器启动时路径为/workspace,geo-deployment.yaml文件里的容器启动command是./geo,所以显示文件不存在,go 编译后的可执行文件在GOPATH/bin目录下,我的是在/go/bin,所以把这里的./geo改为/go/bin/geo,另外我也不知道为啥clone下来的geo-deployment.yaml文件里的container.image不是之前步骤里构建的服务镜像,所以我直接改成了之前步骤里构建的服务镜像geo

在这里插入图片描述
执行kubectl get pods

在这里插入图片描述

简单进入容器访问服务是否运行正常:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值