Как ответить
Kubernetes (K8s) — это опенсорс-платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Если Docker позволяет упаковать приложение в контейнер, то Kubernetes управляет сотнями и тысячами таких контейнеров на кластере из множества серверов, обеспечивая их отказоустойчивость и связь между собой.
Для разработчика важно понимать базовую архитектуру и основные абстракции, с которыми придется работать ежедневно:
- Pod (Под) — минимальная единица развертывания. Внутри пода живет один или несколько контейнеров, которые делят общие ресурсы (сеть и хранилище). Обычно это один контейнер с приложением и, возможно, вспомогательный sidecar-контейнер.
- Deployment — объект, который описывает желаемое состояние приложения. Например, вы указываете, что в кластере всегда должно быть запущено три экземпляра (реплики) вашего сервиса. Если один под упадет, Kubernetes сам его перезапустит.
- Service — абстракция, которая определяет, как получить доступ к группе подов по сети. Поды эфемерны (их IP-адреса меняются при перезапуске), а Service дает стабильный IP или DNS-имя.
- ConfigMap и Secret — инструменты для прокидывания конфигураций и паролей в контейнер через переменные окружения или файлы, чтобы не хранить их внутри образа.
Процесс работы обычно выглядит так: разработчик описывает нужные ресурсы в YAML-файлах и отправляет их в API-сервер Kubernetes через утилиту kubectl. Дальше в дело вступает Control Plane, который решает, на каких физических или виртуальных машинах (нодах) запустить эти поды, основываясь на доступных ресурсах (CPU и RAM).
Пример простейшего манифеста для запуска приложения:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"Здесь мы не просто запускаем контейнер, но и сразу задаем лимиты ресурсов, что критично для стабильности кластера. Также Kubernetes берет на себя задачи Service Discovery, балансировки нагрузки и стратегий обновления (например, Rolling Update), когда новая версия приложения выкатывается постепенно без простоя сервиса.