当前位置: 首页 > news >正文

SpringBoot项目通过k8s集群发布与管理

笔者这里有个非常简单的Springboot项目(boonya-game-lab),如果要把他发布到k8s集群应该怎么做呢?使用Docker的都知道镜像,k8s按照自己的配置设置好镜像和副本数量就可以实现了。

现在我们分三步来管理我们的k8s服务。即:构建镜像、推送镜像、发布k8s集群服务。

如果能够科学上网,Windows就可以使用Docker Desktop 快速安排k8s环境。

构建镜像

需要编写Dockerfile来构建本地镜像

# 选择一个轻量级的Java基础镜像
FROM openjdk:17.0.1-jdk-slim
# 使用 RUN 命令创建目录
RUN mkdir -p /app
# 将打包好的jar包复制到镜像中,并重命名(方便引用)
COPY target/boonya-game-lab-0.0.1-SNAPSHOT.jar /app/app.jar
# 切换工作目录/app
WORKDIR /app
# 声明容器运行时暴露的端口(与你的SpringBoot应用端口一致)
EXPOSE 8080
# 设置容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "app.jar"]

镜像构建完了之后还要做容器服务的启动校验:

docker run --name boonya-game-lab -p 8080:8080 docker.io/boonyadocker/boonya-game-lab:latest

启动成功访问首页:

推送镜像

推送镜像需要登录对应的Docker 仓库。

登录命令:

docker login docker.io

推送命令:

docker push docker.io/boonyadocker/boonya-game-lab:latest

验证仓库镜像:

也可以在Docker Desktop上看:

K8s部署脚本

编写deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:name: boonya-game-lab
spec:replicas: 3 # 希望运行的Pod副本数selector:matchLabels:app: boonya-game-labtemplate:metadata:labels:app: boonya-game-labspec:containers:- name: boonya-game-labimage: docker.io/boonyadocker/boonya-game-lab:latest # 替换为你的镜像地址ports:- containerPort: 8080 # 容器端口env: # 可选:设置环境变量- name: JAVA_OPTSvalue: "-Xmx512m"# 可以添加资源限制和健康检查resources:requests:memory: "512Mi"cpu: "250m"limits:memory: "1Gi"cpu: "500m"livenessProbe:httpGet:path: /actuator/health # 假设使用Spring Actuator的健康检查端点port: 8080initialDelaySeconds: 90 # 容器启动后多久开始探测periodSeconds: 10 # 执行探测的频率readinessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:name: boonya-game-lab-service
spec:selector:app: boonya-game-labports:- protocol: TCPport: 80 # Service端口targetPort: 8080 # 容器端口# type: ClusterIP # 默认类型,集群内访问type: LoadBalancer # 如果希望从集群外部访问,可以使用LoadBalancer(云提供商通常支持)或NodePort

发布集群:

kubectl apply -f deployment.yaml

删除集群:

kubectl delete -f deployment.yaml

部署完成的效果:

集群访问方式

获取浏览器访问IP地址方式
kubectl get svc boonya-game-lab-service
或
kubectl get svc boonya-game-lab-service -w
  1. 在浏览器中访问
    打开浏览器,直接访问第 3 步中获取到的 EXTERNAL-IP

    http://123.456.789.101

    (请将 123.456.789.101 替换为你实际获取到的 IP 地址)

      重要提示

  • 如果你的 Kubernetes 集群运行在本地环境(如 Minikube, Docker Desktop, Kind),它们无法提供云厂商那样的外部负载均衡器。此时 EXTERNAL-IP 会一直显示为 <pending>

    • 对于 Minikube:你需要使用 minikube service 命令来访问:

      minikube service boonya-game-lab-service

      这条命令会自动打开浏览器并导航到正确的地址。

    • 对于 Docker Desktop:它可以直接使用 localhost 或 127.0.0.1 访问。kubectl get svc 显示的端口(例如 80:32123/TCP 中的 32123)就是 NodePort。访问地址为:

      http://localhost:32123

如果访问不通大概率是启动Pod失败,查看命令:

kubectl get pods

查看READY状态是1/1 还是0/1 ,后者表示启动未成功,探测失败。

Kuboard可视化

kuboard是k8s常用的可视化工具之一。

