kubernetes集群部署springcloud项目【AL】 (先手工做,非自动化)
#环境:
192.168.73.138 master
192.168.73.139 node1
192.168.73.140 node2
192.168.73.137 harbor、mysql
git clone https://github.com/lizhenliang/simple-microservice.git
地址:https://github.com/lizhenliang/simple-microservice/
代码分支说明:
dev1交付代码
dev2 编写Dockerfile构建镜像
dev3 K8S资源编排
dev4 微服务链路监控
master 最终上线
整体逻辑架构图
1、代码文件解释
1、服务编排
2、在K8S平台部署Erueka集群
3、导入数据库文件到MySQL
4、部署网关(gateway)
5、部署业务程序(product、stock.order)
6、部署前端(portal)
部署须知
1、导入db目录下数据库文件到自己的MySQL服务器
2、修改配置环境(xxx-service/src/main/resources/application.yml,active值决定启用环境配置文件)
3、修改连接数据库配置(xxx-service/src/main/resources/application-fat.yml)
4、修改前端页面连接网关地址(portal-service/src/main/resources/static/js/productList.js和orderList.js)
5、服务启动顺序:eureka -> mysql -> product,stock,order -> gateway -> portal
2、代码编译构建,打包镜像
#上图的-P prod ,可指定对应的配置文件
mvn clean package -Dmaven.test.skip=true
#通过dockerfile ,打包镜像,上传至harbor镜像仓库
2.1 dev1分支的文件 (交付代码):
2.2 gateway-service 网关服务
tips:
不同环境配置文件怎么区分?
#1
java -jar -Dspring.profiles.active=dev xxx.jar
#2
使用配置中心,如Apollo、disconf
2.3 product-service 商品服务
看biz的目录即可, API目录里面是一些接口工具
2.4 eureka-service 注册中心服务
其他的文件夹要看的关键文件,以此类推。
3 、 dev2 编写Dockerfile构建镜像。 以及在最外层的目录pom.xml执行maven打包
#整体打包。 此时每个微服务的文件夹,会生成target。 target文件夹下会有对应的jar包。
mvn clean package -Dmaven.test.skip=true
target下的jar包
3.1 每个微服务都有个dockerfile
docker build -t product .
4 、启动harbor镜像仓库
docker-compose up -d
dev3 批量打包docker镜像脚本
docker_build.sh
tips:执行前需docker login 192.168.31.70
#执行操作
./docker_build.sh
#!/bin/bash
docker_registry=192.168.31.70
# 存储登录Harbor认证信息
kubectl create secret docker-registry registry-pull-secret --docker-server=$docker_registry --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@ctnrs.com -n ms
service_list="eureka-service gateway-service order-service product-service stock-service portal-service"
#参数1的值如果不存在,则使用-:后面的值,$1有值那就用$1的值 。 具体参考shell expansion
service_list=${1:-${service_list}}
work_dir=$(dirname $PWD)
current_dir=$PWD
cd $work_dir
mvn clean package -Dmaven.test.skip=true
for service in $service_list; do
cd $work_dir/$service
# 业务程序需进入biz目录里构建
if ls |grep biz &>/dev/null; then
cd ${service}-biz
fi
#取service的名字。eureka-service会变成eureka ; 具体参考shell expansion
service=${service%-*}
image_name=$docker_registry/microservice/${service}:$(date +%F-%H-%M-%S)
docker build -t ${image_name} .
docker push ${image_name}
# 修改yaml中镜像地址为新推送的,并apply。 如果将下面两行注释,则不会部署到k8s中。 效果就是纯打包docker镜像,推送docker镜像。
sed -i -r "s#(image: )(.*)#\1$image_name#" ${current_dir}/${service}.yaml
kubectl apply -f ${current_dir}/${service}.yaml
done
脚本执行完后,仓库结果,6个镜像: