在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:latest2. 基础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