Что такое Kubernetes?

Платформа DevOps упрощает развертывание распределенных систем и управление ими

Max Rehkopf Max Rehkopf

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

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

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

Kubernetes помогает разработчикам писать приложения, которые работают в кластере, поскольку платформа используется для оркестрации контейнерных систем среды выполнения в кластере сетевых аппаратных ресурсов. Как отмечает Google, «основная цель проектирования Kubernetes заключается в том, чтобы упростить развертывание и контроль сложных распределенных систем, сохраняя при этом пользу от оптимизации использования контейнеров».

Kubernetes иногда называется K8 или kube и в настоящее время поддерживается организацией Cloud Native Computing Foundation.

Для чего используется Kubernetes?

Платформа Kubernetes используется в основном для развертывания и контроля кластера контейнерных приложений, а также может быть полезна при создании собственной платформы CaaS. Она помогает управлять архитектурами приложений микрослужб и в настоящее время является критически важным инструментом для создания надежных современных конвейеров непрерывной интеграции или непрерывной поставки по методологии DevOps.

Чтобы лучше понимать связь между Kubernetes и контейнерами, важно усвоить принципы работы контейнеров. Kubernetes объединяет набор контейнеров. Такой набор может быть представлен сервером приложений, кэшем Redis или базой данных SQL. Контейнер Docker может выполнять один процесс. Kubernetes помещает эти контейнеры в группу, управляемую на одной машине. Так удается сократить нагрузку на сеть, а также более эффективно использовать ресурсы.

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

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

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

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

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

Кому следует использовать Kubernetes?

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

Сравнение Kubernetes и Docker

Docker — это контейнерная среда выполнения, в то время как Kubernetes представляет собой платформу для запуска контейнеров и управления ими из многих контейнерных сред выполнения. Docker является одной из многих контейнерных сред выполнения, которые поддерживаются Kubernetes. Можно воспринимать Kubernetes как операционную систему, а контейнеры Docker — как приложения, устанавливаемые в такой системе.

Решение Docker само по себе очень полезно в современной разработке приложений. Оно решает классическую проблему, когда код работает только на одной машине и нигде больше. В автономном режиме Docker может справиться с обработкой развертывания нескольких контейнеров. Когда система растет и возникает необходимость добавить много контейнеров, связанных друг с другом по сети, Docker при автономной работе может столкнуться с проблемами. В этом случае поможет Kubernetes.

Основы Kubernetes

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

Схема работы Kubernetes, изображающая экземпляр Master, узел, Kubelet и модуль.

Кластер состоит из узлов. Узел — это машинная единица, например виртуальная машина или физическое оборудование, которая ведет себя как рабочий экземпляр в кластере Kubernetes. Все узлы содержат Kubelet — процесс-клиент, который взаимодействует с процессом Main с помощью точки доступа Kubernetes. В узлах также размещаются контейнерные среды выполнения, такие как Docker.

Каждый узел содержит Kubelet. Kubelet — главный процесс, который управляет узлом и обменивается данными с экземпляром Main. Kubelet также обрабатывает спецификацию PodSpec, которая определяет жизненный цикл и способ обслуживания контейнеров в модулях.

Узлы содержат модули — наименьшую единицу в Kubernetes. Модуль представляет собой абстракцию над контейнером. Он обычно включает в себя много контейнеров для одного приложения. В каждом модуле присутствует скрытый контейнер, называемый «контейнером паузы». Он содержит сетевое пространство имен, используемое другими контейнерами модуля для обмена данными с localhost.

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

Контроллер ReplicationController гарантирует работу заданного количества модулей в любой момент времени. Он играет центральную роль в автоматическом масштабировании Kubernetes. Если модулей слишком много, контроллер отбракует их, или создаст новые, если их окажется недостаточно. Элемент ReplicaSet является преемником ReplicationController. Он выполняет те же задачи, но с использованием утилит, облегчающих работу с набором модулей.

Kubectl — это интерфейс командной строки для выполнения команд в кластере Kubernetes. Решение имеет обширный список доступных команд и опций для управления Kubernetes.

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

Как работает Kubernetes?

Kubernetes работает в цикле сдержек и противовесов с тремя этапами. Эти этапы цикла Kubernetes заключаются в следующем.

Наблюдение
На этапе наблюдения Kubernetes создает снимок текущего состояния кластера. Процессы Kubelet собирают информацию о состоянии соответствующих узлов и передают ее обратно процессу Main в виде целостной картины текущего состояния кластеров.

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

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

Эти три стадии в общих чертах характеризуют цикл Kubernetes. При этом у кластера Kubernetes может быть много разных циклов. Эти циклы выполняются контроллерами. Контроллер ReplicationController (RC) следит за стадиями цикла. На стадии принятия мер RC несет полную ответственность за отбраковку или создание новых модулей, управляемых репликациями.

Резюме

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