K8S部署SpringBoot应用

灰太狼 2023-10-10 09:55 213阅读 0赞

必要条件

  1. K8S环境机器做部署用,推荐一主双从。推荐安装文档
  2. Docker Harbor私有仓库,准备完成后在需要使用仓库的机器docker login。
  3. 开发机器需要Docker环境,build及push使用

基础配置准备

一、构建基本Springboot工程,本例所用版本及结构如下图

版本及结构
创建测试代码,简单打印几行log
测试代码

二、maven配置

1. properties配置
  1. <properties>
  2. <docker.image.prefix>pasq</docker.image.prefix>
  3. <!-- docker harbor地址 -->
  4. <docker.repostory>192.168.1.253:8081</docker.repostory>
  5. </properties>
2. plugins配置
  1. <plugins>
  2. <plugin>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-maven-plugin</artifactId>
  5. </plugin>
  6. <!-- 使用Maven插件直接将应用打包为一个Docker镜像 -->
  7. <plugin>
  8. <groupId>com.spotify</groupId>
  9. <!-- 这里使用新版dockerfile-maven-plugin插件 -->
  10. <artifactId>dockerfile-maven-plugin</artifactId>
  11. <version>1.4.10</version>
  12. <configuration>
  13. <!-- Dockerfile目录指定 -->
  14. <dockerfile>src/main/docker/Dockerfile</dockerfile>
  15. <repository>${docker.repostory}/${docker.image.prefix}/${project.artifactId}</repository>
  16. <!-- 生成镜像标签 如不指定 默认为latest -->
  17. <tag>${project.version}</tag>
  18. <buildArgs>
  19. <!-- 理论上这里定义的参数可以传递到Dockerfile文件中,目前未实现 -->
  20. <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
  21. </buildArgs>
  22. </configuration>
  23. </plugin>
  24. </plugins>

三、Dockerfile文件

  1. #基础镜像,如果本地仓库没有,会从远程仓库拉取
  2. FROM openjdk:8-jdk-alpine
  3. #容器中创建目录
  4. RUN mkdir -p /usr/local/pasq
  5. #编译后的jar包copy到容器中创建到目录内
  6. COPY target/dockertest-0.0.1.jar /usr/local/pasq/app.jar
  7. #指定容器启动时要执行的命令
  8. ENTRYPOINT ["java","-jar","/usr/local/pasq/app.jar"]

构建镜像并推送

  1. 构建镜像,执行如下命令
    插件编译
    构建镜像日志如下
    编译日志
  2. 完成后docker images可以查看打包的镜像
    在这里插入图片描述
  3. 命令窗口执行docker push REPOSITORY推送至docker harbor
    推送
    docker harbor可以查看到推送的镜像
    dockerharbor

K8S部署

1. 创建dockertest.yaml文件如下

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: dockertest
  5. namespace: default
  6. labels:
  7. app: dockertest
  8. spec:
  9. type: NodePort
  10. ports:
  11. - port: 8080
  12. nodePort: 30090 #service对外开放端口
  13. selector:
  14. app: dockertest
  15. ---
  16. apiVersion: apps/v1
  17. kind: Deployment #对象类型
  18. metadata:
  19. name: dockertest #名称
  20. labels:
  21. app: dockertest #标注
  22. spec:
  23. replicas: 3 #运行容器的副本数,修改这里可以快速修改分布式节点数量
  24. selector:
  25. matchLabels:
  26. app: dockertest
  27. template:
  28. metadata:
  29. labels:
  30. app: dockertest
  31. spec:
  32. containers: #docker容器的配置
  33. - name: dockertest
  34. image: 192.168.1.253:8081/pasq/dockertest:0.0.1 # pull镜像的地址 ip:prot/dir/images:tag
  35. imagePullPolicy: IfNotPresent #pull镜像时机,
  36. ports:
  37. - containerPort: 8080 #容器对外开放端口

2. 运行kubectl create -f dockertest.yaml创建Deployment

完成后执行kubectl get pods如下图,可以看到启动了三个pod
getpods

3. 运行kubectl logs -f podsname查看日志

新开窗口分别查看3个pod的日志,然后访问k8s master节点IP+service对外开放端口访问springboot应用,我这里使用http://192.168.1.250:30090/test/test, 多刷新几次可以看到pod直接做了负载,如下图:
pods1:
pods1
pods2:
pods2
pods3:
pods3
运行kubectl delete -f dockertest.yaml可以删除pods与service
修改dockertest.ymal 中replicas数量后,运行kubectl apply -f dockertest.yaml可以扩容或收缩副本数量

到此,k8s部署springboot应用完成。有心得交流的朋友可以私信或留言。

发表评论

表情:
评论列表 (有 0 条评论,213人围观)

还没有评论,来说两句吧...

相关阅读