Top.Mail.Ru
поддержка 24/7
поддержка 24/7

Что такое Kubernetes?

Экспертный материал |

Денис Афанасьев | Руководитель направления облачных решений


Kubernetes — это инструмент оркестрации контейнеров с открытым исходным кодом, который позволяет администраторам беспрепятственно развертывать контейнерные приложения, управлять ими и масштабировать их в самых разных производственных средах. Он абстрагирует базовую инфраструктуру хоста от приложения. Таким образом, приложения, разделенные на несколько контейнеров, могут работать как единое целое. Инструмент обрабатывает весь жизненный цикл контейнерных приложений. Первоначально он был разработан компанией Google для управления крупномасштабными контейнерными приложениями в производственных средах. Проект Kubernetes (сокращенно K8s) вырос из системы управления кластерами Borg, сказывается увлечение инженеров Google знаменитой вселенной сериала «Звездный путь» где как раз существовала одноименная раса. Несмотря на то, что поисковый гигант пожертвовал Kubernetes в фонд Cloud Native Computing Foundation (CNCF) в 2014 году, он продолжает активно способствовать развитию этого инструмента.

Kubernetes был написан на языке программирования Go. Он работает на самых разных платформах и моделях облачного развертывания. Организовывая приложения в кластер контейнеров, работающих на виртуализированной хост-ОС, Kubernetes позволяет предприятиям эффективно управлять ИТ-нагрузками. Он использует архитектуру Master/Worker, в которой главный узел контролирует и управляет рабочими узлами, выполняющими рабочие нагрузки контейнера через сервер API.

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

Что такое система оркестрации контейнеров

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

Например, Docker CLI (консольный клиент, позволяющий управлять Docker через интерфейс командной строки) можно использовать для выполнения действий с контейнерами, таких как запуск, завершение работы или извлечение и загрузка образов в реестр. Этот процесс удобен, когда есть только несколько контейнеров. Но по мере роста количества контейнеров и их распределения по нескольким систем, управление парком приложений из интерфейса командной строки Docker становится сложной задачей. Именно здесь требуется инструмент оркестрации контейнеров. Система оркестрации контейнеров расширяет возможности управления жизненным циклом контейнеров на кластеры контейнеров, которые развернуты в распределенных средах. Кластерами контейнеров можно управлять как единой логической единицей, если базовая инфраструктура хоста абстрагирована.

Зачем использовать Kubernetes

Как уже выше было сказано, Kubernetes изначально был разработан Google и выпущен с открытым исходным кодом в 2014 году. Сегодня это стандарт программного обеспечения для оркестрации контейнеров и управления виртуализацией. Все основные поставщики облачных услуг интегрировали его со своей облачной платформой, предлагая Kubernetes как услугу (Kubernetes as a Service). Google вместе с другими партнерами по экосистеме, такими как IBM, Red Hat и Intel, активно поддерживают инновации инструмента. Модель управления понятна, а растущая экосистема говорит о его долгосрочной жизнеспособности. 

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

Состояние рынка Kubernetes

Внедрение Kubernetes Enterprise постоянно растет. Недавняя пандемия и изоляция сподвигли многие компании пройти ускоренную цифровую трансформацию, в результате чего спрос на внедрение Kubernetes быстро вырос. Согласно опросу о внедрении Kubernetes, проведенному Portworx в 2021 году  (2021 Kubernetes Adoption Survey | Pure Storage), количество проектов на базе этого инструмента выросло на 68% во время пандемии. Хотя ускорение развертывания было основной движущей силой внедрения Kubernetes, оно также привело к снижению затрат на 30%, что еще более способствовало его успеху. 84% респондентов сообщили, что они используют Kubernetes для ресурсоемких и крупномасштабных целей, таких как модели тестирования ИИ и автоматизация инфраструктуры, что говорит об адекватности применения системы для масштабирования и управления операциями инфраструктуры с помощью этого инструмента.

Что касается преимуществ, 73 % поставили его на первое место за «более быстрое развертывание новых приложений», а 61 % заявили, что легко обновлять приложения и повторно использовать код в разных средах. Более того, 59% респондентов выиграли от сокращения расходов на ИТ и персонал. 

В сегменте программного обеспечения для управления виртуализацией доля рынка Kubernetes составляет 24,73%. Объяснимо, что индустрия программного обеспечения возглавляет рейтинг использования Kubernetes с 32%, за ней следует индустрия ITES с 15% и финансовые услуги с 5,6%. 

