Деплой Java на Kubernetes: базовое руководство для начинающих

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Деплой Java на Kubernetes: базовое руководство для начинающих

Современная разработка на Java немыслима без контейнеризации и оркестрации. Kubernetes (K8s) стал стандартом де-факто для управления контейнеризованными приложениями. В этом руководстве мы шаг за шагом разберем процесс деплоя простого Java-приложения на кластер Kubernetes. Вы узнаете, как упаковать код в Docker-образ, создать необходимые манифесты и запустить приложение в production-подобной среде.

1. Подготовка Java-приложения и Docker-образ

Начнем с простого Spring Boot приложения. Создайте файл Dockerfile в корневой директории проекта:

FROM openjdk:17-jdk-alpine
WORKDIR /app
COPY target/my-app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Соберите образ и отправьте его в реестр (например, Docker Hub):

mvn clean package -DskipTests
docker 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 — обеспечивает сетевой доступ к подам
  • Ingress — (опционально) маршрутизация внешнего трафика

Создание Deployment (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-app-deployment
spec:
  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: v1
kind: Service
metadata:
  name: java-app-service
spec:
  selector:
    app: java-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: ClusterIP

3. Деплой на кластер Kubernetes

Примените манифесты к вашему кластеру (убедитесь, что kubectl настроен):

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

Проверьте статус подов и сервиса:

kubectl get pods
kubectl 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

Для обновления образа (rolling update) измените тег в Deployment и примените:

kubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2
kubectl rollout status deployment/java-app-deployment

При необходимости откатите изменения:

kubectl rollout undo deployment/java-app-deployment

Заключение

Мы рассмотрели базовый процесс деплоя Java-приложения на Kubernetes: от создания Docker-образа до масштабирования и обновления. Это фундамент, на котором строится работа с микросервисами и cloud-native архитектурой. Дальнейшее изучение включает работу с ConfigMaps, Secrets, Helm-чартами и мониторингом. Практикуйтесь на локальном кластере (Minikube, Kind) — это лучший способ освоить Kubernetes.

Помните: автоматизация и декларативный подход — ключевые преимущества K8s. Используйте их для создания надежных и масштабируемых Java-приложений.

Блоги

Рекомендаций по книгам