k8s-部署springboot容器化应用

一些概念:

master节点控制执行命令在Node节点部署容器,从Node->service->deploy->pod->docker容器镜像,pod里边是docker容器,deploy里边是pod

流程:

springboot项目打包、制作jdk镜像、制作spring boot镜像、空运行测试生成yaml文件、k8s命令通过yaml文件部署,当然也可以不生成yaml文件,即直接k8s命令部署spring boot项目镜像

自定义jdk镜像:

1.服务器上传jdk软件安装包+制作jdk的docker file文件

服务器上上传jdk软件安装包,制作dockerfile文件(实际不太清楚,难道直接cat个文件就行了???),感觉这个docker文件中的内容就是在当前服务器下安装jdk的过程

2.把dockerfile文件运行制作成jdk镜像:

docker build -t jdk1.8.0_251.含义:-t相当于起了个jdk1.8.0_251标签名字,.指的是当前目录下

执行完命令后就会如下第2张图docker images查询到jdk镜像,

构建spring boot项目镜像

1.先把spring boot项目打包成jar包或者war包吧放到服务器上,并制作成dockerfile文件

(实际我不知道咋制作的,要重新学一下docker了),可能跟制作jdk镜像一样,也是直接cat个文件吗???dockerfile文件中的内容如下:

要运行spring boot项目需要有jdk,所以要先继承jdk镜像即From jdk镜像名称,在自定义jdk镜像中制作的jdk镜像名称为jdk1.8.0_251,即docker file中的文件内容为From jdk1.8.0_251

2.把dockerfile文件运行制作成spring boot项目镜像:

docker build -t 38-springboot-k8s-1.0.0-jar.含义:.的含义是当前目录,意思是运行当前目录下的dockerfile文件,然后构建成一个叫38-springboot-k8s-1.0.0-jar的spring boot镜像,运行命令之后看如下第3张图查询images镜像出现spring boot项目镜像

空运行测试+部署spring boot项目镜像

1.空运行测试生成yaml文件,下边步骤2可以使用ymal文件部署spring boot镜像:

制造出spring boot的项目镜像之后,剩下的就是跟k8s部署tomcat、nginx容器化一样了,直接执行kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar镜像,即创建一个叫springboot-k8s的控制器,并创建pod,拉取38-springbott-k8s-1.0.0-jar镜像,并让控制器运行Pod。命令后加了--dry run -o yaml即为空运行测试,空运行测试实际没有执行命令,但是会输出执行命令的效果,空运行测试就是--dry-run,-o指的是output输出,-o yaml指的是执行命令后最终输出一个yaml文件,yaml文件内容如下第3、4张图。即springboot项目镜像在k8s运行时可以是以yaml文件的方式提交给k8s的api server去运行。

空运行测试实际没有执行命令,即执行命令后不会创建deploy、pod等,控制器名字不能是以数字开头,要以英文字母开头

执行kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar --dry -o yaml >boot-delpoy.yaml命令:将yaml内容输入到boot-delpoy.yaml文件中

2.通过yaml文件部署或通过命令直接部署spring boot项目容器:

k8s启动运行springboot镜像,可以通过运行上边步骤1输出的ymal文件,即kubectl apply -f bootdeploy.yaml文件,apply应用,-f指的是-file,即应用步骤4输出的boot-deploy.yaml文件,好处是可以改动yaml文件中的启动参数,或者直接通过运行像nginx或者tomcat镜像那样直接运行即kubectl create deployment 控制器名称 --image=spring boot项目镜像名称

通过yaml文件部署:

(1)修改yaml文件k8s拉取镜像策略,把默认从远程中央仓库拉取镜像改成从本地获取(实际生产中还是得确认下改不改吧,视频中说的是因为springboot项目镜像在本地服务器,并没有把镜像放到远程仓库,所以k8s肯定从远程仓库拉取不下来镜像,所以要修改拉取策略,实际生产中不确定,会不会把spring boot镜像也放到远程仓库???)

控制器名字不能是以数字开头,要以英文字母开头

(2)暴露端口,允许浏览器访问部署在k8s的spring boot服务:

k8s中一个master对应多个node,每个Node里边有好多Pod,每个Pod里边有好多docker容器镜像???

用户浏览器访问k8s中的spring-boot项目镜像路径:

浏览器----》nginx+keepalive(nginx只需部署在当前服务器上做个高可用,不需要做容器化)-----》ingress(对k8s中的服务做负载均衡和统一service端口映射)---->k8s中的service-------->k8s中的deploy------>k8s中的pod------->k8s中的docker容器镜像

linux:

springboot项目下dockerfile镜像内容:

linux删除文件命令:

k8s相关命令:

k8s删除service:kubectl delete service service名称(当把应用暴露端口之后就会有service)

k8s删除控制器:kubectl delete deploy 控制器名称,注:删除控制器之后对应pod也会被自动删除

。。。。。。。。。。。。。。。。。。。。。。。人生漫漫。。。。。。。。

相关推荐
miaobinfei3 小时前
docker拉取dify镜像,执行docker compose up -d 报错
运维·docker·容器
代码山河3 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目
kobe_OKOK_4 小时前
docker compose命名卷 映射到宿主机的路径
运维·docker·容器
Escalating_xu5 小时前
【Linux 网络编程】五种 I/O 模型与非阻塞 I/O:从“等数据”到正确处理 EAGAIN
java·linux·网络
程序猿乐锅5 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
无言听风雨丶5 小时前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
Java后端的Ai之路5 小时前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
AntsData6 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat6 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰6 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai