九、kubernetes部署springboot微服务

kubernetes部署springboot微服务集群

  • 部署步骤
    • 准备工作
    • 环境介绍
    • 验证

部署步骤

准备工作

需安装kubernetes集群;
需安装docker;
需安装Nexus3(可选,不部署私服则你需要上传程序镜像到docker官方源);
如果未安装参考我的【kubernetes集群部署教程】【kubernetes部署Nexus3教程】

项目的技术栈中需要的中间件全部部署完毕,分别如下:
(1)postgresql:关系型数据库。
(2)consul:微服务注册中心和配置中心。
(3)seata:分布式微服务事务管理中间件。
(4)mongodb:非关系型数据库,存储分布式微服务日志,分布式文件(图片、视频、文档)。
(5)redis:分布式数据缓存,分布式乐观锁、热点数据等。
(6)rocketmq:消息通信、并发控制等。
然后开始部署springboot应用程序到kubernetes集群中。

环境介绍

我这里部署不会在服务器上部署什么jdk、maven等(因为都使用kubernetes了为什么还要管理jdk和maven),只需要将代码上传到服务器的目录即可按照步骤进行快速部署。
(1)把必须的jdk和maven镜像先pull下来,然后传送到私服,这样构建镜像的时候速度至少是五倍。
PS.10.108.69.78:8082地址是我nexus3的docker镜像私服地址,不懂的先参考我写的部署教程【kubernetes部署Nexus3教程】

docker pull maven:3.8.4-openjdk-17-slim
docker pull openjdk:17
docker tag maven:3.8.4-openjdk-17-slim 10.108.69.78:8082/maven:3.8.4-openjdk-17-slim
docker tag openjdk:17 10.108.69.78:8082/openjdk:17
docker push 10.108.69.78:8082/maven:3.8.4-openjdk-17-slim
docker push 10.108.69.78:8082/openjdk:17

(2)编写Dockerfile

# 指定基础镜像,从私服拉取
FROM 10.108.69.78:8083/maven:3.8.4-openjdk-17-slim AS build
# 设置时区
ENV TZ=Asia/Shanghai
# 设置工作目录
WORKDIR /app
# 替换maven依赖下载镜像(加速并指向私服,配置内容继续参考我的nexus3教程)
# 如果不替换settings.xml到构建容器中使用默认的setting.xml没有加速你会构建到明天!!!
COPY ./settings.xml /usr/share/maven/conf/settings.xml
# 复制当前项目的下的所有代码文件到镜像中
COPY . /app
# 编译项目
RUN mvn package -DskipTests
# 使用JDK17 build
FROM 10.108.69.78:8083/openjdk:17
# 设定编译好的jar在镜像中的目录,我这里使用我们公司名字做目录
WORKDIR /wenben

# 复制构建的 JAR 文件到镜像中
# 注意这个/app/wenben-serverless-cloud-gateway/target/wenben-serverless-cloud-gateway-0.0.1-SNAPSHOT.jar 路径是我的打包好的springcloud网关程序的路径
COPY --from=build /app/wenben-serverless-cloud-gateway/target/wenben-serverless-cloud-gateway-0.0.1-SNAPSHOT.jar ./gateway.jar
# 这个是认证微服务
COPY --from=build /app/wenben-serverless-cloud-auth/wenben-serverless-cloud-auth-root/target/wenben-serverless-cloud-auth-root-0.0.1-SNAPSHOT.jar ./auth.jar
# 这个是基础服务
COPY --from=build /app/wenben-serverless-cloud-platform/wenben-serverless-cloud-platform-root/target/wenben-serverless-cloud-platform-root-0.0.1-SNAPSHOT.jar ./platform.jar
# 这是消息消费服务
COPY --from=build /app/wenben-serverless-cloud-message/target/wenben-serverless-cloud-message-0.0.1-SNAPSHOT.jar ./message.jar
# PS.具体的路径看你的项目工程

(3)docker打包镜像并上传到私服
直接在代码根目录(就是最外层的pom.xml,我的项目是多模块化管理的)上执行:

docker build -t wenben/library -f Dockerfile .
docker tag wenben/library 10.108.69.78:8082/wenben/library
docker push 10.108.69.78:8082/wenben/library

(4)编写kubernetes部署yaml文件(以网关微服务为例子)内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wenben-gateway
spec:
  # 副本数,根据服务器资源和访问量就行自动调整即可
  replicas: 3
  selector:
    matchLabels:
      app: wenben-gateway
  template:
    metadata:
      labels:
        app: wenben-gateway
    spec:
      containers:
        - name: wenben-gateway
          # 从私服拉取镜像
          image: 10.108.69.78:8083/wenben/library
          ports:
            - containerPort: 80
          command: ["java", 
                    "-jar",
                    "-Dspring.profiles.active=dev",   # 具体环境可自行切换,我这里在本地环境
                    "/wenben/gateway.jar"] # 其他微服务再创建其他的yaml更改这和所有的name即可

---

apiVersion: v1
kind: Service
metadata:
  name: wenben-gateway
spec:
  selector:
    app: wenben-gateway
  ports:
    # 我的网关程序使用80端口
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP
  # 老样子固定clusterIP方便管理,其他微服务不用设定不需要固定的IP
  # 生产环境不使用这样,暴露外网的方式很多
  clusterIP: 10.104.42.219

PS.有多少个微服务就编写多少个yaml即可
最后创建:

kubectl apply -f deployment-gateway.yaml

验证

修改局域网中需要远程连接的windows电脑的hosts文件

10.104.42.219 wenben-gateway

最后访问http://wenben-gateway即可看到整套微服务程序,我这里使用了swagger,则地址就是http://wenben-gateway/swagger-ui.html

你可能感兴趣的:(kubernetes,spring,boot,微服务,分布式)