原文网址: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:直接生成镜像
bash
docker build -t 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0 . --no-cache
法2:通过已有镜像来生成
bash
docker tag custom_docker-springboot:1.0 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0
2.推送镜像
bash
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-app
labels:
name: java-app
然后创建它:
bash
kubectl apply -f java-app-namespace.yaml
2.创建K8S配置文件
在某个目录(本处是/work/devops/k8s/app/demo-springboot)创建k8s.yaml文件,内容如下:
bash
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-springboot-deployment
namespace: java-app
labels:
app: demo-springboot #与Service的selector对应
spec:
# 副本的数量
replicas: 2
selector:
# 选择Pod
matchLabels:
app: demo-springboot
# 选择或创建的Pod的模板
template:
metadata:
# 与Deployment的selector对应
labels:
app: demo-springboot
spec:
imagePullSecrets:
- name: harbor-secret
containers:
- image: 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0
name: custom-docker-springboot-1-0
# 每次都从远程拉取镜像。默认是IfNotPresent,每次拉取的都是本地的镜像(之前的)
imagePullPolicy: Always
env:
- name: TZ
value: Asia/Shanghai
ports:
- containerPort: 8080
name: pod-8080
---
# 创建Service
apiVersion: v1
kind: Service
metadata:
name: demo-springboot-service
namespace: java-app
labels:
app: demo-springboot
spec:
ports:
- name: demo-springboot-port
port: 9000 # Service监听的端口
targetPort: 8080 # pod自身暴露的端口。对应Deployment的containerPort
# 对外的端口号
nodePort: 30004
# 选择Deployment
selector:
app: demo-springboot
# NodePort类型可以对外暴露端口
type: NodePort
6.启动应用的Pod
到/work/devops/k8s/app/demo-springboot目录下,执行:
bash
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
结果
访问接口: