Основы K8s
Презентация
Ссылка на презентацию
Запись занятия
Последняя редакция: 04.09.26
Теория
Зачем нужен Kubernetes
Docker Compose закрывает базовые сценарии, но не решает: масштабирование, автоматизацию, рестарт упавших контейнеров, обновление приложений без даунтайма, балансировку нагрузки, доступ извне - всё это пришлось бы писать руками самому
Kubernetes умеет всё то же, что Docker Compose, и добавляет: поддержку нескольких хостов, механизмы автоматизации, настройку сети, управление используемыми ресурсами, мониторинг, абстракции для интеграции сервисов - фактически, state-of-the-art оркестрация контейнеров
Что нужно, чтобы начать
- CLI-инструмент -
kubectl - Редактор/IDE - на курсе используем VS Code, но есть и специализированные инструменты вроде Lens
- Кластер k8s
- Гипервизор - Docker
- Dashboard (например, Headlamp)
Локальный кластер или облако
- Локальный - бесплатно, но нагружает машину и ограничен по сети
- Облачный (YCloud) - платный, зато доступен снаружи и проще масштабируется
Для курса используем локальный кластер - minikube
Инструменты для локального кластера
| Инструмент | Особенность |
|---|---|
| MiniKube | Прост для обучения k8s |
| Kind | Production-ready, поддержка Docker |
| Kubeadm | Production-ready, распределённая архитектура |
| K3s | Легковесный, production-ready |
Мы используем MiniKube - он проще всег о для обучения k8s
kubectl - основные команды
kubectl apply -f <манифест>- применить манифест (создать/обновить ресурс)kubectl get <сущность>- список ресурсовkubectl describe <сущность> <имя>- подробная информация о ресурсеkubectl logs <под>- логи контейнераkubectl delete <сущность> <имя>- удалить ресурс
minikube - основные команды
minikube start- запустить кластерminikube start --memory 8g --cpus 4- запустить с заданными ресурсамиminikube stop- остановить кластерminikube delete- удалить кластер
Dashboard - Headlamp
Headlamp - графический dashboard для кластера
Показывает состояние ресурсов в реальном времени, позволяет редактировать их прямо в
интерфейсе, поддерживает плагины
Манифесты
Манифест - YAML-файл, текстовое описание сущности в k8s
Состоит из 4 обязательных полей:
- apiVersion - версия API
- kind - вид сущности (
Pod,Deployment,Serviceи т.д.) - metadata - метаинформация (имя, лейблы и т.д.)
- spec - спецификация - что именно нужно создать
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
Базовые абстракции
- Pod - базовая единица, может содержать несколько контейнеров
- Deployment - управляет набором подов (реплики, обновления)
- Service - сетевой доступ к подам
- ConfigMap - конфигурация, вынесенная из кода
Подробнее про Pod, Deployment и Service - в следующей теме («Базовые абстракции в K8s»)
Про ConfigMap - отдельно, в теме про развёртывание БД («Развертывание БД в K8s»)
Примеры
Запуск локального кластера и первый под:
minikube start --memory 8g --cpus 4
kubectl apply -f nginx-pod.yaml
kubectl get pods
kubectl logs nginx
Проверь себя
1. Какие проблемы решает Kubernetes, но не решает Docker Compose?
Масштабирование, автоматизацию, рестарт упавших контейнеров, обновление приложений без даунтайма, балансировку нагрузки, доступ извне
2. Чем локальный кластер отличается от облачного?
Локальный - бесплатный, но нагружает машину и ограничен по сети
Облачный - платный, но доступен снаружи и проще масштабируется
3. Какой инструмент для локального кластера используем на курсе и почему?
MiniKube - он проще всего для обучения k8s
4. Из каких 4 полей состоит манифест k8s?
apiVersion, kind, metadata, spec
5. Чем kubectl get отличается от kubectl describe?
get - список ресурсов, кратко
describe - подробная информация по одному ресурсу
Практика
- Установи
kubectl - Установи
minikubeи подними локальный кластер:minikube start --memory 8g --cpus 4 - Разверни
nginxчерез манифест:kubectl apply -f nginx-pod.yaml - Проверь, что под запущен:
kubectl get pods,kubectl logs nginx
Итог / чек-лист
- Kubernetes решает то, чего не хватает Docker Compose - масштабирование, автоматизацию, восстановление, балансировку, сеть
- Для курса - локальный кластер на MiniKube
- Манифест - YAML с полями
apiVersion/kind/metadata/spec - Базовые абстракции -
Pod,Deployment,Service,ConfigMap; Pod/Deployment/Service - в следующей теме, ConfigMap - в теме про развёртывание БД