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

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 带来的无限可能!


http://www.kler.cn/a/551340.html

相关文章:

  • 数据结构:Map Set(一)
  • 蓝桥杯 Java B 组之简单数学问题(素数判断、最大公约数)
  • Golang并发编程最佳实践:协程与通道
  • jar命令解压jar包及更新jar的配置文件
  • 机器视觉--图像的运算(加法)
  • 管理WSL实例 以及安装 Ubuntu 作为 WSL 子系统 流程
  • 【DeepSeek问答】QProcess::start是异步的吗?会使UI卡顿吗?
  • Playwright入门之---命令
  • 基于MATLAB的城轨车辆跨接电缆长度计算
  • 前端+后端实现全选、反选+批量删除
  • springcloudalibaba组件gateway
  • 制作Ubuntu根文件
  • docker下部署kong+consul+konga 报错问题处理
  • 直播平台营销困境与开源AI智能名片2+1链动模式S2B2C商城小程序源码的创新解决方案探究
  • 前端【技术方案】重构项目
  • 【React组件通讯双重视角】函数式 vs 类式开发指南
  • 安全测试|SQLMap渗透扫描工具
  • 基于Python的医院运营数据可视化平台:设计、实现与应用(上)
  • JS宏实例:数据透视工具的制作(二)
  • 拯救者电脑在重装系统之后电源计划丢失Fn+Q切换不了模式怎么恢复?