尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
阿里云K8s部署Vue2+SpringBoot2.5+Nacos2.0.3实战指南
简介这份资源面向需要在阿里云Kubernetes集群上落地前后端分离项目的运维与后端开发人员提供一套可直接参考的部署方案解决Vue2前端、SpringBoot2.5服务与Nacos2.0.3注册配置中心在k8s中协同编排的问题。包内共16个文件以8个yaml编排清单为核心覆盖Nacos的StatefulSet、Service、Headless、Ingress及MySQL配置另有2个sh一键部署脚本、2个Dockerfile、1个nginx.conf、1个初始化sql、1个jar与1个gz前端产物压缩包约34.69MB。资源按k8s-vue-demo与k8s-realize-master两条业务线组织配合k8s-deploy-nacos-total.yaml可整体拉起Nacos集群便于理解有状态服务、服务发现与前端静态资源发布的完整链路。目前已有1340人学习下载适合作为k8s部署练习与生产改造的起步模板。1. 从一台阿里云 ECS 说起这套 k8s 部署栈到底解决什么问题手里只有一台阿里云 ECS却要同时跑 Vue2 前端、Nginx、SpringBoot 2.5 后端和 Nacos 2.0.3 注册中心很多人第一反应是「docker-compose 一把梭」。但当你需要滚动更新、灰度发布、Pod 自愈、配置热更新时compose 就开始力不从心。这套「阿里云 k8s 部署 vue2nginxspringboot2.5nacos2.0.3」的组合本质是把一个典型的前后端分离项目完整搬进 Kubernetes前端静态资源交给 Nginx 托管后端 SpringBoot 打成镜像跑 DeploymentNacos 既做注册中心又做配置中心用 StatefulSet 保证它的数据持久化。它适合已经能跑通单体部署、想进一步吃透 k8s 工作负载、Service、Ingress、ConfigMap 的初中级工程师。下面我按自己实际拆过的顺序把镜像构建、编排文件、Nacos 持久化和几个必踩的坑一次讲清。2. 镜像与编排前置Vue2、SpringBoot2.5、Nacos2.0.3 各自怎么打包2.1 Vue2 前端构建与 Nginx 镜像分层Vue2 项目在本地npm run build之后产出的是dist静态目录真正要进镜像的只有这个目录加一份 Nginx 配置。常见做法是用多阶段构建第一阶段用 node 镜像编译第二阶段只拷贝产物这样镜像能压到 50MB 以内。注意 Vue2 的vue-cli-service build默认走publicPath如果部署在子路径下要在vue.config.js里把publicPath改成/或对应前缀否则刷新 404。# 阶段一编译 Vue2 FROM node:16-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm config set registry https://registry.npmmirror.com npm install COPY . . RUN npm run build # 阶段二Nginx 托管静态资源 FROM nginx:1.24-alpine COPY --frombuilder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80逻辑说明npm config set registry换成国内镜像源避免构建时拉包超时COPY --frombuilder只搬运编译产物不带 node_modules。参数上node:16-alpine对应 Vue2 生态较稳的版本Nginx 用 alpine 减小体积。Nginx 配置里关键的是try_files $uri $uri/ /index.html;这是 Vue history 路由不 404 的命根子。2.2 SpringBoot 2.5 镜像与 Nacos 2.0.3 的端口差异SpringBoot 2.5 用spring-boot-maven-plugin打出的 fat jar 直接丢进eclipse-temurin:8-jre即可。这里有个高频翻车点Nacos 2.0.3 相比 1.x 新增了 gRPC 通信除了 8848 还要暴露 9848客户端 gRPC和 9849服务端 gRPC。如果你只映射 8848SpringBoot 注册时会报Client not connected或一直重连。FROM eclipse-temurin:8-jre WORKDIR /app COPY target/*.jar app.jar ENV JAVA_OPTS-Xms512m -Xmx1024m ENTRYPOINT [sh,-c,java $JAVA_OPTS -jar app.jar]逻辑说明JAVA_OPTS用环境变量注入方便在 Deployment 里按 Pod 资源限制调整sh -c是为了让变量能展开。参数上-Xmx1024m要和后面 k8s 的resources.limits.memory对齐否则 JVM 会按宿主机内存算堆Pod 容易被 OOMKilled。2.3 Nacos 2.0.3 的持久化与数据库准备Nacos 单机模式默认用内嵌 Derby生产必须换 MySQL。先在阿里云 RDS 或自建 MySQL 里建nacos_config库导入官方mysql-schema.sql然后通过环境变量把连接信息传进去。这一步不做Pod 一重启配置全丢血泪经验。# 导入 Nacos 2.0.3 建表脚本 mysql -h rm-xxxx.mysql.rds.aliyuncs.com -u nacos -p nacos_config mysql-schema.sql逻辑说明建表脚本在 Nacos 发行包的conf目录下连接串、用户名、密码后面会写进 ConfigMap 或 Secret不要硬编码进镜像。参数上注意 MySQL 版本建议 5.7 或 8.0字符集用 utf8mb4。3. 阿里云 ACK 上的编排落地Deployment、Service 与 Ingress 怎么配3.1 Nacos 用 StatefulSet 还是 DeploymentNacos 单机部署用 Deployment 加 PVC 就够集群模式才需要 StatefulSet 保证每个节点稳定网络标识。我一般单机先用 Deployment把nacos-home挂到 NAS 或云盘 PVC 上配置和日志都持久化。下面这份 YAML 是精简后的核心部分。apiVersion: apps/v1 kind: Deployment metadata: name: nacos namespace: prod spec: replicas: 1 selector: matchLabels: app: nacos template: metadata: labels: app: nacos spec: containers: - name: nacos image: nacos/nacos-server:v2.0.3 env: - name: MODE value: standalone - name: SPRING_DATASOURCE_PLATFORM value: mysql - name: MYSQL_SERVICE_HOST value: rm-xxxx.mysql.rds.aliyuncs.com - name: MYSQL_SERVICE_DB_NAME value: nacos_config - name: MYSQL_SERVICE_USER valueFrom: secretKeyRef: name: nacos-secret key: username - name: MYSQL_SERVICE_PASSWORD valueFrom: secretKeyRef: name: nacos-secret key: password ports: - containerPort: 8848 - containerPort: 9848 - containerPort: 9849 volumeMounts: - name: nacos-data mountPath: /home/nacos/data volumes: - name: nacos-data persistentVolumeClaim: claimName: nacos-pvc逻辑说明MODEstandalone单机模式数据库密码走 Secret 引用避免明文。参数上三个端口必须都声明Service 里也要对应暴露。PVC 在阿里云 ACK 上可以直接用alicloud-diskStorageClass 动态生成。3.2 SpringBoot 与 Vue 的 Service、Ingress 串联后端 Deployment 的镜像就是 2.2 打的那个环境变量里指定NACOS_ADDRnacos.prod.svc.cluster.local:8848让 Pod 通过集群内 DNS 找 Nacos。前端 Nginx 的 Deployment 挂上 2.1 的镜像Service 暴露 80。最后用 Ingress 把域名按路径分流/api转发到后端 Service/转发到前端 Service。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress namespace: prod annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - host: app.example.com http: paths: - path: /api pathType: Prefix backend: service: name: backend-svc port: number: 8080 - path: / pathType: Prefix backend: service: name: frontend-svc port: number: 80逻辑说明rewrite-target把/api前缀去掉再转发后端接口就不用带前缀。参数上ingressClassName要和你 ACK 里装的 Ingress Controller 对应阿里云默认可能是nginx或alb。注意 Vue 里 axios 的baseURL要设成/api和这里对齐。3.3 配置热更新ConfigMap 挂载与 Nacos 配置中心的分工这里容易混Nacos 管的是业务配置数据库连接、开关k8s ConfigMap 管的是环境级配置Nacos 地址、日志级别。SpringBoot 2.5 接 Nacos Config 后改配置在 Nacos 控制台点发布即可不用重启 Pod。但前提是bootstrap.yml里配好spring.cloud.nacos.config.server-addr且引入spring-cloud-starter-alibaba-nacos-config依赖。常见做法是把server-addr用环境变量注入避免镜像里写死。4. 避坑与排查这套栈最容易翻车的五个地方4.1 Nacos 注册不上日志刷 Client not connected现象SpringBoot 启动后 Nacos 控制台看不到实例Pod 日志反复重连。原因Nacos 2.0.3 的 gRPC 端口 9848 没在 Service 或安全组放行。解决Service 的ports补上 9848、9849阿里云安全组也放行对应 NodePort 或走内网 SLB。4.2 Vue 刷新页面 404现象首页能开点进子路由再刷新就 404。原因Nginx 没配try_fileshistory 路由请求打到了不存在的文件。解决在nginx.conf的location /里加try_files $uri $uri/ /index.html;改完重建前端镜像。4.3 Pod 一直 OOMKilled现象后端 Pod 反复重启kubectl describe显示 OOMKilled。原因JVM 堆按宿主机内存算超过了resources.limits.memory。解决显式设-Xmx为 limit 的 70% 左右或加-XX:MaxRAMPercentage70两者选一别重复。4.4 Nacos 数据丢失配置回到默认现象Pod 重启后 Nacos 里的配置全没了。原因用了内嵌 Derby 且没挂 PVC。解决切 MySQL 模式并挂载 PVC确认MYSQL_SERVICE_*环境变量生效kubectl exec进去看conf/application.properties是否被覆盖。4.5 Ingress 转发 502后端连不上现象访问域名报 502 Bad Gateway。原因Ingress 的 Service 名或端口写错或后端 Pod 没 Ready。解决kubectl get endpoints backend-svc看有没有后端地址没有就查 readinessProbe 和容器端口是否一致。5. 进阶技巧用探针和 HPA 让这套栈真正稳下来部署能跑通只是及格线真正让这套栈在生产站住脚的是探针和弹性伸缩。SpringBoot 2.5 接上spring-boot-starter-actuator后暴露/actuator/health把它配成 readinessProbePod 没就绪就不会被 Ingress 转发流量滚动更新时用户无感知。livenessProbe 则用来在进程假死时自动重启。参数上initialDelaySeconds给 30 到 60 秒SpringBoot 启动慢给太短会一直重启这也是新手最常见的玄学重启来源。readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 40 periodSeconds: 10 livenessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 60 periodSeconds: 20逻辑说明readiness 控制流量接入liveness 控制重启两者路径可以相同但阈值要拉开。参数上periodSeconds别设太小否则健康检查本身就成了压力源。Nacos 那边也建议加 TCP 探针检查 8848避免注册中心没起来后端还在傻等。再进一步是 HPA按 CPU 使用率自动扩后端副本。前提是 Deployment 里写了resources.requests.cpu否则 HPA 拿不到基准值会一直显示 unknown。我一般 requests 给 250mlimits 给 1 核HPA 阈值设 70%副本 2 到 6 之间。验证方法很简单kubectl get hpa -n prod -w观察再用kubectl run起个压测 Pod 打后端接口看副本数是否上涨。这套组合跑通后你会发现之前手动改副本数的日子是真的回不去了。从那以后我每次上这套栈都强制先kubectl get endpoints确认后端就绪、再kubectl logs扫一遍 Nacos 的 gRPC 连接日志最后才切流量。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

央国企AI+数智化转型:从报告到落地的工程实践与避坑指南

央国企AI+数智化转型:从报告到落地的工程实践与避坑指南

简介:这份《2025央国企AI数智化转型研究报告》面向央国企管理者、数字化转型负责人及产业研究者,系统梳理AI与大数据在央国企落地中的战略路径、技术应用与生态协同问题。报告从发展现状、核心挑战与痛点切入,覆盖战略路径、技术数据、组织人…

📅 2026/9/25 23:42:48
Nikon SDK C#开发实战:单拍、连拍与LiveView视频流

Nikon SDK C#开发实战:单拍、连拍与LiveView视频流

简介:本资源是一套基于尼康官方SDK的C#与VB.NET相机控制开发套件,面向摄影自动化开发者、工业视觉工程师及高校计算机视觉方向学习者,解决尼康相机通过桌面软件实现视频录制、连拍、单拍等远程控制的核心需求。压缩包共63个文件,含…

📅 2026/9/25 23:42:48
Google提示工程PDF拆解:从零样本到自洽性投票的实战指南

Google提示工程PDF拆解:从零样本到自洽性投票的实战指南

简介:这份《google提示工程.pdf》面向具备一定编程基础、希望深入掌握大语言模型交互技巧的开发者、数据科学家与机器学习工程师,系统讲解如何编写高质量提示词以提升模型输出的准确性与相关性。内容覆盖零样本、少样本、系统提示、角色提示、上下文提示…

📅 2026/9/25 23:42:48
MORE NEWS

更多资讯

📰

答辩PPT模板实战:从母版到放映的完整避坑指南

简介:为华中科技大学毕业生设计的毕业论文答辩PPT模板,聚焦论文答辩演示场景,内置研究背景及意义、研究目的及意义、研究思路及方法、研究结果与应用、相关建议和结论、参考文献、目录等答辩通用模块,整套叙事路径完整&#xff0c…

📰

Web Worker + MinIO:多平台大文件上传兼容性实践

大文件上传真正让人头秃的,通常不是文件本身太大,而是“平台太多”。我这两年一直在做上传相关的功能,从几个MB的办公文档到几十GB的现场视频都碰过,最深的体会是:同一套代码在 Windows Chrome 上跑得飞快,…

📰

大数运算课程设计全解析:从数组存储到快速幂与进制转换

简介:一份用于数据结构课程设计的大数运算完整工程,面向高校学生、算法初学者以及需要完成同类课题的开发者。资源以 C 实现为主,同时支持十进制与二进制大数的加法、减法、乘法、除法、乘方、取模六类运算,包含快速幂、长除法、逐…

📰

磁轴键盘的硬件秘密:Keychron-Keyboards-Hardware-Design 中 Q HE 与 K HE 磁轴结构设计的深度解读

磁轴键盘的硬件秘密:Keychron-Keyboards-Hardware-Design 中 Q HE 与 K HE 磁轴结构设计的深度解读 【免费下载链接】Keychron-Keyboards-Hardware-Design Industrial design files for Keychron keyboards and mice. 100 models with CAD assets in STEP, DXF, DWG…

📰

深入KillerPDF.Engine源码:完整图解PDF解析器、交叉引用表与有界解析的实现原理

深入KillerPDF.Engine源码:完整图解PDF解析器、交叉引用表与有界解析的实现原理 【免费下载链接】KillerPDF Free and open-source PDF editor for Windows with a built-in PDF 2.0 engine. View, annotate, OCR, merge, split, crop, rotate, compare, edit text,…

📰

UE5 Niagara粒子系统零基础入门:底层逻辑与实战避坑指南

UE5的Niagara系统,这几年几乎是特效师和技术美术绕不开的话题。我在项目里被美术同事问过最多的一句话就是:"Niagara到底比老版Cascade强在哪?为什么新项目一定要用这个?"说实话,我刚接触Niagara的时候也懵了…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