Минутка 1-5: Ментальная модель — что такое Kubernetes на самом деле? Представьте, что вам нужно управлять флотом из сотен кораблей (контейнеров), перевозящих разные грузы (ваши приложения). Вам нужен диспетчерский центр. Kubernetes — это и есть такой центр. Его основная задача — декларативное управление. Вы описываете ЖЕЛАЕМОЕ СОСТОЯНИЕ вашей системы («мне нужно 5 копий моего веб-приложения, каждая на порту 8080, и база данных рядом»), а K8s непрерывно работает, чтобы реальность соответствовала этому описанию. Забудьте на время про запуск отдельных контейнеров. Вы управляете кластером — набором машин (нод), которые вместе образуют единую мощную вычислительную платформу.
Минутка 6-15: Ключевые строительные блоки — Pod, Deployment, Service. Это три кита, с которых начинается все.
- Pod (Под): Наименьшая и самая простая единица в K8s. Это «обертка» для одного или нескольких тесно связанных контейнеров, которые делят общее сетевое пространство и дисковые тома. Запомните: обычно один Pod — одно приложение. Но Pod смертен — он может умереть и не воскреснуть.
- Deployment (Развертывание): Вот где проявляется магия. Deployment — это абстракция, которая управляет жизненным циклом Pod'ов. Вы описываете в Deployment-манифесте шаблон Pod'а и количество его реплик (копий). Если одна реплика падает, Deployment автоматически создает новую на другой ноде. Он же позволяет легко обновлять приложение (rolling update) и откатываться. Секрет мастера №1: Используйте Deployments для всего, что имеет состояние «статистик» (stateless) — веб-серверы, API.
- Service (Сервис): Pod'ы динамичны — они создаются, удаляются, получают новые IP-адреса. Как к ним обращаться? Service создает стабильную точку доступа (постоянный DNS-имя и IP внутри кластера). Он балансирует нагрузку между всеми Pod'ами, которые соответствуют определенным меткам (labels). Секрет мастера №2: Service типа ClusterIP для внутреннего общения, LoadBalancer или NodePort — для доступа извне.
- Создайте файл `deployment.yaml`:
metadata:
name: my-first-app
spec:
replicas: 3
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: nginx-container
image: nginx:alpine
ports:
- containerPort: 80
- Примените его: `kubectl apply -f deployment.yaml`. K8s создаст 3 Pod'а с nginx.
- Создайте сервис `service.yaml` для доступа:
metadata:
name: my-service
spec:
selector:
app: hello-world
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
- Примените: `kubectl apply -f service.yaml`. Через мгновение команда `kubectl get svc` покажет внешний IP вашего приложения. Откройте его в браузере — вы увидите приветствие Nginx. Вы только что развернули отказоустойчивое приложение!
- Секрет №3: Используйте Namespaces (пространства имен) для изоляции. `kubectl create namespace staging`. Делите кластер на логические сегменты: production, staging, development.
- Секрет №4: Конфигурацию и секреты храните в ConfigMaps и Secrets, а не в образах контейнеров. `kubectl create configmap my-config --from-literal=API_URL=api.example.com`.
- Секрет №5: Мониторьте и дебажьте с помощью `kubectl`. Основные команды: `kubectl get pods` (список подов), `kubectl describe pod ` (детальная информация), `kubectl logs ` (логи), `kubectl exec -it -- /bin/sh` (войти в контейнер).
- Секрет №6: Для stateful-приложений (базы данных) используйте StatefulSets, а для одноразовых задач — Jobs и CronJobs.
Комментарии (10)