Kubernetes之在k8s中部署Java应用
部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html
怎么在k8s部署应用
项目迁移到k8s平台是怎样的流程
1,制作镜像
2,控制器管理Pod
3,暴露应用
4,对外发布应用
5,日志/监控
k8s基本概念
Cluster
Cluster 是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用。
Master
Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master 运行 Linux 操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个 Master。
Node
Node 的职责是运行容器应用。Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。Node 运行在 Linux 操作系统,可以是物理机或者是虚拟机。
Pod
Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行,一个Pod里的所有容器共用一个namespaces
Controller
管理Pod的工具,kubernetes通过它来管理集群中的Pod
Deployment
Deployment 是最常用的 Controller,比如前面在线教程中就是通过创建 Deployment 来部署应用的。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。
ReplicaSet
ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet。
DaemonSet
DaemonSet 用于每个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。
StatefuleSet
StatefuleSet 能够保证 Pod 的每个副本在整个生命周期中名称是不变的。而其他 Controller 不提供这个功能,当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。
Job
Job 用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。
Service
Kubernetes Service 定义了外界访问一组特定 Pod 的方式。Service 有自己的 IP 和端口,并把这个IP和后端的Pod所跑的服务的关联起来。Service 为 Pod 提供了负载均衡。
namespace
Namespace 可以将一个物理的 Cluster 逻辑上划分成多个虚拟 Cluster,每个 Cluster 就是一个 Namespace。不同 Namespace 里的资源是完全隔离的。
Kubernetes 默认创建了两个 Namespace,default和kube-system
在k8s中部署一个java应用
下载demo
1 | wget https: / / codeload.github.com / lizhenliang / tomcat - java - demo / zip / master |
解压
1 | tomcat - java - demo - master. zip . zip |
目录db下有mysql初始sql tables_ly_tomcat.sql新建一台主机192.168.1.14用作数据库安装mariadb
1 2 | yum - y install mariadb yum - y install mariadb - server |
创建数据库test导入表
1 2 | use test; source / root / tables_ly_tomcat.sql |
查看导入的表
授权保证master和node可以正常访问该数据库
1 | grant all on test. * to 'test' @ '%' identified by '123.com' ; |
其他主机使用test用户可以正常访问即可
1 | mysql - utest - p123.com - h 192.168 . 1.14 |
安装jdk和maven
1 | yum - y install maven java - 1.8 . 0 - openjdk.x86_64 |
修改数据库链接地址
1 | src / main / resources / application.yml |
编译构建
1 | mvn clean install - Dmaven.test.skip = true |
第一次构建时间稍长
会在文件夹target下面生成一下文件
查看解压文件夹下的Dockerfile
1 2 3 4 | FROM lizhenliang / tomcat LABEL maintainer www.ctnrs.com RUN rm - rf / usr / local / tomcat / webapps / * ADD target / * .war / usr / local / tomcat / webapps / ROOT.war |
引用tomcat 删除默认的根目录,增加刚刚构建的war包至根目录
使用Dockerfile构建镜像 需要使用docker hub的注册用户名yueming33990否则推送会失败提示为requested access to the resource is denied
1 | docker build - t yueming33990 / java - demo . |
注意最后有.符号
推送到镜像仓库其他节点也可以访问
登录
1 | docker login |
需要输入用户名和密码可以去网站https://hub.docker.com注册或者是搭建私有镜像仓库
推送至docker hub
1 | docker push yueming33990 / java - demo |
推送成功在hub.docker.com会生成一个公共的镜像
已经推送至公共的镜像仓库了其他主机可以直接下载
1 | docker pull yueming33990 / java - demo |
k8s使用镜像
1 | kubectl create deployment java - demo - - image = yueming33990 / java - demo - - dry - run - o yaml |
--dry-run测试不在k8s运行
-o yaml 生成yaml格式
执行输出yaml格式
输出重定向至deploy.yaml
1 | kubectl create deployment java - demo - - image = yueming33990 / java - demo - - dry - run - o yaml > deploy.yaml |
修改
运行
1 | kubectl apply - f deploy.yaml |
查看启动的pods
1 | kubectl get pods |
通过日志查看tomcat是否启动
1 | kubectl logs java - demo - b76fc7876 - 5qjgn |
暴露应用
创建一个service
1 | kubectl expose deployment java - demo - - port = 80 - - target - port = 8080 - - type = NodePort - o yaml - - dry - run |
java-demo指定名称
--port指定集群内部访问的端口
--target-port指定容器内跑服务的端口
--type=NodePort 指定类型 集群外部访问
重定向到文件
1 | kubectl expose deployment java - demo - - port = 80 - - target - port = 8080 - - type = NodePort - o yaml - - dry - run > svc.yaml |
运行
1 | kubectl apply - f svc.yaml |
查看pods和svc
1 | kubectl get pods,svc |
web页面访问
1 | http: / / 192.168 . 1.12 : 30457 / |
查看pods分布的节点
1 | kubectl get pods - o wide |
使用k8s部署java应用完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-12-19 Docker Compose
2017-12-19 CentOS设置PPTP拨号连接远程服务器