Что такое К8С

Термин Kubernetes происходит от греческого слова, которое означает пилот или рулевой. K8S — это короткая форма или аббревиатура Kubernetes. Число 8 относится к восьми буквам, которые стоят между «K» и «S» в слове (K UBERNETE S).

Возможности Kubernetes

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

  1. Средства абстракции Kubernetes — автоматическое масштабирование инфраструктуры по требованию, вертикальное и горизонтальное масштабирование.

  2. Автоматическое планирование контейнеров с указанием места запуска контейнеров и способа их запуска.

  3. Автоматическое откатывание приложения в случае обнаружения каких-либо несоответствий.

  4. Инфраструктура Kubernetes обладает способностью к самовосстановлению.

  5. Storage Orchestration позволяет администраторам выбирать определенные системы хранения для разных приложений.

  6. Kubernetes не ограничивается оркестровкой контейнеров. Он также управляет хранилищем, сетью и безопасностью.

И этот список можно продолжать и продолжать. Вот некоторые из его расширенных функций:

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

  2. Feature Gates — включает и выключает функцию узла.

  3. Cluster Federation — объединяет несколько кластеров K8S в один логический кластер.

  4. Customer Scheduler позволяет настроить управление специальными модулями. 

  5. Sidecar — запускает прокси-контейнер внутри модуля.

  6. Taints and Tolerations — заставляет поды притягиваться или отталкиваться друг от друга.

Краткое введение в архитектуру Kubernetes

Базовая архитектура Kubernetes состоит из следующих основных компонентов:

1.  Панель управления Kubernetes (мастер):

  • а. API-сервер;
  • b. Планировщик;
  • c. Менеджер контроллера;
  • d. etcd (распределенная система хранения).

2.  Ноды, вычислительные машины или кублеты (физические/виртуальные):

  • а. Движок Container Runtime;
  • b. Поды;
  • c. Прокси-сервер Kubernetes;
  • d. Служба Kubernetes.

Схема архитектуры Kubernetes с указанными выше компонентами.


Схема архитектуры Kubernetes

Панель управления Kubernetes

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

  1. Сервер API — внешний интерфейс панели управления, предоставляющий доступ к API. Он управляет оркестровкой жизненного цикла приложений, предоставляя различные API для выполнения определенных функций, выступая в качестве шлюза для доступа клиентов к кластерам.

  2. Диспетчер контроллеров — демон (daemon), который управляет состояниями объектов, всегда поддерживая их в желаемом состоянии при выполнении основных функций жизненного цикла.

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

  4. Etcd (распределенная система хранения) —  открытая и распределенная база данных хранения ключей и значений, которая управляет конфигурацией и состоянием кластеров с использованием алгоритма консенсуса Raft. Действуя как единый источник достоверной информации, etcd предоставляет необходимую информацию для панели управления, связанную с нодами, контейнерами и подами.

Узлы (ноды) Kubernetes. Kubelet

Ноды — это машины, на которых запущены контейнеры. Каждая нода содержит агент основного узла, который называется Kubelet. Это важный компонент архитектуры Kubernetes, управляющий уровнем выполнения контейнера. Они управляются панелью управления и соединяют различные приложения с ресурсами инфраструктуры, такими как хранилище, вычислительные и сетевые компоненты. Вот основные компоненты нод:

  1. Механизм выполнения контейнера — он управляет жизненным циклом контейнера, работающего на узлах, и поддерживает механизмы выполнения, такие как Docker, rkt и CRI-O, которые совместимы с Open Container Initiative.

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

  3. Служба Kubelet — агент, который управляет тем, как поды должны работать в кластере на основе спецификаций подов, определенных панелью управления через сервер API, и обеспечивает работоспособность и доступность всех контейнеров.

  4. Kube-proxy  — прокси-сервис, работающий на узле Kubernetes. Kube-proxy действует как балансировщик нагрузки для сетевых пакетов потоков TCP, UDP и SCTP.

Что такое Docker

Docker — это популярная технология контейнеризации с открытым исходным кодом, которая позволяет администраторам упаковывать приложения в контейнеры вместе со связанными библиотеками, реестрами и файлами конфигурации с помощью виртуализации на уровне ОС и развертывать их в самых разных средах. Docker Engine — это программное обеспечение, на котором размещаются контейнеры. Docker Inc. — компания, разработавшая и выпустившая Docker в 2013 году. Контейнеры Docker, облегченные благодаря высокоуровневому API Docker. Это дает возможность одновременно запускать несколько контейнеров на одной виртуальной машине или сервере. Их можно развернуть на популярных ОС, таких как Windows, macOS и Linux, а также в публичных или частных облаках и on-premises локациях. Процессы выполнения контейнера можно отслеживать с помощью функций ядра.

