Что из DevOps должен знать Java-разработчик?
Java-разработчику не обязательно уметь с нуля строить Kubernetes-кластер, но если приложение работает в Kubernetes, нужно понимать хотя бы основные сущности и то, как ваш Java-сервис живёт в проде.
Сохраняйте чек-лист 👇
1. Pod — минимальная запускаемая единица в Kubernetes. Обычно внутри находится контейнер с вашим Java-приложением.
2. Deployment — описывает, сколько экземпляров приложения должно работать и как Kubernetes должен выполнять обновление.
3. Service — стабильная точка доступа к Pod'ам. Сам Java-сервис обычно не должен знать IP конкретного Pod.
4. Ingress — точка входа HTTP/HTTPS-трафика в кластер. Позволяет направлять запросы к нужным Service.
5. Egress — исходящий трафик из Pod'а или кластера наружу.
Например:
Java Pod
↓
Egress
↓
PostgreSQL / Kafka / внешний API
Java-разработчику важно понимать, что исходящие соединения тоже могут быть ограничены политиками безопасности.
6. ConfigMap — хранение конфигурации, которую не нужно считать секретной: URL, параметры приложения, feature flags и т.д.
7. Secret — хранение чувствительных данных: паролей, токенов, ключей. Важно понимать, что Kubernetes Secret сам по себе не означает автоматическое шифрование «везде».
8. Namespace — логическое разделение ресурсов внутри Kubernetes-кластера.
9. ServiceAccount — идентичность, от имени которой Pod может взаимодействовать с Kubernetes API и другими ресурсами.
10. RBAC — система управления правами доступа: кто и что может делать в Kubernetes.
11. NetworkPolicy — правила, которые определяют, какой сетевой трафик разрешён между Pod'ами и куда Pod может подключаться.
Например:
Order Service
↓
Payment Service ✅
↓
Random Service ❌
12. Readiness Probe — проверяет, готов ли Pod принимать трафик.
Например:
Pod запущен
↓
Spring Boot стартует
↓
Readiness = FALSE
↓
Service не отправляет сюда трафик
13. Liveness Probe — проверяет, что приложение продолжает нормально работать. Если проверка постоянно падает, Kubernetes может перезапустить контейнер.
14. Startup Probe — помогает Kubernetes понять, что приложение ещё запускается и ему просто нужно время.
15. Resource Requests — сколько CPU и памяти Pod запрашивает для планирования.
16. Resource Limits — верхняя граница потребления CPU и памяти.
И здесь Java-разработчику особенно важно понимать:
-Xmx ≠ память всего контейнера
Heap — только часть памяти Java-процесса.
17. HPA (Horizontal Pod Autoscaler) — автоматически изменяет количество Pod'ов в зависимости от нагрузки и метрик.
Нагрузка растёт
↓
HPA
↓
3 Pod → 6 Pod
18. Rolling Update — обновление приложения без одновременного выключения всех старых экземпляров.
Старые Pod постепенно заменяются новыми.
19. PodDisruptionBudget (PDB) — помогает не потерять слишком много экземпляров приложения одновременно при добровольных disruption'ах, например при обслуживании узлов.
20. Docker Image — образ, из которого запускается контейнер с вашим приложением.
Java-разработчику стоит понимать хотя бы:
Dockerfile
↓
Image
↓
Container
↓
Pod
21. CI/CD — автоматизация сборки, тестирования и доставки приложения.
Типичный путь:
Git
↓
Build
↓
Tests
↓
Docker Image
↓
Registry
↓
Kubernetes
22. Container Registry — хранилище Docker-образов.
Например:
my-service:1.42
образ отправляется в Registry, откуда Kubernetes его забирает.
23. Helm — инструмент для управления Kubernetes-манифестами и шаблонизации конфигурации приложений.
24. Node — машина, на которой Kubernetes запускает Pod'ы.
Важно понимать, что Pod не запускается «в воздухе»:
Kubernetes Cluster
↓
Node
↓
Pod
↓
Container
↓
Java application
25. StatefulSet — используется для приложений, которым важна стабильная идентичность Pod'ов и/или работа с постоянным состоянием.
Например, некоторые экземпляры Kafka, PostgreSQL, Elasticsearch и других stateful-систем.
Для обычного stateless Spring Boot-сервиса чаще используется Deployment.