Вы наверняка знаете, Kubernetes просто повсюду. От разработчиков, тестировщиков, DevOps-инженеров и системных аналитиков ожидают умения работать с этим инструментом. Даже продакт-менеджеры иногда интересуются, что это такое.

Если вы только начинаете знакомство с Kubernetes и хотите понять, с чего начать, эта статья для вас. Разберем, какие задачи он решает, какие у него основные объекты и как можно управлять кластером без сложных команд в терминале. Подробнее читайте внутри.

Автор: Артем Шумейко.

Используйте навигацию, если не хотите читать статью полностью

Как все работало до Kubernetes

Зачем вообще нужен Kubernetes? Давайте разбираться. Часто приложение представляют так: фронтенд + веб-интерфейс + бэкенд.

В бэкенд входят сервисы: основной, авторизации, уведомлений (нотификации) и платежей. Но есть один нюанс — неравномерная нагрузка. Люди авторизуются редко, делают заказы чуть чаще, получают уведомления еще чаще. Поэтому, чтобы обрабатывать большую нагрузку, мы разворачиваем каждый сервис в нескольких экземплярах.

Если располагать сервисы на одном сервере, не будет отказоустойчивости. Падает один сервер и падает все приложение. Нужно разнести сервисы по разным серверам. Например, арендовать три виртуальные машины или три физических сервера и распределить все эти сервисы. Так, если один сервер упадет, мы выживем. 

Следующая задача — распределить нагрузку. Для этого используем балансировщик. Но как он поймет, куда перенаправлять трафик?

Нужно руками в нем указать все IP-адреса всех серверов и порты, где находятся приложения. Со временем нагрузка увеличивается, сервис растет, становится больше пользователей. Необходимо добавить еще один экземпляр основного сервиса. И снова приходится обновлять все руками, что очень неудобно.

В какой-то день все сервисы на третьем сервере умирают, а балансировщик продолжает отправлять туда запросы. Он не понимает, что с ними что-то не так. Самостоятельно сервисы не поднимутся, придется делать это руками. При этом пострадали мы и пользователи, у которых в лучшем случае была большая задержка, а в худшем — все зависло на полчаса. 

С обновлениями приложения ситуация еще интереснее. Можем убить сразу все пять сервисов, а потом поднять их заново. Но тогда будет даунтайм, и пользователи будут ждать. Поэтому выключать сервисы надо по очереди. Первый сервис выключили, потом включили его новую версию. Если все хорошо, то версию деплоим на все остальные серверы. Да, снова руками, снова неудобно. 

Потом в новом обновлении нашлась утечка памяти. Нужно откатываться на прошлую версию. И конечно, нам нужно убивать попеременно каждый сервис и заново запускать со старой версией. 

Это был маленький кусочек системы. В небольших компаниях это выглядит вот так:

А в крупных компаниях — примерно вот так:

 И чтобы всем этим управлять, на помощь пришел Kubernetes.

Managed Kubernetes на выделенных серверах

Снизьте расходы на IT-инфраструктуру и улучшите производительность микросервисов.

Подробнее →

Kubernetes

Kubernetes — это система с открытым кодом которая автоматизирует развертывание, масштабирование и управление контейнеризированными приложениями. Она помогает запускать, масштабировать и поддерживать приложения, упрощая работу с ними и распределяя нагрузку между сервисами.

Он решает следующие задачи: 

  • деплоймент — поднимает новые экземпляры приложения; 

  • самовосстановление — следит за приложением, если упало, автоматически перезапускает;

  • управление — контролирует жизненный цикл приложения;

  • масштабирование — добавляет или уменьшает количество экземпляров приложения, в зависимости от нагрузки; 

  • балансировка трафика — распределяет нагрузку, по экземплярам приложений.

Но Kubernetes не хранит данные и образы приложений, а также не собирает Docker-образы. 

Как устроен Kubernetes

Пройдемся по верхам. Нода (node) — это сервер или виртуальная машина. Можно представлять себе компьютер в дата-центре. Есть мастер-нода (master node) — центр управления, мозг Kubernetes. Он управляет всем остальным. И есть воркер-ноды (они же worker node, или просто воркеры) — серверы или виртуальные машины, на которых запущены приложения. Там крутятся API, фронтенд, приложения, базы данных и т. д.

Чтобы быть отказоустойчивым, Kubernetes использует три мастер-ноды. Что находится в них? Первое и самое простое — etcd. Это база данных формата «ключ — значение»‎, которая содержит текущую конфигурацию и состояние кластера Kubernetes. Например, в ней хранится информация о развертываемых приложениях, настройках и ресурсах. Есть scheduler, который определяет, на какую из воркер-нод деплоим приложение.

Далее — API-сервер. С ним общаются все: от разработчика до нод. Никто напрямую в базу ETCD не лезет и ей не управляет. API — это единственная точка входа в кубер. И последнее — Controller manager. Программа, которая следит за тем, чтобы все, что попросили, было сделано.

Управлять Kubernetes и в целом работать с ним можно через kubectl. Это интерфейс в командной строке, с помощью которого получаем информацию о Kubernetes.

Что такое minikube

Minikube создает кластер Kubernetes на локальной машине. Для него достаточно одной машины, одного ноутбука. В данном случае, Mac OS.

Устанавливается в две команды и запускается через minikube start. Например, мы можем в командной строке вызвать kubectl и get nodes. Так как K8s развернут на одной машине, воркер- и мастер-ноды объединены. 

Не всем удобно работать с Kubernetes через командную строку. Поэтому придумали утилиту для визуального отображения — Kubernetes dashboard. Если здесь выбрать все namespaces, то виден состав кластера. Например: Deployments, Pods, Replica Sets.

Помимо этого, можно посмотреть, сколько CPU занято, сколько используется ядер и памяти и даже посмотреть какие-то логи.

Deployment

Начнем с самого маленького, что можно представить. Под — минимальная концепция в Kubernetes. K8s не оперирует термином контейнер, чаще всего говорят о подах. И обычно в поде всего один Docker-контейнер (приложение).

Deployment — манифест или просто yaml-файл, в котором описываем, что нам надо. Deployment не сразу создает под, он сначала создает, ReplicaSet. Она уже поднимает поды и следит за тем, что поднято и что работает.

А как вообще ведется работа с трафиком в Kubernetes? Как одному поду достучаться до другого? И самое главное — как пользователь по ту сторону интернета может пробросить запрос. Когда на пути все эти слои Kubernetes до нашего приложения. 

Чаще всего ставится Ingress Controller. Ingress содержит правила как распределять входящий трафик из интернета. Еще часто ставят Nginx. И после того, как он принял запрос, его отправляет в Service. И Service уже понимает, в какой под отправить запрос. Вы можете спросить: «Нам этот ваш Service не нужон А зачем нам этот Service? Почему нельзя сразу в под отправить, зачем лишние сущности?». 

Так вот, поды — это наше приложение. Они разворачиваются на разных нодах, разных серверах или у них меняется IP адрес, местоположение.

А внутри Kubernetes может быть 15 подов: по пять на каждом сервере. Чтобы понять, куда послать запрос, нужен Service. 

На каждом сервере, на каждой ноде есть программа. Она называется kube-proxy. Именно она принимает запрос от условного Nginx. И уже он балансирует нагрузку и понимает, в какой под нужно отправить запрос.

Еще один нюанс, на каждой ноде есть еще один процесс — kubelet. Он отвечает за то, чтобы было развернуто ровно столько подов, сколько попросили, определенное количество реплик приложения.

Kubelet занимается тем, что проверяет каждые несколько секунд, жив ли под. DevOps-инженеры или разработчики могут указать, как часто нужно проверять, что приложение живо, а также задать условия проверок.

