Как Kubernetes помогает бизнесу экономить и сокращать time-to-market

14.08.2020
Как Kubernetes помогает бизнесу экономить и сокращать time-to-market

Kubernetes — очень удобная и очень популярная платформа контейнерной оркестрации. Разработчики давно в курсе, что это, как это работает и какие задачи позволяет решать. А вот менеджеры и представители бизнеса, не имеющие технического бэкграунда и далекие от технологических процессов, не всегда знают, в чем преимущества Kubernetes и как использование этой технологии позволяет сэкономить деньги компании, сократить time-to-market и получить дополнительную выгоду.

Разработка любого программного продукта — будь то сайт, сервис или мобильное приложение — проходит в несколько этапов: 
  • постановка задач с точки зрения бизнес-потребностей (привлечение новых клиентов, увеличение среднего чека и т. п.) и пользователя (интуитивно понятный интерфейс, время загрузки, удобная навигация и поиск и другие функции);
  • составление детального ТЗ для разработчиков;
  • непосредственно разработка;
  • сборка и развертывание MVP или релиза полноценного продукта и проверка его работоспособности.
Последний этап как раз и предполагает выбор среды исполнения для нового приложения или сервиса, т. к. именно от него зависит, насколько быстро и успешно пройдет процесс продакшена и когда новый программный продукт будет доступен для конечных пользователей.Размещение и среда исполнения приложений и сервисовФизический серверНа заре цифровых технологий единственной средой исполнения — то есть местом размещения всех сайтов, приложений, сервисов и т. п. — были физические серверы (bare metal), занимавшие вполне конкретное место под солнцем в офисе компании. Физические серверы имеют неоспоримые преимущества: для создания сервера можно использовать уже имеющееся оборудование, расположение сервера на территории компании гарантирует защищенность оборудования и данных (можно было не опасаться, что коммерческая тайна станет известна конкурентам), а для работы необходимых приложений достаточно хотя бы одного сервера.При этом минусов тоже достаточно. Физический сервер, как и любое оборудование, необходимо обновлять и ремонтировать (затраты на покупку и апгрейд), что приводит не только к дополнительным финансовым, но и временным затратам. Если сервер «упал», возобновление его работоспособности занимает от нескольких часов до нескольких дней в зависимости от сложности оборудования и наличия необходимых комплектующих. Кроме того, физические серверы плохо масштабируются, а для обеспечения их отказоустойчивости требуется как минимум еще один такой же физический сервер, работающий параллельно (за надежность нужно платить, и в случае с bare metal — как минимум в двойном размере). Размещение своих серверов на площадках хостера (услуга Collocation) или аренда серверов (услуга Dedicated) незначительно сокращают сроки обслуживания/ремонта.Виртуальные машиныНовый виток развития техпроцесса — это виртуальные машины (VM — virtual machine) — программно-аппаратные комплексы, эмулирующие работу компонентов аппаратного обеспечения реального компьютера (включая BIOS, оперативную память, жесткий диск и т. д.). На одном физическом сервере может функционировать несколько виртуальных машин — например, несколько серверов, работающих под разными операционными системами (различные версии Linux, Windows, FreeBSD и др.). Виртуальные машины можно запускать как на своих физических серверах, так и на арендованных. Также можно арендовать уже готовые виртуальные машины. Очевидно, что размещение сервисов на виртуальных машинах имеет преимущества перед размещением их на физических серверах. Масштабировать ресурсы виртуальной машины проще и быстрее (при наличии достаточных ресурсов у физического сервера, на котором запущены виртуальные машины). Перезагрузка и запуск виртуальных машин происходит быстрее, чем запуск физических серверов за счет применения разного рода оптимизаций и кэширования. Кроме того, арендованные виртуальные ресурсы не требуют обслуживания со стороны владельца бизнеса — ремонтом и модернизацией аппаратной платформы занимается облачный провайдер. Он же предоставляет резервирование вычислительных мощностей, благодаря чему обслуживание физических серверов происходит без остановки виртуальных машин клиентов (выполняется живая миграция виртуальных машин на другие физические серверы провайдера). В случае выхода из строя физического сервера облачного провайдера, на котором располагалась виртуальная машина, она также автоматически перезапускается на другом физическом сервере.Но у виртуальных машин есть и свои неудобства. В первую очередь это излишнее потребление ресурсов. Каждая виртуальная машина — это своя операционная система. Так, например, если необходимо запустить 3 независимых копии Nginx, то нужно поднять 3 виртуальные машины, что в итоге дает 3 полноценные операционные системы со всеми вытекающими накладными расходами. Кроме того, для обеспечения минимальной отказоустойчивости виртуальных машин необходимо иметь в наличии как минимум 2 физических сервера виртуализации и не менее важно обеспечить общее сетевое хранилище, объединяющее оба физических сервера для хранения образов этих виртуальных машин. Такой подход к отказоустойчивости позволяет осуществлять живую миграцию и быстро перезапускать «упавшие» виртуальные машины, если какой-то сервер вышел из строя, но он же приводит к увеличению расходов на VM по сравнению с вариантом простого размещения приложений и сервисов на физических серверах. КонтейнерыСледующим шагом в эволюции среды исполнения стала контейнеризация. Контейнеры прошли длительный путь своего становления от jail на FreeBSD и LXC-контейнеров на Linux, но самой удачной реализацией этой технологии стал Docker, механизм работы которого позволяет разработчику создавать ограниченное пространство (контейнер), в который уже включены все необходимые для работы приложения компоненты — нужные версии библиотек, набор необходимого ПО и др. Каждый контейнер в Docker представляет собой образ (image), для запуска которого не требуется дополнительных настроек. Преимущества при использовании контейнеризации:
  • быстрый процесс разработки,
  • удобная инкапсуляция приложений,
  • одинаковое поведение (воспроизводимость) приложения на локальном компьютере, сервере разработчика, производственном сервере заказчика.
