Kubernetes (сокращённо K8s) — система оркестрации контейнеров с открытым исходным кодом: автоматизирует развёртывание, масштабирование и управление контейнерными приложениями в кластере серверов. Проще говоря, платформа берёт на себя рутину: где запустить контейнер, что делать при сбое, как распределить нагрузку между узлами и обновить приложение без остановки сервиса.
Название происходит от древнегреческого κυβερνήτης (kybernḗtēs) — «кормчий», «рулевой». Метафора точная: Kubernetes «ведёт» контейнеры через изменчивую среду кластера, где узлы выходят из строя, нагрузка скачет, версии сервисов обновляются, — и удерживает систему на курсе. K8s — классический нумероним по тому же принципу, что i18n.
Проект вырос из внутреннего опыта Google по управлению кластерами — систем
Borg и её «младшего брата»
Omega, где компания больше десяти лет отрабатывала принципы планирования задач и изоляции ресурсов. Google опубликовала исходный код Kubernetes в 2014 году, а годом позже вместе с Linux Foundation учредила фонд
Cloud Native Computing Foundation (CNCF). Формально проект приняли в CNCF 10 марта 2016 года на уровне Incubating, а статус Graduated получил 6 марта 2018 года — согласно отчёту CNCF «Kubernetes Project Journey Report» (CNCF, 2024).
Kubernetes работает с контейнерами — изолированными средами выполнения приложения со всеми зависимостями, которые чаще всего собирают через Docker или аналогичные инструменты.
Docker решает задачу упаковки приложения — одного контейнера на одной машине; Kubernetes решает задачу управления сотнями и тысячами таких контейнеров сразу на множестве машин.
Разница между контейнером и виртуальной машиной — не в масштабе, а в уровне изоляции. ВМ эмулирует полноценное оборудование и поднимает поверх гипервизора собственное ядро ОС — надёжная, но тяжёлая изоляция. Контейнер — изолированный процесс на том же ядре хост-системы: Linux-механизмы namespaces и cgroups разграничивают для него сеть, файловую систему и лимиты ресурсов, не создавая отдельное ядро с нуля. Поэтому контейнеры стартуют быстрее и экономнее по ресурсам, но дают более слабую изоляцию на уровне ядра, чем ВМ — если это критично, контейнеры запускают внутри отдельных ВМ ради дополнительного барьера безопасности.
Ключевая идея платформы —
декларативный подход к управлению инфраструктурой в противовес императивному. При императивном управлении администратор описывает,
как достичь результата: команда kubectl run mypod --image=nginx явно запускает под. При декларативном описывается,
что должно быть в итоге, — манифест YAML фиксирует желаемое состояние, а Kubernetes сам решает, что делать: создать, обновить или пересоздать под после сбоя.
Разница между оркестрацией и ручным управлением видна на трёх ситуациях. Упал контейнер — служба замирает, пока инженер вручную не поднимет новый экземпляр на другом узле. Выросла нагрузка — масштабирование без автоматики требует ручного развёртывания и переконфигурирования балансировщика, «на лету» так не получится. Обновление версии на сотне контейнеров вручную растягивается на дни и часто требует остановки сервиса. Kubernetes закрывает все три сценария сам: пересоздаёт под на здоровом узле, масштабирует реплики под нагрузкой и обновляет поды последовательно — без простоя.