Модуль 1 / 19
Архитектура Kubernetes и устройство кластера
Содержание
1. Цели и модель кластера
После модуля вы сможете объяснить путь запроса от kubectl до контейнера, разделить ответственность Control Plane и Worker Node и наблюдать reconciliation на локальном кластере kind.
- Control Plane хранит и согласует желаемое состояние
- Worker Nodes выполняют workloads
- Kubernetes API — контракт между пользователем и компонентами
- Pod — минимальная планируемая единица
2. Теория: желаемое состояние
Kubernetes — система управления desired state. Пользователь записывает spec через API Server, контроллеры сравнивают его с actual state и создают изменения, пока состояние не совпадёт.
Декларативная модель описывает результат, а не последовательность ручных действий. Reconciliation выполняется непрерывно и поэтому компенсирует удаление или отказ отдельных экземпляров.
3. Теория: Control Plane
kube-apiserver выполняет authentication, authorization и admission, проверяет объект и работает с etcd. etcd хранит состояние API. kube-scheduler выбирает Node для неназначенного Pod, а kube-controller-manager запускает control loops.
Компоненты координируются через Kubernetes API. Недоступность API Server блокирует новые изменения, но уже запущенные процессы на Nodes не обязаны немедленно остановиться.
4. Теория: Worker Node и запуск Pod
kubelet наблюдает назначенные своему Node PodSpecs и через CRI управляет container runtime. Runtime загружает images и запускает containers; сетевой плагин реализует связность, а kube-proxy или его замена — сервисную маршрутизацию.
Docker не является обязательным runtime Kubernetes. Современный kubelet использует CRI-совместимые runtime, обычно containerd или CRI-O.
5. Теория: путь запроса
kubectl отправляет HTTPS-запрос в API Server. После проверки объект сохраняется, контроллер создаёт зависимые объекты, scheduler назначает Pod, kubelet запускает sandbox и контейнеры. Status и Events возвращают наблюдаемое состояние в API.
spec — намерение пользователя, status — наблюдение системы. Смешивать их при диагностике нельзя.
6. Методические указания
- Перед практикой проверьте docker, kind и kubectl; текущий context должен быть kind-course
- Выполняйте команды группами и после каждой формулируйте ожидаемое изменение
- Не разбирайте табличный вывод в автоматизации: используйте JSON, jsonpath или Go template
- Сначала собирайте evidence через get, describe и events, затем меняйте ресурс
- Локальный kind-кластер учебный и не моделирует HA Control Plane или production storage
7. Лаборатория: создаём кластер
Сохраните конфигурацию как kind.yaml. Она создаёт один control-plane и один worker Node.
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: course
nodes:
- role: control-plane
- role: workerkind create cluster --config kind.yaml
kubectl cluster-info --context kind-course
kubectl get nodes -o wide
kubectl get pods -n kube-system -o wide
kubectl get --raw /readyz?verbose
kubectl api-resourcesПроверьте Ready у обоих Nodes, системные Pods и успешный ответ /readyz. Не продолжайте, пока базовое состояние не объяснимо.
8. Лаборатория: наблюдаем reconciliation
Создайте Deployment, удалите управляемый Pod и наблюдайте его замену. Затем измените desired replicas с одной на три.
kubectl create namespace lab-architecture
kubectl create deployment web --image=nginx:1.28-alpine -n lab-architecture
kubectl rollout status deployment/web -n lab-architecture --timeout=120s
kubectl get deployment,replicaset,pod -n lab-architecture -o wide
kubectl delete pod -n lab-architecture -l app=web
kubectl get pods -n lab-architecture -w
kubectl scale deployment/web -n lab-architecture --replicas=3
kubectl wait -n lab-architecture --for=condition=Available deployment/web --timeout=120sГотово, когда Deployment Available, существуют три Ready Pod, а удалённый UID заменён новым.
9. Диагностика отказа
Намеренно задайте отсутствующий image tag. Timeout rollout здесь ожидаем: он доказывает, что новая ReplicaSet не стала Available.
kubectl set image deployment/web nginx=nginx:does-not-exist -n lab-architecture
kubectl rollout status deployment/web -n lab-architecture --timeout=30s
kubectl get pods -n lab-architecture
kubectl describe deployment web -n lab-architecture
kubectl events -n lab-architecture --types=Warning
kubectl rollout undo deployment/web -n lab-architecture
kubectl rollout status deployment/web -n lab-architecture --timeout=120s
kubectl delete namespace lab-architecture
kind delete cluster --name courseДиагностическая цепочка: scope и context → объект контроллера → Pod Conditions → container state → Warning Events → минимальное обратимое исправление.
10. Контроль и шпаргалка
- Почему scheduler не запускает контейнеры сам?
- Чем spec отличается от status?
- Что сохранится при недоступном API Server?
- Почему удалённый Pod Deployment появляется снова?
- Чем containerd отличается от Docker в контексте kubelet?
Минимум команд: kubectl cluster-info, get nodes, get pods -A, describe, events, logs. Модуль освоен, если вы без подсказки прослеживаете путь kubectl → API Server → controller → scheduler → kubelet → runtime и подтверждаете каждый этап данными.
PDF для работы офлайн
Скачайте оформленную версию модуля для чтения без подключения к сети.