Лучшие практики и рекомендации для запуска контейнеров и Kubernetes в производственных средах
Экосистема технологий контейнеризации быстро развивается и меняется, поэтому в этой сфере не хватает хороших рабочих практик. Тем не менее Kubernetes и контейнеры используют все чаще — как для модернизации старых приложений, так и для разработки современных облачных приложений.
Команда Kubernetes aaS от Mail.ru собрала прогнозы, советы и лучшие практики для лидеров рынка от Gartner, 451 Research, StacxRoх и других. Они позволят обеспечить и ускорить развертывание контейнеров в производственных средах.
Как понять, готова ли ваша компания разворачивать контейнеры в производственной среде
По данным Gartner, в 2022 году более 75% организаций будут использовать контейнеризованные приложения в производстве. Это значительно больше, чем в настоящее время, когда такие приложения использует меньше 30% компаний.
Согласно 451 Research, прогнозируемый рынок для применения контейнерных технологий в 2022 году, составит $ 4,3 млрд. Это более чем вдвое превышает суммы, прогнозируемые в 2019 году, темпы роста рынка составляют 30%.
В опросе Portworx и Aqua Security 87% респондентов заявили, что в настоящее время они используют контейнерные технологии. Для сравнения — в 2017 году таких респондентов было 55%.
Несмотря на растущий интерес и рост внедрения контейнеров, их запуск в производство требует обучения из-за технологической незрелости и отсутствия ноу-хау. Организации должны реалистично смотреть на бизнес-процессы, которые требуют контейнеризации приложений. IT-лидерам стоит оценить, есть ли у них набор навыков для движения вперед с учетом необходимости быстрого обучения.
Эксперты Gartner считают, что вопросы на рисунке ниже помогут понять, готовы ли вы к развертыванию контейнеров в производстве:
Самые частые ошибки при применении контейнеров в производстве
Организации часто недооценивают усилия, необходимые для эксплуатации контейнеров в производстве. Gartner обнаружил несколько распространенных ошибок в сценариях клиентов при применении контейнеров в производственных средах:
Как обеспечить безопасность контейнеров
Безопасностью нельзя заниматься «потом». Она должна быть встроена в процесс DevOps, поэтому появился даже специальный термин — DevSecOps. Организациям необходимо планировать защиту контейнерной среды на протяжении всего жизненного цикла разработки, который включает в себя процесс сборки и разработки, развертывание и запуск приложения.
Рекомендации от Gartner:
- Интегрируйте процесс сканирования образов приложения для поиска уязвимостей в конвейер непрерывной интеграции/непрерывной доставки (CI/CD). Приложения сканируются на этапах сборки и запуска ПО. Подчеркните необходимость сканирования и идентификации компонентов с открытым исходным кодом, библиотек и структур. Использование разработчиками старых уязвимых версий — одна из основных причин уязвимостей контейнеров.
- Улучшайте конфигурацию при помощи тестов Center for Internet Security (CIS), которые доступны как для Docker, так и для Kubernetes.
- Обязательно применяйте контроль доступа, обеспечьте разделение обязанностей и внедрите политику управления секретами. Конфиденциальная информация, такая как ключи Secure Sockets Layer (SSL) или учетные данные базы данных, шифруется оркестратором или сторонними службами управления и предоставляется во время выполнения
- Избегайте контейнеров с повышенными привилегиями при помощи управления политиками безопасности, это уменьшит потенциальные риски взлома.
- Используйте инструменты безопасности, которые предоставляют белые списки, поведенческий мониторинг и обнаружение аномалий для предотвращения злонамеренных действий.
Рекомендации от StacxRox:
- Используйте встроенные возможности Kubernetes. Настройте доступ для пользователей, используя роли. Убедитесь, что вы не предоставляете ненужные разрешения отдельным субъектам, даже если может потребоваться некоторое время для обдумывания минимально необходимых разрешений. Может показаться заманчивым дать администратору кластера широкие привилегии, так как это экономит время на начальном этапе. Однако любой компромисс или ошибки в учетной записи могут привести к разрушительным последствиям в дальнейшем.
- Избегайте дублирования разрешений доступа. Иногда бывает полезно сделать так, чтобы разные роли перекрывались, но это может привести к проблемам с эксплуатацией, а также создать «мертвые зоны» при удалении разрешений. Кроме того, важно удалять неиспользуемые и неактивные роли.
- Установите сетевые политики: изолируйте модули, чтобы ограничить к ним доступ; явно разрешите доступ в интернет тем модулям, которым это необходимо, используя метки; явно разрешите связь между теми модулями, которым нужно общаться друг с другом.
Как организовать мониторинг контейнеров и сервисов в них
Безопасность и мониторинг — основные проблемы компаний при развертывании кластеров Kubernetes. Разработчики всегда сильнее сосредоточены на функциях приложений, которые они разрабатывают, нежели на аспектах мониторинга этих приложений.
Рекомендации от Gartner:
- Старайтесь мониторить состояние контейнеров или сервисов в них совместно с мониторингом хост-систем.
- Отдавайте предпочтение производителям и инструментам с глубокой интеграцией в оркестрацию контейнеров, особенно Kubernetes.
- Выбирайте инструменты, которые предоставляют детальное логирование, автоматическое обнаружение сервисов и рекомендации в реальном времени с использованием аналитики и/или машинного обучения.
В блоге SolarWinds советуют:
- Использовать инструменты для автоматического обнаружения и отслеживания метрик контейнера, корреляции метрик производительности, таких как процессор, память и время безотказной работы.
- Обеспечить оптимальное планирование емкости путем прогнозирования сроков исчерпания емкости на основе показателей мониторинга контейнеров.
- Организовать мониторинг приложений, размещенных в контейнерах, по параметрам доступности и производительности, что полезно как для планирования емкости, так и для устранения проблем производительности.
- Автоматизировать рабочие процессы, предоставляя поддержку управления и масштабирования для контейнеров и их сред размещения.
- Автоматизировать контроль доступа, чтобы отслеживать базу пользователей, отключать устаревшие и гостевые учетные записи, удалять лишние привилегии.
- Убедиться, что ваш набор инструментов может отслеживать эти контейнеры и приложения в различных средах (облачных, локальных или гибридных) для визуализации и сопоставления производительности в инфраструктуре, сети, системах и приложениях.
Как хранить данные и обеспечить их безопасность
С увеличением числа рабочих контейнеров с сохранением состояния клиентам нужно учитывать нахождение данных за пределами хоста, а также необходимость защиты этих данных.
По данным опроса Portworx и Aqua Security, безопасность данных стоит на первом месте в списке проблем безопасности, отмеченных большинством респондентов (61%).
Шифрование данных является основной стратегией безопасности (64%), однако респонденты также используют мониторинг времени выполнения
(49%), сканирование уязвимостей в реестрах (49%), сканирование уязвимостей в конвейерах CI/CD (49%) и блокировку аномалий через защиту времени выполнения (48%).
Рекомендации от Gartner:
- Выбирайте решения хранения данных, построенные на принципах микросервисной архитектуры. Лучше остановиться на тех, что соответствуют требованиям по хранению данных для сервисов контейнеров, аппаратно независимы, управляются API, имеют распределенную архитектуру, поддерживают локальное развертывание и развертывание в общедоступном облаке.
- Избегайте проприетарных плагинов и интерфейсов. Выбирайте производителей, обеспечивающих интеграцию с Kubernetes и поддерживающих стандартные интерфейсы, такие как CSI (Container Storage Interfaces).
Как работать с сетями
Традиционная модель корпоративной сети, где IT-специалисты создают сетевые среды разработки, тестирования, обеспечения качества и производства для каждого проекта, не всегда хорошо согласуется с рабочим процессом непрерывной разработки. Кроме того, контейнерные сети охватывают несколько уровней.
В блоге Magalix собрали правила высокого уровня, которым должна соответствовать реализация кластерно-сетевого решения:
- Поды, запланированные на одном и том же узле, должны иметь возможность обмениваться данными с другими модулями без использования NAT (преобразование сетевых адресов).
- Все системные демоны (фоновые процессы, например kubelet), работающие на определенном узле, могут взаимодействовать с подами, работающими на том же узле.
- Поды, использующие сеть хоста, должны иметь возможность связываться со всеми другими подами на всех других узлах без использования NAT. Обратите внимание, что сеть хостов поддерживается только на хостах Linux.
Сетевые решения должны быть тесно интегрированы с примитивами и политиками Kubernetes. ИТ-руководители должны стремиться к высокой степени автоматизации сети, предоставлять разработчикам надлежащие инструменты и достаточную гибкость.
Рекомендации от Gartner:
- Выясните, поддерживает ли ваш CaaS (контейнер как сервис) или ваша сеть SDN (Software Defined Network) сети Kubernetes. Если нет или поддержка недостаточна, используйте для своих контейнеров сетевой интерфейс CNI (Container Network Interface), который поддерживает необходимый функционал и политики.
- Убедитесь, что ваш CaaS или PaaS (платформа как сервис) поддерживает создание входящих контроллеров и/или балансировщиков нагрузки, распределяющих входящий трафик между узлами кластера. Если такой возможности нет, изучите использование сторонних прокси или механизмов service mesh.
- Обучите своих сетевых инженеров работе с сетями Linux и инструментами сетевой автоматизации, чтобы уменьшить разрыв в навыках и повысить гибкость.
Как управлять жизненным циклом приложений
Для автоматизированной и бесперебойной доставки приложений нужно дополнить оркестровку контейнеров другими инструментами автоматизации, такими как продукты инфраструктуры как код (IaC). К ним относят Chef, Puppet, Ansible и Terraform.
Также требуются средства автоматизации сборки и выкатки приложений (см. «Магический квадрант для оркестровки выпуска приложений»). Контейнеры также предоставляют возможности для расширения, аналогичные возможностям, который существовали при развертывании виртуальных машин (ВМ). Таким образом, у IT-руководителей должны быть инструменты управления жизненным циклом контейнеров.
Рекомендации от Gartner:
- Установите стандарты базовых образов контейнеров с учетом размера, лицензирования и гибкости для добавления компонентов разработчиками.
- Используйте системы управления конфигурацией для управления жизненным циклом контейнеров, которые размещают конфигурацию в слоях на основе базовых образов, находящихся в публичных или приватных репозиториях.
- Интегрируйте платформу CaaS с инструментами автоматизации, чтобы автоматизировать весь рабочий процесс приложения.
Как управлять контейнерами с помощью оркестраторов
Основные функциональные возможности для развертывания контейнеров предоставляются на уровнях оркестровки и планирования. При планировании контейнеры размещаются на наиболее оптимальных хостах в кластере, как предписано требованиями уровня оркестровки.
Kubernetes де-факто стал стандартом оркестровки контейнеров с активным сообществом, его поддерживает большинство ведущих коммерческих поставщиков.
Рекомендации от Gartner:
- Определите базовые требования к элементам управления безопасностью, мониторингу, управлению политиками, сохранению данных, управлению сетями и жизненным циклом контейнеров.
- На основе этих требований выберите инструмент, который наилучшим образом соответствует вашим требованиям и сценариям использования.
- Используйте исследования Gartner (см. «Как выбрать модель развертывания Kubernetes»), чтобы понять достоинства и недостатки различных моделей развертывания Kubernetes и выбрать наиболее подходящую для вашей задачи.
- Выберите поставщика, который может обеспечить гибридную оркестровку для рабочих контейнеров в нескольких средах с тесной интеграцией с бэкендами, общими планами управления и согласованными моделями ценообразования.
Как использовать возможности облачных провайдеров
В Gartner считают, что интерес к развертыванию контейнеров в общедоступном облаке IaaS растет из-за доступности готовых предложений CaaS, а также тесной интеграции этих предложений с другими продуктами, предлагаемыми облачными провайдерами.
Облака IaaS предлагают потребление ресурсов по требованию, быструю масштабируемость и управление услугами, которое поможет избежать необходимости в глубоких знаниях об инфраструктуре и ее обслуживании. Большинство облачных провайдеров предлагают услугу управления контейнерами, а некоторые предлагают несколько вариантов оркестрации.
Ключевые облачные поставщики управляемых услуг представлены в таблице:
* Не будем скрывать, мы тут сами себя добавили при переводе:)
Поставщики общедоступных облаков также добавляют новые возможности и выпускают локальные продукты. В ближайшем будущем провайдеры облаков будут развивать поддержку гибридных облаков и мультиоблачных сред.
Рекомендации Gartner:
- Объективно оцените возможности вашей организации развертывать и управлять соответствующими инструментами, а также рассмотрите альтернативные сервисы управления облачными контейнерами.
- Тщательно выбирайте ПО, используйте open source там, где это возможно.
- Выбирайте поставщиков с едиными операционными моделями в гибридных средах, которые предлагают управление объединенными кластерами из единой панели, а также провайдеров, которые упрощают самостоятельное использование IaaS.
Несколько советов по выбору провайдера Kubernetes aaS из блога Replex:
- Стоит искать дистрибутивы, которые поддерживают высокую готовность из коробки. Это включает поддержку нескольких основных архитектур, высокодоступных компонентов etcd, а также резервное копирование и восстановление.
- Чтобы обеспечить мобильность сред Kubernetes, лучше выбирать облачных провайдеров, которые поддерживают широкий спектр моделей развертывания: от локальных до гибридных и мультиоблачных.
- Предложения провайдеров также стоит оценивать с учетом простоты настройки, установки и создания кластера, а также обновлений, мониторинга и устранения неполадок. Базовое требование — поддержка полностью автоматизированных обновлений кластера с нулевым временем простоя. Выбранное решение также должно позволять запускать обновления вручную.
- Управление идентификацией и доступом важно как с точки зрения безопасности, так и с точки зрения управления. Убедитесь, что выбранный дистрибутив Kubernetes поддерживает интеграцию со средствами аутентификации и авторизации, которые используются внутри компании. RBAC и детальный контроль доступа также являются важными наборами функций.
- Выбранный дистрибутив должен либо иметь собственное сетевое решение, определяемое программным обеспечением и охватывающее широкий спектр требований, предъявляемых различными приложениями или инфраструктурой, либо поддерживать одну из популярных реализаций сетей на основе CNI, включая Flannel, Calico, kube-router или OVN.
Внедрение контейнеров в производство становится основным направлением, о чем свидетельствуют результаты опроса, проведенного на сессии Gartner по инфраструктуре, операциям и облачным стратегиям (IOCS) в декабре 2018 года:
Как видим, 27% опрошенных уже используют контейнеры в работе, а 63% собираются это сделать.
В опросе Portworx и Aqua Security 24% респондентов сообщили, что инвестируют более полумиллиона долларов в год на контейнерные технологии, а 17% респондентов тратят на них более миллиона долларов в год.
Статья подготовлена командой облачной платформы Mail.ru Cloud Solutions.