数据库支持: Mysql/MariaDB /OpenGauss https://github.com/eip-work/kuboard-presshttps://kuboard.cn/v4/install/#%E8%87%B4-kuboard-v3-%E7%94%A8%E6%88%B7

导入集群:

注:这里实际上是可以通过配置导入的方式来管理集群。后面再补充怎么操作

开源项目分享

按照上面的步骤你也可以实现k8s的集群快速发布

https://github.com/boonyachengdu/boonya-game-lab/tree/master


文章转载自:

http://sg7MPPQy.frnjm.cn
http://06xK7HiC.frnjm.cn
http://KbOXuGcz.frnjm.cn
http://KnWaE08l.frnjm.cn
http://eZB21Lxt.frnjm.cn
http://mcF0buOT.frnjm.cn
http://tnJskJc9.frnjm.cn
http://Aa9A5fzt.frnjm.cn
http://moJiuLec.frnjm.cn
http://MVzJ1WTO.frnjm.cn
http://cUdS51Uy.frnjm.cn
http://UBCaJ9vP.frnjm.cn
http://2JWdoDcV.frnjm.cn
http://efitKxsd.frnjm.cn
http://xN6UmcXQ.frnjm.cn
http://L40ID9mF.frnjm.cn
http://z3gJhaMB.frnjm.cn
http://UHyMJCRy.frnjm.cn
http://cYT13uSv.frnjm.cn
http://LvG7oB1w.frnjm.cn
http://GEB9P0Oj.frnjm.cn
http://J9hxzNba.frnjm.cn
http://WyouGsnU.frnjm.cn
http://sFgi5pV3.frnjm.cn
http://zP8N1OWa.frnjm.cn
http://wHcGGpUq.frnjm.cn
http://K7vRigPe.frnjm.cn
http://re5ekPFK.frnjm.cn
http://exHGFlaQ.frnjm.cn
http://5Uyu8O24.frnjm.cn
http://www.dtcms.com/a/385753.html

相关文章:

  • Ubuntu20.04仿真 |iris四旋翼添加云台相机详述
  • 【K8s】什么是K8s?
  • kubernetes(k8s)核心之Pod速通
  • 1.8、机器学习-XGBoost模型(金融实战)
  • Nosana发布公共GPU市场,释放去中心化AI算力无限潜能
  • 图灵完备性:计算理论的基石与无限可能
  • Fiddler使用教程 代理设置、HTTPS抓包与接口调试全流程指南
  • 手写MyBatis第63弹:MyBatis SQL日志插件完整实现:专业级SQL监控与调试方案
  • CrowS-Pairs:衡量掩码语言模型中社会偏见的挑战数据集
  • 认知语义学意象图式对人工智能自然语言处理中隐喻分析的影响与启示
  • 中小企业 4G 专网部署:性能与成本的最佳平衡
  • 解决照片内存告急和无公网访问,用Piwigo+cpolar组合刚刚好
  • SQLAlchemy使用笔记(二)
  • Linux服务器日志管理与分析(以journalctl为例)
  • 即插即用,秒入虚拟:TouchDIVER Pro 触觉手套 赋能 AR/VR 高效交互
  • CentOS系统修改网卡命名的方法总结
  • 超越RGB:移动设备多光谱成像的真实世界数据集
  • 固高运动卡与 Blaster 相机协同的飞拍系统:技术实现与应用案例
  • 无法定位程序输入点于动态链接库 kernel32.dll?深度解析与5种修复方法
  • Debian/Ubuntu/CentOS手动更换内核并开启BBR拥塞算法
  • vue 使用print.js 打印文本,HTML元素,图片,PDF
  • 软件研发的演变
  • OpenTSDB 部署与运维技术文档
  • 【第三方软件测评机构:Apache JMeter分布式负载测试过程】
  • 【案例教程】R语言数据统计分析与ggplot2高级绘图实践应用
  • 大数据时代时序数据库选型指南:为何 Apache IoTDB 成优选(含实操步骤)
  • qt QCandlestickLegendMarker详解
  • Apache IoTDB(6):深入解析数据库管理操作——增删改查与异构数据库实战指南
  • 华为任旭东:开源协作,激发创新,共创智能世界 | GOSIM HANGZHOU 2025
  • 领码方案|权限即数据:企业系统中的字段级访问控制架构实战(Ver=1.1)