Kubernetes запускает контейнеризированные приложения на кластере машин и поддерживает их в том состоянии, которое вы описываете. Система делает это, распределяя задачи на подходящие машины, направляя трафик в нужные узлы и отслеживая сбои и изменения.
Базовый поток
1. Вы описываете то, что хотите запустить
Большинство рабочих нагрузок в Kubernetes начинаются с объявления "желаемого состояния" (что именно должно быть запущено, сколько экземпляров и каким образом они должны быть доступны). Kubernetes построен на принципах декларативной конфигурации и автоматизации.
2. Kubernetes определяет, где это должно выполняться
Kubernetes распределяет контейнеры на узлах кластера, исходя из доступных вычислительных ресурсов и потребностей каждого контейнера. Контейнеры работают внутри Pod — единиц, которые Kubernetes размещает на компьютере.
3. Kubernetes постоянно сверяет реальное состояние с желаемым
Контроллеры отслеживают состояние кластера и стремятся приблизить текущее состояние к целевому, внося изменения через API-сервер.
Планирование размещения и текущее управление контейнерами
Планирование — это решение вопроса: "Где это должно выполняться?" решение.
1. Планируются Pod, а не отдельные контейнеры
Kubernetes группирует контейнеры в Pod, а затем размещает эти Pod на машинах.
2. Планировщик назначает Pod на подходящий узел
kube-scheduler ищет Pod, которым еще не назначен узел, и выбирает для них узел.
3. Агенты узлов поддерживают работу Pod
На каждом узле kubelet следит за тем, чтобы Pod (включая их контейнеры) были запущены.
Балансировка нагрузки и обнаружение служб
Контейнеры и Pod могут создаваться, перемещаться или заменяться, поэтому приложениям необходимы надежные способы нахождения друг друга.
Обнаружение сервисов и балансировка нагрузки — это встроенные функции
Kubernetes управляет обнаружением сервисов и использует балансировку нагрузки, что позволяет маршрутизировать трафик даже при изменении Pod с течением времени.
Службы предоставляют постоянный адрес для меняющегося набора Pod
Service API предоставляет стабильный IP-адрес или имя узла для службы, поддерживаемой одним или несколькими Pod, а Kubernetes отслеживает эти Pod с помощью объектов EndpointSlice.
Обновление маршрутизации трафика при изменении Pod
При изменении Pod, стоящих за службой, маршрутизация службы адаптируется, благодаря чему трафик продолжает поступать на актуальные серверные части.
Масштабирование приложений (и почему важно понятие "целевого состояния")
Kubernetes может масштабировать рабочие нагрузки до заданного вами состояния, в том числе на основе уровня использования вычислительных ресурсов.
К числу распространенных идей по масштабированию относятся:
Больше реплик (больше Pod) для обработки возросшего спроса.
Меньше реплик при снижении спроса.
Отслеживание ресурсов, поэтому решения о размещении учитывают потребности в процессоре и памяти.
Это возвращает нас к модели "желаемого состояния": вы задаете целевое состояние, а контроллеры продолжают работать над его достижением.
Самовосстановление: что происходит, когда что-то ломается
Kubernetes включает механизмы самовосстановления, призванные поддерживать работоспособность и доступность рабочих нагрузок. К ним относятся:
Перезапуск сбойных контейнеров (перезапуск на уровне контейнера).
Замена сбойных Pod для поддержания требуемого числа реплик (замена реплик).
Перераспределение рабочих нагрузок при недоступности узлов.
Удаление неисправных Pod из конечных точек службы, чтобы трафик направлялся только на исправные Pod (балансировка нагрузки для служб).
Функция самовосстановления отслеживает состояние контейнеров и перезапускает или реплицирует их при возникновении проблем.
Роль KPI в Kubernetes
Ключевые показатели эффективности (КПЭ, или метрики) используются для оценки состояния кластера и характера рабочей нагрузки.
Откуда берутся КПЭ
Системные компоненты Kubernetes генерируют метрики (в формате Prometheus), которые полезны для создания панелей мониторинга и настройки оповещений.
Метрики обычно доступны через конечную точку /metrics компонента по HTTP, включая такие компоненты, как kube-apiserver, kube-scheduler, kubelet, kube-proxy и kube-controller-manager.
Примеры того, что помогают выявить КПЭ
Сигналы о состоянии кластера (метрики на уровне компонентов и шаблоны ошибок)
Стабильность рабочей нагрузки (например, частые перезапуски или замены)
Нагрузка на емкость (выделение ресурсов и спрос, привязанные к решениям масштабирования)
Почему это важно для ежедневной работы
Мониторинг обеспечивает командам более полное представление о ресурсах кластера, API Kubernetes, контейнерах и логах, что сокращает цикл обратной связи между возникновением проблемы и ее устранением.