Библиотека Java разработчика
10.5K subscribers
1.17K photos
594 videos
58 files
1.52K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
☸️ Kubernetes: Оркестратор вашего зоопарка

Представьте, что у вас 50 микросервисов, каждый запущен в 3 экземплярах (для надежности). Итого 150 контейнеров.
Вдруг сервер №2 сгорает. 50 контейнеров умирают.
Без K8s: Админ просыпается в 3 ночи и руками запускает их на сервере №3.
С K8s: Вы спите. K8s замечает, что "кого-то не хватает", и сам перезапускает умершие контейнеры на живых серверах за секунды. Это называется Self-healing (Самовосстановление).

Чтобы понять K8s, нужно выучить всего три главных слова: Pod, Deployment, Service.

📦 1. Pod - Атом системы

В Docker мы запускаем Контейнеры. В Kubernetes мы запускаем Поды.

Pod - это минимальная единица. Это обертка вокруг одного (или нескольких) контейнеров.
• У Пода есть свой IP-адрес.
• Обычно: 1 Pod = 1 Контейнер с вашим app.jar.
• Редко: 1 Pod = Java App + Sidecar (например, агент логирования). Они живут вместе, как сиамские близнецы, и делят сеть.

👮‍♂️ 2. Deployment (Развертывание) - Начальник

Вы никогда не создаете Поды вручную. Потому что Поды смертны. Если Под умер - он умер.
Вместо этого вы создаете Deployment. Это инструкция для K8s:

"Я хочу, чтобы у меня ВСЕГДА было 3 копии моего приложения OrderService".


Deployment создает ReplicaSet, который следит за численностью.

• Если один Под упал K8s создает новый.
• Если нагрузка выросла Вы меняете цифру 3 на 10, и K8s мгновенно создает еще 7 копий.

🚦 3. Service (Сервис) - Единая точка входа

Поды рождаются и умирают. У них меняются IP-адреса.
Как фронтенду узнать, на какой IP слать запрос, если они меняются каждую минуту?

Тут выходит Service.
Это стабильный сетевой адрес (и DNS-имя), который не меняется никогда.

• Service работает как Load Balancer (Балансировщик).
• Он принимает запрос на http://order-service и пересылает его на один из живых Подов. Ему все равно, 3 их или 30.

📝 Как это выглядит в коде? (YAML)

В мире K8s мы не пишем команды, мы пишем Манифесты (YAML-файлы), описывающие Желаемое состояние.


# 1. Описываем Deployment (Что запускать?)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-java-app
spec:
replicas: 3 # Хочу 3 экземпляра!
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: java-app
image: my-docker-hub/app:v1 # Берем этот образ
ports:
- containerPort: 8080

---
# 2. Описываем Service (Как достучаться?)
apiVersion: v1
kind: Service
metadata:
name: my-backend-service
spec:
selector:
app: backend # Ищи Поды с меткой 'backend'
ports:
- protocol: TCP
port: 80 # Внешний порт
targetPort: 8080 # Порт контейнера



Вы скармливаете этот файл командой kubectl apply -f app.yaml, и магия случается.

🔥 Итог

1. Pod: Обертка над контейнером.
2. Deployment: Следит, чтобы нужное количество Подов всегда работало.
3. Service: Стабильный адрес, распределяющий запросы по Подам.

#Kubernetes #K8s #DevOps #Docker #Java

📲 Мы в MAX

👉@BookJava
👍62🔥2