☸️ 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 Контейнер с вашим
• Редко: 1 Pod = Java App + Sidecar (например, агент логирования). Они живут вместе, как сиамские близнецы, и делят сеть.
👮♂️ 2. Deployment (Развертывание) - Начальник
Вы никогда не создаете Поды вручную. Потому что Поды смертны. Если Под умер - он умер.
Вместо этого вы создаете Deployment. Это инструкция для K8s:
Deployment создает ReplicaSet, который следит за численностью.
• Если один Под упал K8s создает новый.
• Если нагрузка выросла Вы меняете цифру 3 на 10, и K8s мгновенно создает еще 7 копий.
🚦 3. Service (Сервис) - Единая точка входа
Поды рождаются и умирают. У них меняются IP-адреса.
Как фронтенду узнать, на какой IP слать запрос, если они меняются каждую минуту?
Тут выходит Service.
Это стабильный сетевой адрес (и DNS-имя), который не меняется никогда.
• Service работает как Load Balancer (Балансировщик).
• Он принимает запрос на
📝 Как это выглядит в коде? (YAML)
В мире K8s мы не пишем команды, мы пишем Манифесты (YAML-файлы), описывающие Желаемое состояние.
Вы скармливаете этот файл командой
🔥 Итог
1. Pod: Обертка над контейнером.
2. Deployment: Следит, чтобы нужное количество Подов всегда работало.
3. Service: Стабильный адрес, распределяющий запросы по Подам.
#Kubernetes #K8s #DevOps #Docker #Java
📲 Мы в MAX
👉@BookJava
Представьте, что у вас 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
👍6❤2🔥2