Архитектура Docker содержит три основных компонента:

  • Программное обеспечение Docker (dockerd)  — это демон Docker, который управляет контейнерами и их объектами. Пользователи могут общаться с dockerd с помощью клиента Docker, называемого «docker», через интерфейс командной строки. 

  • Объекты Docker. Работая с Docker, вы используете образа, контейнеры, тома, сети — все это объекты Docker.

  • Реестры Docker — репозитории образов Docker.

Когда контейнеры Docker запускаются в macOS, они используют виртуальную машину Docker. В средах Linux Docker использует изоляцию ядра Linux и функции файловой системы OverlayFS, что позволяет одному экземпляру Linux запускать несколько контейнеров.

Что такое контейнеры

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

По сравнению с виртуальными машинами контейнеры потребляют меньше ресурсов, поскольку несколько контейнеров совместно используют одно ядро ​​ОС. В то время как виртуальная машина обычно весит несколько гигабайт, контейнеры обычно имеют размер около 500 МБ, поскольку для них не требуется полноценная ОС. Контейнеры могут запускаться и останавливаться за несколько секунд, поскольку для запуска им не требуется вся операционная система.

Зачем нужны контейнеры Docker с Kubernetes

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

Концепция контейнеризации существует уже три десятилетия. Но именно появление Docker сделало контейнеры популярными. Docker стандартизировал экосистему контейнеров, и к 2013 году большинство компаний приняли ее в качестве runtime-среды по умолчанию для контейнеров. 

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

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

Сценарии использования Kubernetes

Непрерывная доставка (CI/CD)

Kubernetes может играть решающую роль в непрерывном развертывании (CD) конвейера DevOps CI/CD. По мере того, как разработчики создают код с помощью CI-сервера, Kubernetes автоматизирует развертывание. Популярные серверы CI, такие как GitLab, поставляются со встроенным реестром контейнеров, который использует платформу Kubernetes в конвейерах CI/CD.

Автоматизация инфраструктуры

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

Миграция в облако

Организации, которые планируют перенести свои локальную инфраструктуру в облако с помощью «Lift and Shift» метода, могут перенести все приложение целиком в большие модули Kubernetes, а затем разбить их на более мелкие компоненты, как только вы освоите облако. Это снижает риски миграции, помогая им в полной мере использовать преимущества облака. 

Мультиоблачная среда

Многооблачные среды включают в себя различные облачные развертывания, такие как общедоступные, частные, on-premises, «железные» сервера и т. д. Поскольку приложения и данные перемещаются в различных средах, управление распределением ресурсов является сложной задачей. Абстракция Kubernetes позволяет автоматизировать распределение вычислительных ресурсов в многооблачных средах, что означает, что организации могут эффективно распределять рабочие нагрузки между несколькими поставщиками облачных услуг. 

Бессерверная архитектура

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

Бессерверная архитектура

Кто использует Kubernetes

После размышлений о том, зачем использовать Kubernetes, следующий интересный вопрос, который приходит на ум: Кто вообще использует Kubernetes? Кроме очевидных глобальных лидеров Google, Amazon,Microsoft, можно привести в пример Spotify, New York Times, Pinterest, Booking.com, ЦЕРН, Adidas и т. д. - самые известные организации в списке из 25 290 компаний, использующих Kubernetes. 

Заключение

Экосистема контейнеров быстро развивается и переполняется. Все, начиная от стартапов и заканчивая предприятиями и поставщиками PaaS, пытаются оставить свой след в этой сфере. Тем не менее Docker и Kubernetes занимают самые высокие позиции. На наш взгляд, преимуществом обладает Kubernetes, ведь он поддерживается такими громкими именами, как Intel, IBM, Red Hat, Huawei и Google. Таким образом, возможности быстро улучшаются, что позволяет с уверенностью предположить, что данная система оркестрации контейнеров и далее будет оставаться ведущей экосистемой для разработки. Получается, что главный вопрос не в том, зачем использовать Kubernetes, а в том, почему мы не использовали Kubernetes раньше. Использование мощностей этого инструмента однозначно поможет выиграть в конкурентной борьбе.

Kubernetes в облаке
Загрузка ...