Что делать с базами данных (PostgreSQL, Redis, Kafka), которым нужно определенное состояние? Их нельзя просто так развернуть на другой ноде. У каждого приложения есть свое хранилище, и к нему должен привязываться конкретный под. Поэтому вместо deployment, есть сущность StatefulSet.

Она позволяет каждому экземпляру приложения выдавать конкретные IP адреса, помечать их конкретными именами, реплицировать всю нагрузку и добавлять health Check. Чаще всего StatefulSet в сыром виде не используется. Обычно используют уже готовые образы.

А теперь давайте перейдем к самому интересному — немного поработаем с Kubernetes и запустим собственное приложение. Если хочется увидеть весь процесс настройки и деплоя в действии, предлагаем посмотреть на реальный пример в видео.

Пошаговый гайд по развертыванию кластера K8s и настройке приложения

Kubernetes: торт или не торт?

Kubernetes — один из самых востребованных инструментов в IT-индустрии, и его популярность продолжает расти. По последним данным, в 2024 году 96% компаний уже использовали или тестировали кубер. Более того, 45% опрошенных работают с пятью и более кластерами, а у 15% в продакшене развернуто более 50. 

В России Kubernetes также занимает лидирующую позицию: 57% респондентов используют его для оркестрации. Почему это так? Потому что Kubernetes решает сложнейшие задачи автоматизации развертывания, масштабирования и управления приложениями. 

Итак, несмотря на широкий спектр применения Kubernetes, самостоятельная поддержка кластера нередко оказывается сложной задачей. Часто в командах не хватает необходимых ресурсов или компетенций, а содержание полной команды DevOps-специалистов может быть экономически невыгодным. 

В таких случаях часть функций стоит доверить провайдеру Managed Kubernetes. Такой подход упрощает работу с кластерами, включая их развертывание, масштабирование и обслуживание инфраструктуры в целом. Сервис гарантирует стабильную работу за счет отказоустойчивости и автомасштабирования. Вы можете создать кластер любой конфигурации в несколько кликов

Доступность кластеров в Managed Kubernetes определяется и фиксируется в SLA, поэтому, пользуясь услугой, компания может снять с себя часть рисков и делегировать их провайдеру услуги. Это позволяет сосредоточиться на развитии продукта, а не на настройке инфраструктуры.

Знание Kubernetes открывает двери к созданию современных, гибких и стабильных IT-инфраструктур, которые поддерживают бизнес в условиях быстрого роста и изменений. Это означает готовность к новым цифровым вызовам. 

Вы только начинаете рассматривать Kubernetes или уже давно используете? Делитесь мнением в комментариях.

