Java 应用部署到 Kubernetes:开发者基础指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在Kubernetes上部署Java:基础指南



Kubernetes(K8s)已成为编排容器化应用的事实标准。如果您是Java开发者,了解如何在Kubernetes中部署应用不仅是加分项,更是现代DevOps文化中的必备技能。在本指南中,我们将完整讲解从创建简单Java应用到在Kubernetes集群中部署的全过程。您将学习如何将应用打包成Docker镜像、编写必要的配置文件,并在类似生产的环境中运行它。



1. 准备Java应用与Docker镜像



在Kubernetes中部署应用前,需要先将其容器化。Docker是将Java应用及其依赖打包的标准方式。让我们以Spring Boot上的简单REST服务为例。



创建HelloController.java类:



package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;

@RestControllerpublic class HelloController {

@GetMapping("/") public String hello() { return "Hello from Java on Kubernetes!"; }}


现在创建Dockerfile来构建镜像。我们将使用多阶段构建以最小化最终镜像体积:



FROM maven:3.8.5-openjdk-17 AS buildWORKDIR /appCOPY pom.xml .COPY src ./srcRUN mvn clean package -DskipTests

FROM openjdk:17-jdk-slimWORKDIR /appCOPY --from=build /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


使用命令docker build -t my-java-app:latest .构建镜像,并在本地运行验证:docker run -p 8080:8080 my-java-app。如果一切正常,可以将镜像上传到镜像仓库(如Docker Hub):



docker tag my-java-app:latest yourusername/my-java-app:latestdocker push yourusername/my-java-app:latest


2. 基础Kubernetes配置文件



要在Kubernetes中部署,至少需要两种资源:Deployment(负责管理Pod)和Service(提供网络访问)。



创建deployment.yaml文件:



apiVersion: apps/v1kind: Deploymentmetadata:  name: java-app-deployment  labels:    app: java-appspec:  replicas: 2  selector:    matchLabels:      app: java-app  template:    metadata:      labels:        app: java-app    spec:      containers:      - name: java-app        image: yourusername/my-java-app:latest        ports:        - containerPort: 8080        resources:          requests:            memory: "256Mi"            cpu: "250m"          limits:            memory: "512Mi"            cpu: "500m"        livenessProbe:          httpGet:            path: /actuator/health            port: 8080          initialDelaySeconds: 30          periodSeconds: 10        readinessProbe:          httpGet:            path: /actuator/health            port: 8080          initialDelaySeconds: 20          periodSeconds: 5


现在创建service.yaml使应用在集群内可访问:



apiVersion: v1kind: Servicemetadata:  name: java-app-servicespec:  selector:    app: java-app  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: ClusterIP


如果需要从外部访问(例如测试),将类型改为LoadBalancer或使用NodePort。



3. 在集群中部署



确保您能访问Kubernetes集群(例如本地Minikube或云服务)。应用配置文件:



kubectl apply -f deployment.yamlkubectl apply -f service.yaml

博客

书籍推荐