Контейнеры — это не виртуальные машины, а специально разделенная среда, управляемая единым ядром операционной системы (под управлением одного ядра ОС может работать много контейнеров), поэтому и накладные расходы на них значительно меньше, т. к. отсутствуют дополнительные затраты на операционные системы для самих виртуалок. Контейнеры занимают меньше места на дисках и оперативной памяти, а запускаются значительно быстрее виртуальных машин, что позволяет экономить ресурсы сервера и увеличивает утилизацию оборудования. При использовании контейнеризации процесс миграции и масштабирования происходит значительно быстрее. Kubernetes — решение для контейнерной оркестрации с открытым исходным кодомКогда контейнеров становится очень много, возникает необходимость ими управлять. И если самой популярной средой для запуска контейнеров является Docker (более 85% всех контейнеров запускается именно там), то самое популярное на сегодняшний день решение для оркестрации контейнеров — Kubernetes. Так исторически сложилось: Docker стал первым удобным и универсальным средством работы с контейнерами, что позволило разработчикам быстрее создавать продукты, способные работать на разных серверах, а Kubernetes называют одной из самых удобных платформ с открытым исходным кодом, позволяющей управлять непрерывной оркестрацией тысяч контейнеров.Kubernetes (от др.-греч. κυβερνήτης — «кормчий», «рулевой», часто используется нумероним K8s) — открытое программное обеспечение (основной язык программирования Go) для автоматизации развертывания, масштабирования контейнеризированных приложений и управления ими. Kubernetes был создан в Google для внутренних нужд. В 2014 году были опубликованы исходные коды проекта Kubernetes, а 21 июля 2015-го выпущена версия 1.0. На сегодняшний день Kubernetes стал общепринятым стандартом контейнерной оркестрации и флагманским проектом фонда Cloud Native Computing Foundation (CNCF), в который входят Google, AWS, Microsoft, IBM, Intel, Cisco и Red Hat.Kubernetes — это не среда исполнения, а следовательно, не альтернатива Docker. Kubernetes — это инструмент для автоматизации работы и управления контейнерами, он дополняет Docker и существенно расширяет его возможности. О механизме работы Kubernetes мы поговорим в отдельной статье, а здесь перечислим преимущества этой платформы:
  • Надежность. Высокая надежность кластеров Kubernetes достигается благодаря большому количеству узлов (от 3 и более) и алгоритмов, обеспечивающих автоматический перезапуск подов (связанных групп контейнеров), если они по какой-либо причине стали недоступны.
  • Масштабируемость. При изменении нагрузки можно в ручном или автоматическом режиме увеличивать/уменьшать количество запущенных подов, достигая оптимальной производительности, а для арендованных мощностей — эксплуатационной стоимости.
  • Удобство разработки микросервисов. В Kubernetes можно легко создавать изолированные окружения для разработки, тестирования, продакшена. Обновления приложений можно проводить поэтапно (на заданный процент) и в случае необходимости проводить откат изменений.
  • Переход на методологию CI/CD. Kubernetes хорошо интегрируется с GitLab и помогает в переходе на практики CI/CD (Непрерывная интеграция / Непрерывное развертывание)
  • Сокращение сроков разработки и публикации приложения в сторах. Главное преимущество для бизнеса — стабильно работающее приложение и значительное сокращение time-to-market, что в условиях динамично меняющегося рынка может стать решающим конкурентным преимуществом для компании.
Подведем итогНа сегодняшний день Kubernetes фактически считается промышленным стандартом для использования технологии контейнеризации благодаря широким возможностям кастомизации и  является основой контейнер-сервисов ряда крупнейших облачных провайдеров:
  • Amazon (AWS Elastic Container Service)
  • Microsoft (Microsoft Azure Containers)
  • Google (Google Cloud Platform Kubernetes Engine)
  • Mail.Ru (MCS Cloud Containers)
  • Yandex (Yandex Managed Service for Kubernetes)
  • Selectel (Managed Kubernetes)
Kubernetes может быть настроен и запущен практически на любой аппаратной платформе — bare-metal, виртуальных машинах и в облаке, — а значит применим для любых сфер бизнеса, в т. ч. для тех, где требования к информационной безопасности жестко регламентированы регулирующими органами и предполагают защиту данных как на программном, так и на физическом уровне.

Читать ещё