Java 在 Kubernetes 上的部署:初学者基础指南
现代 Java 开发离不开容器化和编排。Kubernetes (K8s) 已成为管理容器化应用的事实标准。在本指南中,我们将逐步讲解将简单 Java 应用部署到 Kubernetes 集群的过程。您将学习如何将代码打包成 Docker 镜像、创建必要的清单,并在类似生产的环境中运行应用。
1. 准备 Java 应用和 Docker 镜像
我们从创建一个简单的 Spring Boot 应用开始。在项目的根目录下创建 Dockerfile 文件:
FROM openjdk:17-jdk-alpineWORKDIR /appCOPY target/my-app.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]构建镜像并将其推送到仓库(例如 Docker Hub):
mvn clean package -DskipTestsdocker build -t myregistry/my-java-app:v1 .docker push myregistry/my-java-app:v1确保镜像在本地可以运行:
docker run -p 8080:8080 myregistry/my-java-app:v12. Kubernetes 核心对象
部署 Java 应用需要三个关键资源:
- Deployment — 管理副本和更新
- Service — 提供对 Pod 的网络访问
- Ingress — (可选)外部流量路由
创建 Deployment (deployment.yaml)
apiVersion: apps/v1kind: Deploymentmetadata: name: java-app-deploymentspec: replicas: 3 selector: matchLabels: app: java-app template: metadata: labels: app: java-app spec: containers: - name: java-app image: myregistry/my-java-app:v1 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 (service.yaml)
apiVersion: v1kind: Servicemetadata: name: java-app-servicespec: selector: app: java-app ports: - protocol: TCP port: 80 targetPort: 8080 type: ClusterIP3. 部署到 Kubernetes 集群
将清单应用到您的集群(确保 kubectl 已配置):
kubectl apply -f deployment.yamlkubectl apply -f service.yaml检查 Pod 和服务状态:
kubectl get podskubectl get svc java-app-service如需从外部访问(例如用于测试),请使用 port-forward:
kubectl port-forward service/java-app-service 8080:80现在,应用可通过 http://localhost:8080 访问。
4. 扩缩容与更新
Kubernetes 允许轻松扩缩容应用:
kubectl scale deployment java-app-deployment --replicas=5要更新镜像(滚动更新),请修改 Deployment 中的标签并应用:
kubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2kubectl rollout status deployment/java-app-deployment如有需要,可回滚更改:
kubectl rollout undo deployment/java-app-deployment结论
我们介绍了将 Java 应用部署到 Kubernetes 的基本过程。