Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Введение в Kubernetes: преимущества для разработки

Миша Курушин
Миша Курушин
Технический писатель
05 октября 2023 г.
246
12 минут чтения
Средний рейтинг статьи: 5

Развертывание контейнерного приложения для среднего IT-специалиста — технически несложная задача. При использовании Docker все выглядит довольно просто. Создается Dockerfile, содержащий последовательность команд, необходимых для загрузки и установки зависимостей приложения, а также формирования правильной конфигурации окружения в рамках самой операционной системы.

Запуск, управление и остановка контейнеров — еще более тривиальная задача. Несколько консольных команд и несколько runtime-демонов — вот и все!

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

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

По сути, приложение становится тем, что в теории систем называют «системой с нередуцированной сложностью». Теперь это отдельные инкапсулированные друг от друга сущности-контейнеры.

Возникают вопросы об их правильной связи, синхронизации и коммуникации. Вопросы об отношении одних контейнеров с другими. А как мы знаем, когда растет сложность — нужно абстрагироваться. Иначе твой IT-продукт превратиться в трудно поддерживаемую кодовую лапшу с тяжким и болезненным «легаси».

На помощь приходят системы оркестрации.

Что такое Kubernetes?

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

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

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

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

Первый вариант приведет к абсолютному хаосу. Второй вариант добавит порядка и структуры — это и есть оркестрация Kubernetes.

Иными словами, Kubernetes обеспечивает дополнительный уровень координации, объединяющий отдельные контейнеры в единое целое. 

Разумеется, Kubernetes, будучи довольно гибким, стал своего рода стандартом оркестрации. Можно сказать, этот инструмент — монополист в области управления контейнерами. Причем настолько, что Kubernetes часто считают синонимом слова «оркестрация». И наоборот, соответственно.

При этом Kubernetes некогда был разработан командой из Google, но потом был передан «под крыло» Cloud Native Computing Foundation (CNCF). После этого инструмент оброс огромным сообществом.

Разумеется, больше всего в развитие проекта вложились Google и Red Hat — последние построили на его основе PaaS-платформу Red Hat OpenShift.

Kubernetes vs Docker

Кстати, многие считают, что Kubernetes (и сервисы на его базе) конкурируют с Docker, являясь его антагонистом. Однако это не так.

Docker и Kubernetes — инструменты, расположенные на разных уровнях абстракций. Первый — контейнеризатор, управляющий контейнерами. Второй — оркестратор, «отдающий команды» контейнеризатору.

Ведь «kubernetes» — греческое слово, означающее «капитан». Капитан управляет, распределяет, защищает.

Поэтому, стоит сразу проговорить нюансы, касающиеся отношения Kubernetes и Docker:

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

Преимущества Kubernetes для разработки

Снижение затрат на ручное управление контейнерами

Самое основное преимущество и причина использовать Kubernetes — автоматизация ручного труда.

Как крупные компании, так и небольшие проекты используют Kubernetes (и сервисы на его основе) для экономии человеко-часов (а значит и денег) на управлении экосистемами.

Kubernetes автоматически «понимает», как использовать ресурсы наилучшим образом — здесь не нужна человеческая аналитика и постоянный контроль.

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

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

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

Автоматическое масштабирование вверх и вниз

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

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

Рост эффективности DevOps и CI/CD

За счет высокого абстрагирования возможна интеграция контейнеров и их ресурсов от различных поставщиков облачных услуг. Все это упрощает разработку, тестирование и развертывание — все то, что так важно в CI/CD-подходах.

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

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

Благодаря оркестрации команды разработчиков могут быть меньше и, соответственно, дешевле.

Открытый исходный код

Инструмент находится под руководством сообщества. Это значит, что существует огромное количество производных сервисов и платформ — например, таких как Red Hat OpenShift.

К тому же благодаря этому такие общедоступные облака, как IBM, AWS, Google Cloud и Microsoft Azure, обеспечивают гораздо лучшую поддержку.

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

Kubernetes построен на клиент-серверной архитектуре. Да, установка с несколькими главными серверами (для повышения доступности) возможна, но так или иначе всегда используется один главный сервер — управляющий узел.

