Зачем это нужно
Docker Compose поднимает сервисы на одной машине. В продакшене десятки inference-подов, GPU-ноды, rolling update без даунтайма, самовосстановление при падении контейнера. Kubernetes (k8s) — оркестратор контейнеров: планирует, где запустить Pod, следит за здоровьем, масштабирует, подключает сеть и диски.
MLE и backend-разработчик не обязаны администрировать кластер, но обязаны понимать, куда попадает их Helm chart и почему Pod в CrashLoopBackOff.
Основные идеи
Control plane (управляющий слой). «Мозг» кластера:
kube-apiserver — единая точка входа API; все
kubectlи контроллеры общаются с ним.etcd — хранилище состояния кластера (desired state).
kube-scheduler — выбирает node для нового Pod.
kube-controller-manager — контроллеры (Deployment, ReplicaSet и др.) приводят фактическое состояние к желаемому.
cloud-controller-manager — интеграция с облаком (LB, volumes) — если есть.
Worker nodes. Машины, где крутятся ваши контейнеры:
kubelet — агент на node; получает от apiserver «запусти Pod» и дергает container runtime.
kube-proxy — сетевые правила для Service (балансировка).
Container runtime — containerd, CRI-O (Docker как runtime устарел в k8s).
Pod — минимальная единица. Не контейнер, а группа контейнеров с общим network namespace и optional shared volumes. Обычно один основной контейнер + sidecar (логи, mesh proxy).
Declarative model. Вы описыете YAML «хочу 3 реплики образа X»; контроллеры выравнивают реальность. kubectl apply -f deployment.yaml.
Namespace. Логическое разделение: dev, staging, prod, team-ml. Квоты, RBAC, изоляция имён.
kubectl — ваш интерфейс. get, describe, logs, exec, apply, delete. Контекст и namespace: kubectl config set-context ..., -n prod.
Как это выглядит на практике
Вы деплоите inference-сервис после Jenkins push образа scorer:128:
kubectl get nodes kubectl get pods -n ml-prod kubectl describe pod scorer-7f8b9c -n ml-prod
Если Pod Pending — scheduler не нашёл node (не хватает CPU/RAM, taints, нет GPU). Если ImagePullBackOff — неверный тег или нет доступа к registry.
На C4-диаграмме кластер — Container «Kubernetes platform»: внутри — ваш Deployment, Service, Ingress (позже Istio). Control plane обычно на отдельных VM; workers — пул для ML и системных DaemonSet (логи, мониторинг).
Путь ML-сервиса в курсе: Docker image → Jenkins push → Helm chart (values: image tag) → Pod на worker → Service → Ingress/mesh.
Что сделать после занятия
Выполните
kubectl get componentstatusesилиkubectl get --raw='/readyz?verbose'(зависит от версии) и выпишите, какие компоненты control plane вы видите.Найдите Pod системного namespace (
kube-system) и объясните, зачем он нужен.Нарисуйте схему: developer → kubectl → apiserver → scheduler → kubelet → container.