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也会被自动删除

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

相关推荐
寻星探路12 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧14 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法15 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72515 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎15 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄15 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
金刚猿15 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
忆~遂愿16 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds16 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹16 小时前
【Java基础】多态 | 打卡day2
java·开发语言