Главный сервер включает в себя некоторые основные компоненты. Например, Kube-apiserver, хранилище etcd, диспетчер-контроллер Kube, диспетчер облачных контроллеров, планировщик Kube и DNS-сервер.

В частности, это CLI-интерфейс командной строки kubectl, который является входной точкой для выполнения команд управления приложением.

То есть используется стандартный синтаксис по схеме: kubectl [команда] [тип] [имя] [флаги].

Однако прежде чем начинать разработку в Kubernetes, имеет смысл разобраться с его базовыми сущностями:

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

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

Разработка контейнерных приложений

Kubernetes идеально справляется с управлением множеством контейнеров.

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

Разработка облачных приложений

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

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

Мониторинг и логирование

У Kubernetes есть целый пул инструментов для мониторинга, логирования и сбора метрик всей экосистемы.

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

Некоторые из популярных решений мониторинга, разработанные специально под Kubernetes:

  • Prometheus
  • Stackdriver (разработан Google)
  • Papertrail
  • Datadog (проприетарный)
  • Heapster
  • Fluentd
  • Logstash

Управление сетевыми взаимодействиями

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

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

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

Самостоятельное развертывание vs KaaS

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

Преимуществ много:

  • Провайдер самостоятельно поддерживает экосистему, контролирует отказоустойчивость и безопасность Kubernetes. Вам остаётся только сфокусироваться на бизнес-логике и просто разрабатывать приложение.
  • Понимание основ Kubernetes (да и DevOps в целом) все еще нужно, но расходы сокращаются, а фокус на разработке повышается.
  • KaaS подходит для мгновенного развертывания и тестирования вашей бизнес-логики. При самостоятельном развертывании требуется более широкое видение архитектуры и намного больше времени.
  • Некоторые полезные решения существуют в облачном KaaS-сервисе «из коробки». Их не нужно устанавливать и настраивать самостоятельно. Сюда может входить системы балансировки нагрузки, ведения логов, хранилища, безопасность, авторизация и т.д.

По сути KaaS снижает порог входа для небольших команд. Требуется меньше времени, меньше сотрудников и меньше экспертности.

Тем не менее, уникальные требования к продукты, исходящие от более крупного (и сложного) рыночного игрока могут не «вместиться» в предложение среднего KaaS-провайдера. Экосистема начнет «упираться» в границы. При этом крупные компании довольно щепетильно относятся к контролю и конфиденциальности — размещать инфраструктуру на собственных физических серверах для них нередко в приоритете.

Как развернуть Kubernetes

Установка оркестратора представляет собой развертывание кластера Kubernetes. От начала до конца этот процесс можно поделить на несколько шагов:

  • Генерация SSH-ключей. Для каждой ноды требуется свой ключ. Он используется для remote-доступа к кластеру.
  • Загрузка пакетов. Как и при любой unix-установке важно обновить список репозиториев, а также убедиться в наличии таких базовых пакетов, как apt-transport-https, ca-certificates, curl.
  • Получение GPG-ключа. Ключ необходим для загрузки Docker из репозитория.
  • Установка Docker. Докер нужен для непосредственного управления контейнерами.
  • Установка Kubernetes. Выполняется загрузка таких необходимых модулей, как Kubelet, Kubeadm, Kubectl.
  • Запуск кластера. Сперва активируются рабочие ноды, после чего одна из них становится мастер-нодой — именно она будет выполнять управление всем кластером.

У нас есть небольшая инструкция о том, как развертывать Kubernetes-кластеры. А на официальном сайте Kubernetes есть материалы о том, как начать использовать оркестратор, а также туториалы по базовым возможностям.

Заключение

Очевидно, что Kubernetes останется ведущей системой оркестрации контейнеров. И скорее всего его популярность будет только расти — все больше предприятий и небольших команд (в том числе и начинающие разработчики) будут использовать возможности Kubernetes.

Использование Kubernetes дает множество преимуществ:

  • Эффективное горизонтальное и вертикальное масштабирование
  • Рост производительность человеческого труда
  • Высокая организационная и инфраструктурная мобильность

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

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

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

05 октября 2023 г.
246
12 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server