ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

K8S--部署SpringBoot项目实战

2026/9/16 11:06:57 拓冰建站 浏览量
K8S--部署SpringBoot项目实战

原文网址:K8S--部署SpringBoot项目实战-CSDN博客

简介

本文介绍K8S如何部署SpringBoot项目。

-----------------------------------------------------------------------------------------------
分享Java真实高频面试题,吊打面试官: Java后端真实面试题大全 - 自学精灵
分享靠谱的Java高级实战,包含:高并发、架构、全局处理等:JavaWeb高级实战 - 自学精灵

1.生成应用的docker镜像

把SpringBoot项目的jar包打包为docker镜像,见:Docker Compose--部署SpringBoot项目--实战-CSDN博客

创建后的镜像名称为: custom_docker-springboot

2.部署Harbor

可以使用阿里云镜像仓库,也可以自己部署Harbor。

我这里自己部署Harbor,见:Docker Compose系列--安装harbor--方法/实例-CSDN博客

我的Harbor地址是:192.168.5.193:15001 

部署之后,创建一个项目,本处我创建的项目是:custom_image

3.添加Harbor私库的源

docker和k8s都需要修改。(所有机器都要修改)

1.修改docker

修改/etc/docker/daemon.json文件,添加如下内容:

"insecure-registries":["192.168.5.193:15001"]

如下图所示: 

修改完之后,重启docker:

systemctl daemon-reload
systemctl restart docker

可以用docker info命令查看是否修改成功:

2.修改k8s

见:K8S--解决containerd拉镜像的报错:http: server gave HTTP response to HTTPS client-CSDN博客

4.生成并推送应用镜像

将SpringBoot项目的镜像推送到上边搭建的Harbor私库。

如果以前生成过镜像,先删除一下:

docker rmi 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0 --force

1.生成镜像

法1:直接生成镜像

docker build -t 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0 . --no-cache

法2:通过已有镜像来生成

docker tag custom_docker-springboot:1.0 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0

2.推送镜像

docker push 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0

结果

3.查看镜像

去harbor上查看:(可以发现,已经上传上来了)

5.编写应用的K8S配置文件

1.创建命名空间

创建命名空间配置文件java-app-namespace.yaml,如下

# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:name: java-applabels:name: java-app

然后创建它:

kubectl apply -f java-app-namespace.yaml

2.创建K8S配置文件

在某个目录(本处是/work/devops/k8s/app/demo-springboot)创建k8s.yaml文件,内容如下:

# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: demo-springboot-deploymentnamespace: java-applabels:app: demo-springboot #与Service的selector对应
spec:# 副本的数量replicas: 2selector:# 选择PodmatchLabels:app: demo-springboot# 选择或创建的Pod的模板template:metadata:# 与Deployment的selector对应labels:app: demo-springbootspec:imagePullSecrets:- name: harbor-secretcontainers:- image: 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0name: custom-docker-springboot-1-0# 每次都从远程拉取镜像。默认是IfNotPresent,每次拉取的都是本地的镜像(之前的)imagePullPolicy: Alwaysenv:- name: TZvalue: Asia/Shanghaiports:- containerPort: 8080name: pod-8080---
# 创建Service
apiVersion: v1
kind: Service
metadata:name: demo-springboot-servicenamespace: java-applabels:app: demo-springboot
spec:ports:- name: demo-springboot-portport: 9000   # Service监听的端口targetPort: 8080  # pod自身暴露的端口。对应Deployment的containerPort# 对外的端口号nodePort: 30004# 选择Deploymentselector:app: demo-springboot# NodePort类型可以对外暴露端口type: NodePort

6.启动应用的Pod

到/work/devops/k8s/app/demo-springboot目录下,执行:

​kubectl apply -f k8s.yaml

7.查看启动结果并测试

1.在k8s的dashboard上查看

发现已经成功运行。

2.看日志

法1:dashboard上查看

法2:查看宿主机的卷映射

注意:

两个pod的日志都打印到一个文件里边去了。这里后期会进行优化,每个pod输出到一个文件里。 

法3:用命令查看日志

kubectl logs demo-springboot-deployment-7755445878-7wn5r -n java-app

结果 

3.访问接口进行测试

访问一下SpringBoot的端口:http://192.168.5.193:30004/doc.html

结果

访问接口: