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

Kubernetes实战教程:基于Vue前端与Java后端的应用部署

在云原生时代,Kubernetes 已成为管理容器化应用的核心平台。本文不仅详细介绍了 Kubernetes 的背景、架构和核心特性,还将通过一个具体的案例——基于 Vue 前端和 Java 后端的应用部署,带你一步步了解如何在 Kubernetes 集群中构建和运行一个完整的微服务系统。


一、Kubernetes 概述

1.1 Kubernetes 的起源与架构

Kubernetes 是由 Google 发起并开源的容器编排平台,采用主控制平面和工作节点的分布式架构。

  • 主控制平面 包含 API Server、Scheduler、Controller Manager 和 etcd,用于管理集群状态和调度任务。
  • 工作节点 运行 kubelet 和容器运行时(如 Docker、containerd),负责实际运行 Pod。

1.2 核心特性

  • 自愈能力:自动重启失败的容器,保持集群健康。
  • 自动扩展:根据负载自动调整 Pod 副本数。
  • 服务发现与负载均衡:通过 Service 对象为 Pod 提供稳定的访问入口。
  • 声明式配置:所有资源通过 YAML 文件描述,便于版本控制和持续交付。

二、案例概述:Vue 前端 + Java 后端

在本案例中,我们将构建一个包含两个部分的应用:

  • 前端:基于 Vue.js 开发的单页面应用
  • 后端:基于 Spring Boot 的 Java REST API

整个流程包括应用的打包、构建 Docker 镜像、编写 Kubernetes 部署配置文件以及在 Kubernetes 集群中的部署。


三、具体教程

3.1 环境准备

  1. 安装 Kubernetes 集群
    • 可选择使用 Minikube、Kind 在本地搭建测试集群,或使用云服务商提供的托管 Kubernetes 服务(如 AKS、EKS、GKE)。
  2. 安装必要工具
    • kubectl:Kubernetes 命令行工具
    • Docker:用于构建镜像
    • Git:代码管理工具

3.2 构建与打包应用

3.2.1 前端(Vue.js)
  1. 构建 Vue 应用
    在 Vue 项目目录下运行:

    npm install
    npm run build
    

    构建完成后,会在项目根目录生成一个 dist 目录,包含打包好的静态文件。

  2. 编写 Dockerfile
    在 Vue 项目根目录下创建一个 Dockerfile:

    # 使用 Nginx 作为前端服务器
    FROM nginx:alpine
    # 删除默认配置
    RUN rm -rf /usr/share/nginx/html/*
    # 将构建好的文件复制到 Nginx 目录
    COPY dist/ /usr/share/nginx/html
    # 暴露80端口
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    
  3. 构建镜像
    在终端中运行:

    docker build -t my-vue-app:latest .
    
3.2.2 后端(Java Spring Boot)
  1. 构建 Spring Boot 应用
    使用 Maven 进行打包:

    mvn clean package
    

    生成的 JAR 文件位于 target/ 目录下(例如 my-java-app.jar)。

  2. 编写 Dockerfile
    在 Spring Boot 项目根目录下创建 Dockerfile:

    FROM openjdk:11-jre-slim
    # 将 JAR 文件复制到容器中
    COPY target/my-java-app.jar /app/my-java-app.jar
    # 设置工作目录
    WORKDIR /app
    # 暴露应用端口
    EXPOSE 8080
    # 运行 Java 应用
    ENTRYPOINT ["java", "-jar", "my-java-app.jar"]
    
  3. 构建镜像
    在终端中运行:

    docker build -t my-java-app:latest .
    

四、编写 Kubernetes 配置文件

4.1 创建命名空间

为了便于管理,我们为应用创建一个命名空间:

apiVersion: v1
kind: Namespace
metadata:
  name: my-app

保存为 namespace.yaml 并运行:

kubectl apply -f namespace.yaml

4.2 部署前端应用

编写前端的 Deployment 和 Service 文件,保存为 vue-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vue-deployment
  namespace: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: vue-app
  template:
    metadata:
      labels:
        app: vue-app
    spec:
      containers:
      - name: vue-container
        image: my-vue-app:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: vue-service
  namespace: my-app
spec:
  selector:
    app: vue-app
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 80

应用配置:

kubectl apply -f vue-deployment.yaml

4.3 部署后端应用

编写后端的 Deployment 和 Service 文件,保存为 java-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-deployment
  namespace: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: java-app
  template:
    metadata:
      labels:
        app: java-app
    spec:
      containers:
      - name: java-container
        image: my-java-app:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: java-service
  namespace: my-app
spec:
  selector:
    app: java-app
  type: ClusterIP
  ports:
    - port: 8080
      targetPort: 8080

应用配置:

kubectl apply -f java-deployment.yaml

4.4 配置 Ingress(可选)

如果希望外部访问应用,可以配置 Ingress。以下是一个简单的示例,保存为 ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  namespace: my-app
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /vue
        pathType: Prefix
        backend:
          service:
            name: vue-service
            port:
              number: 80
      - path: /java
        pathType: Prefix
        backend:
          service:
            name: java-service
            port:
              number: 8080

应用配置:

kubectl apply -f ingress.yaml

(注意:需要部署 Ingress Controller,如 Nginx Ingress Controller)


五、验证与监控

  1. 验证部署状态
    使用以下命令查看所有 Pod 状态:

    kubectl get pods -n my-app
    
  2. 访问服务
    如果配置了 Ingress,可在浏览器中访问 http://myapp.example.com/vuehttp://myapp.example.com/java 进行验证;否则可通过 NodePort 或 Port Forward 方式测试服务。

  3. 监控集群
    配置 Prometheus、Grafana 等监控工具,可以实时查看应用运行状态、资源使用情况以及日志信息,为后续故障排查和性能优化提供支持。


六、结语

本文通过 Vue 前端和 Java 后端的具体案例,详细演示了如何利用 Kubernetes 构建、部署和管理一个完整的微服务应用。从构建 Docker 镜像到编写 Kubernetes YAML 文件,再到部署 Ingress 实现外部访问,每一步都体现了 Kubernetes 的自动化和灵活性。

通过实践这一教程,你不仅可以掌握 Kubernetes 的基本操作,还能了解如何将应用组件化、服务化,从而为构建高效、弹性和可扩展的云原生应用打下坚实基础。

欢迎在评论区分享你的问题与经验,一起探索 Kubernetes 带来的无限可能!

相关文章:

  • OpenShift Operator开发探讨
  • 基于智能体和RWA的分布式商业生态商业模型架构设计
  • 元夜照春途——通付盾接入DeepSeek,AI Agent信任系统全面升级
  • 神经网络的学习 求梯度
  • CSS实现与文字长度相同的下划线
  • 清华大学KVCache.AI团队联合趋境科技联合的KTransformers开源项目为什么那么厉害
  • 智慧小区建设标准规范
  • 《鸿蒙教程-答案之书》Text文本显示不同颜色和大小
  • 如何设置 Nginx 连接超时并进行测试(Nginx优化)
  • LeetCode刷题---字符串---1513
  • easyexcel解析excel文件的时候报错
  • Spring Cloud-Sentinel
  • day11旅途短视频录制
  • AIGC图生视频保姆级教程
  • java基本语法
  • 什么是AI Agent的身份安全问题
  • 自学FOC系列分享--BLDC的电驱
  • S4D480 S4HANA 基于PDF的表单打印
  • 量子计算的五大优势
  • 盲注技术获取数据库的表名、列名和数据
  • 娃哈哈:调整产销布局致部分工厂停工,布局新产线可实现自主生产,不排除推新品牌
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局:正核实
  • 外交部亚洲司司长刘劲松会见印度驻华大使罗国栋
  • 图讯丨习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号
  • 铁路部门:确保沿线群众安全,焦柳铁路6个区段将陆续安装防护栅栏