Комментарии (20)


  1. ITANIMVLLI
    14.10.2025 17:28

    Статья не для начинающих. Начинается плавно и хорошо, но с раздела Deployment возникают вопросы "кто на ком стоял" и "как все-таки нарисовать сову". Слишком сжато? Бессвязная статья.


    1. action5
      14.10.2025 17:28

      согласен. Зашел чтобы прочитать простыми словами про кибирнейтс - Слишком сложно. )


  1. wabalabudabdab
    14.10.2025 17:28

    Статья норм, спасибо


  1. bogusa
    14.10.2025 17:28

    До прочтения статьи, я думал, что что-то знаю о Kubernetes. Но оказалось, что это не так. На книгу из серии для чайников статья не подходит.


  1. rozenkreuser
    14.10.2025 17:28

    Спасибо за статью, но после прочтения появились вопросы. Все рассказывают про роли, процессы кубера, ноды итд, но никто не пишет про железо. Как правильно обеспечить хранение подов (схд / nfs/ сетевая фс) ? Фс должна быть shared или достаточно рейд массива на серверах? Какая скорость сети необходима для функционирования кластера? А если внутри пода бд? Как обеспечить её скалирование и консистентность данных?


    1. vesper-bot
      14.10.2025 17:28

      Не подов, а их данных, и изначально все поды были эфемерные - хранилище выделялось на нодах без какой-либо персистентности. А потом какие-то умные головы начали пихать в куб СУБД, которые затребовали постоянное хранение, кубу пришлось городить PVC/PV инфраструктуру - и вы спрашиваете коркретно про неё, а она вообще говоря кубо-независимая, и под её капотом может сидеть и NFS, и локальные рейды, и какой-нибудь Ceph, и ХЗ что ещё, вплоть до физического NAS'a, который научили выделять пространство мелкими кусочками по запросу. Остальные ваши запросы уже третий уровень, из-за этого и порождаемой сложности управления (а куб непрозрачно работает с statefulset'ами БД) я лично предпочитаю держать БД вне куба.


  1. Year
    14.10.2025 17:28

    Для разработчика кубернетес - это API, предоставляющий интерфейс доступа для развертывания разрабатываемого контейнерного приложения в некоем облаке.

    Для системного администратора кубернетес - это оркестратор контейнерной инфраструктуры.

    Для архитектора кубернетес - это фреймворк для построения микросервисной архитектуры распределенного приложения.


  1. Akina
    14.10.2025 17:28

    Если располагать сервисы на одном сервере, не будет отказоустойчивости. Падает один сервер и падает все приложение.

    А далее

    Следующая задача — распределить нагрузку. Для этого используем балансировщик.

    Стоп... Балансировщик - ОДИН. Посему первая цитата относится к нему в полный рост - падает сервер с балансировщиком, и падает всё приложение. Ну и где профит?

    Есть мастер-нода (master node) — центр управления, мозг Kubernetes. Он управляет всем остальным.

    И снова - одна точка. Падает сервер... и далее по тексту. Гм...

    А, нет, дальше есть ещё

    Чтобы быть отказоустойчивым, Kubernetes использует три мастер-ноды.

    Отлично... Три ноды, и вероятно, на трёх разных серверах (иначе зачем вообще нафига козе баян). Так ведь, ну правда же?

    Но тогда снова возникает вопрос - а где у нас балансировщик для этих трёх нод?

    ---------------

    В общем, как-то вопрос балансирования и надёжности совершенно не раскрыт...


    1. Gilberg
      14.10.2025 17:28

      Отказоустойчивость это глубокая тема

      Если говорить про балансировщики в отрыве от куба, по старинке, на виртуалках, то есть как минимум два "дешёвых" способа (не идентичны, можно совмещать, есть плюсы/минусы, особенности и прочие нюансы, я только про возможные способы):

      1. Сервер "на подхвате" (virtual IP, floating IP): имеется балансировщик и полная его копия. На них устанавливается сервис keepalived, выбирается VIP (Virtual IP), выбираются приоритеты серверов для роли мастер-бэкап. В dns заносится A-запись, указывающая на этот VIP. keepalived вместе со своим соседом решают, у кого какая роль и мастер устанавливает VIP на свой сетевой интерфейс. В случае выхода сервера из строя, бэкап-сервер заметив это, становится мастером и вешает VIP на себя. Дальше чуть-чуть сетевой магии (arp) и пакеты начинают идти к работающему серверу. Когда первый сервер вернётся, сервисы keepalived снова договорятся, кто есть кто, и адрес будет оставлен на новоизбранном мастере

      2. "Балансировка" при помощи dns: в зоне делаются две или больше A-записи с одинаковым именем, каждая содержит IP адрес балансировщика. Клиенты при подключении будут резолвить адрес из этого имени и могут получить случайный адрес из списка. Если вдруг балансировщик по этому адресу не доступен, то (в зависимости от поведения клиента) клиент может выбрать следующий адрес/попытаться отрезовлить имя снова и так попадет на доступный балансировщик. Пример: nslookup ya.ru

      Есть вариант с (i)bgp, он же применим и к кубам.

      Кто-то может поделиться ещё работающими вариантами?)


      1. Akina
        14.10.2025 17:28

        Вы правильно сформулировали в самом начале основную проблему отказоустойчивости - одна точка входа. Именно в этом и есть проблема, остальное - следствия. Но дальше вы пытаетесь сказать, что Kubernetes каким-то мистическим способом более надёжен, хотя одна точка входа ну никуда не делась. Дополнительной информации, в каком месте и за счёт чего именно, нет - и утверждение о бОльшей надёжности повисло в воздухе.

        KeepAlive и RoundRobin - это для Kubernetes балансировщики, как я понимаю, ну совсем внешние (уж второй-то точно). И RoundRobin тут выглядит куда как предпочтительнее, потому что он на самом деле устраняет проблему единой точки входа. Правда, тут обязательно нужна поддержка на стороне клиента, чтобы, обнаружив, что нода не отвечает, он инициативно шёл на альтернативный адрес, а не выкидывал тупое "сайт недоступен" (увы, на операционную систему в этом вопросе надежды нет ну вообще никакой). И (тут уже совместно с сервером) умел определить момент разрыва и восстановить сессию, не начиная всё с самого начала.


        1. Gilberg
          14.10.2025 17:28

          Про одну точку входа формулировал не я.

          Кубы, в рамках статьи, да и в целом, в своей базе, предлагают отказоустойчивость и масштабирование приложения, резервирование своих жизненно необходимых компонентов, но они не обеспечивают защиту от всего: это не волшебная пилюля (хотя некоторые и пытаются подать его именно так). Это лишь часть инфраструктуры. А есть ещё сервера, сети, электричество - все это требует своего подхода.


  1. RSATom
    14.10.2025 17:28

    Вопрос от "чайника": что такое K8s и как оно соотносится с Kubernetes? Как-то неожиданно оно появляется в тексте..


    1. ColdPhoenix
      14.10.2025 17:28

      K8s это сокращение от Kubernetes, 8 означает количество опущенных букв.


      1. RSATom
        14.10.2025 17:28

        На самом деле я просто немного "подколол" автора. Но основной мой тезис немного шире - зачастую читая статьи "для чайников", о новых для себя вещах, "внезапно" встречаешь термины или сокращения которые никак не объясняются.


  1. Turbo_Pascal_55
    14.10.2025 17:28

    На ютубе эти картинки давно видел. Кто у кого плагиатил?


    1. ceveru
      14.10.2025 17:28

      по стилю похоже на то, что часть иллюстраций взята из оригинальной документации.


  1. jingvar
    14.10.2025 17:28

    О божественный кубер на волшебных технологиях. И вот прям тошнит от примеров на всяких магазинах и платежном говне.


  1. trueneu
    14.10.2025 17:28

    Кубер появился из-за того, что в Гугле желали утилизацией ресурсов управлять гибко, и днём крутить SeRP, а ночью отчёты на том же железе; а не из-за того, что никто отказоустойчивость не смог приготовить.


  1. S1M
    14.10.2025 17:28

    >>На каждом сервере, на каждой ноде есть программа. Она называется kube-proxy. Именно она принимает запрос от условного Nginx. И уже он балансирует нагрузку и понимает, в какой под нужно отправить запрос.

    Всегда думал, что kube-proxy отвечает за реализацию абстракции service и нарезает правила iptables под это дело. И ни в коем случае не принимает никакой трафик. А вот за реализацию overlay-сети между подами отвечает CNI (который опять же сам непосредственно трафик не принимает)


  1. S1M
    14.10.2025 17:28

    >>Еще один нюанс, на каждой ноде есть еще один процесс — kubelet. Он отвечает за то, чтобы было развернуто ровно столько подов, сколько попросили, определенное количество реплик приложения.

    Тут тоже есть небольшой вопрос. Технически kubelet выкачивает себе манифест пода, в который шедулер прописал его имя. Поднимает его и тыкает кочергой на предмет того жив он или нет. При этом он не знает, что творится на соседней ноде и про количество реплик подов в кластере. Согласно доков как раз-таки kube-controller-manager следил за количеством реплик и нарезает манифесты подов в нужном количестве.