Облачные приложения и Kubernetes: Kubernetes как услуга

Система оркестровки контейнеров Kubernetes была разработана несколькими инженерами Google, которые спроектировали внутреннего менеджера Google – Borg. Эти инженеры решили создать систему управления контейнерами с открытым исходным кодом, которая объединила бы их опыт, полученный во время разработки этой внутренней контейнерной платформы. Начиная с релиза v1.0 в июле 2015 года, Kubernetes быстро развивался; вскоре он был внедрен в крупные производственные развертывания такими организациями, как Bloomberg, Uber, eBay и т.п. В марте 2018 года Kubernetes стал первым проектом, который вышел в Cloud Native Computing Foundation, а это значит, что он стал достаточно зрелым и стабильным для работы с крупномасштабными производственными развертываниями и достиг высокого уровня качества и безопасности кода.

Читайте также:

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

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

Обзор архитектуры Kubernetes

Kubernetes – это кластер контейнеров, динамическая система, которая управляет развертыванием, управлением и объединением контейнеров в группе рабочих серверов. Эти рабочие серверы, на которых работают контейнеры, называются нодами, а серверы, которые управляют этими запущенными контейнерами, называются Kubernetes Control Plane.

Контейнеры и поды

сейчас важно отметить, что наименьшая развертываемая единица в кластере Kubernetes — это не контейнер, а под (Pod). Под обычно состоит из контейнера приложения (например, докеризованного приложения Express/Node.js) или контейнера приложения и любых sidecar контейнеров (сопровождающих), которые выполняют некоторую вспомогательную функцию – мониторинг или логирование. Контейнеры в поде совместно используют ресурсы хранения, пространство имен сети и портов. Под может рассматриваться как группа контейнеров, которые совместно работают для реализации той или иной функции. Благодаря подам разработчики могут быть уверены, что необходимые наборы контейнеров всегда будут планироваться и запускаться на нодах вместе.

Масштабирование, обновление и откат: развертывания в Kubernetes

Поды обычно разворачиваются с использованием развертываний (deployments). Это объекты, определенные YAML-файлами, которые декларируют конкретное желаемое состояние. Например, приложение может требовать запустить три реплики контейнера веб-приложения Express/Node.js и открыть порт 8080 пода. После создания контроллер на Control Plane постепенно приведет фактическое состояние кластера в соответствие с желаемым состоянием, объявленным в развертывании, путем планирования контейнеров на нодах. Используя развертывания, владелец сервиса может легко масштабировать набор реплик пода горизонтально или без простоя выполнять обновление образа контейнера до новой версии – нужно просто отредактировать файл YAML и выполнить вызов API (например, с помощью клиента kubectl). Развертывания можно быстро откатить, приостановить и возобновить.

Доступ к приложению: сервисы Kubernetes

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

Управление подами: агенты нод Kubernetes

Для запуска и управления подами и их контейнерами на рабочих машинах ноды запускают процесс агента – kubelet, который взаимодействует с kube-apiserver на Control Plane. Используя среду выполнения контейнеров (такую как Docker), которая также работает на нодах, эти запланированные контейнеры сначала извлекаются как образы из частного или общедоступного реестра образов, а затем создаются и запускаются. Ноды также запускают клиент kube-proxy, который управляет сетевыми правилами на хосте.

Контроль и планирование: Kubernetes Control Plane

Control Plane управляет нодами и их расписанием и поддерживает их рабочие нагрузки. Он состоит из внешнего интерфейса kube-apiserver, поддерживаемого хранилищем «ключ-значение» etcd (для хранения всех данных кластера). Клиент kube-scheduler распределяет поды по нодам и планирует их, а набор контроллеров непрерывно наблюдает за состоянием кластера и подгоняет его фактическое состояние под желаемое.

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

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

Kubernetes как доступная услуга

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

Для развертывания собственного готового к работе кластера Kubernetes часто требуется пройти несколько трудоемких и дорогостоящих этапов: подготовить базовые ресурсы и инфраструктуру для Control Plane и нод; выполнить начальную установку и настройку компонентов Kubernetes (таких как кластер etcd и сеть подов); тщательно протестировать кластер на устойчивость к сбоям. После настройки кластеры Kubernetes должны управляться командой DevOps, а рутинные задачи обслуживания, такие как обновление кластера или базовой инфраструктуры, требуют ручного вмешательства со стороны инженеров.

Завершение перехода на Cloud Native: Snappy и управляемая инфраструктура Kubernetes

Вернемся к нашему примеру – приложению Snappy. Команда Snappy провела оценку Kubernetes как услуги и решила, что хотела бы развернуть на такой платформе приложение для обмена фотографиями на основе микросервисов. Работающее в Kubernetes приложение Snappy состоит из следующих трех подов (воспринимайте каждый из них как микросервис):

  1. Веб UI.
  2. Управление фотографиями.
  3. Управление пользователями.

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

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

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

Преимущества управляемой инфраструктуры Kubernetes

Простое, гибкое масштабирование

Группы разработчиков, использующие услугу Kubernetes, могут быстро создавать управляемые кластеры для рабочих нагрузок любого размера — от одной ноды, одного пода до огромного набора нод с непрерывно набирающими объемы вычислительными подами. Независимо от размера или количества запущенных приложений создание и работа кластера остаются простой задачей благодаря оптимизированному веб-интерфейсу и REST API, что позволяет разработчикам быстро запускать и масштабировать управляемый кластер Kubernetes. Иногда пользователи могут определять конфигурации стандартных и продвинутых серверов, оптимизируя соотношения цены и производительности и улучшая использование базовых ресурсов.

Управляемые операции и обслуживание

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

Изучение экосистемы Kubernetes

Если провайдер Kubernetes как услуги предоставляет API Control Plane, разработчики получают полный контроль над развертыванием, масштабированием и мониторингом рабочей нагрузки. Образы контейнеров можно получить непосредственно из открытых и частных реестров, таких как Docker Hub и Quay.io, предоставляя командам полную гибкость в проектировании и реализации конвейеров непрерывной интеграции и развертывания. С помощью этого открытого API разработчики могут ознакомиться с богатой экосистемой сторонних инструментов Kubernetes, а также создать собственные инструменты для реализации, если ни одно из существующих средств не отвечает их потребностям. Кроме того, некоторые провайдеры предоставляют пользовательский интерфейс, а также средства для мониторинга кластеров и устранения неполадок.

Tags: , ,