Java 在 Kubernetes 上的部署:初学者基础指南

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

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

开始课程

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:v1


2. 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: ClusterIP


3. 部署到 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 的基本过程。

博客

书籍推荐