Путеводитель CNCF по решениям Open Source (и не только) для cloud native

shurup 13 марта в 08:43 2,8k
8 марта фонд CNCF, созданный при The Linux Foundation, представил значительно обновлённую версию своей «карты ранее неизведанной территории облачных (cloud native) технологий» — Cloud Native Landscape 2.0. Собранная в рамках этого проекта информация ориентирована на компании, которые только начинают свой путь в мир инфраструктуры для cloud native-приложений, и призвана познакомить их с множеством имеющихся решений с открытым исходным кодом и не только.



Путь к cloud native


Для начала разберёмся, что же называют «cloud native» в фонде с созвучным названием (Cloud Native Computing Foundation). В понимании CNCF это приложения (и сопутствующая инфраструктура), которые наделены следующими свойствами:

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

Введением во всё многообразие существующих продуктов, которые помогают приложениям соответствовать этим требованиям, служит следующее описание основных шагов на пути к cloud native (перевод см. под картинкой).



Итак, рекомендуемый в CNCF Trail Map — процесс освоения облачной инфраструктуры — выглядит следующим образом:

  1. Контейнеризация. Обычно реализуется с помощью Docker. Упаковать в контейнеры можно приложения и их зависимости любого размера (хоть код для PDP-11, запускаемый в эмуляторе). Со временем рекомендуется разбивать на части существующие функции, а новые — реализовывать как микросервисы.
  2. CI/CD. Настройте непрерывную интеграцию и доставку (Continuous Integration / Continuous Delivery), чтобы изменения в исходном коде автоматически превращались в собранный с ними контейнер, тестировались и развёртывались на staging и в конечном счете, возможно, на production. Настройте автоматизированные выкаты, откаты и тестирование.
  3. Оркестровка. Выберите решение для оркестровки. Лидером рынка тут называется Kubernetes, а в качестве его дистрибутивов рекомендуются сертифицированные варианты.
  4. Наблюдение и анализ. Выберите решения для мониторинга, логирования, трассировки. Среди проектов CNCF — Prometheus (мониторинг), Fluentd (логирование), Jaeger (трассировка).
  5. Service mesh. Эти продукты решают вопросы взаимодействия между сервисами и их доступности извне (из интернета), в том числе — обнаружение сервисов, проверка их состояния, маршрутизация, балансировка нагрузки. CNCF предлагает Envoy, Linkerd и CoreDNS (мы также недавно писали про Conduit, который, впрочем, [пока что?] не числится в списке проектов CNCF).
  6. Сеть. Более гибкие сетевые возможности помогают обеспечить совместимые с CNI решения: Calico, Flannel, Weave Net.
  7. Распределённая база данных. Когда одной СУБД перестаёт хватать, для запуска MySQL в больших масштабах рекомендуется проект Vitess.
  8. Обмен сообщениями. Для достижения лучшей производительности, чем в случае JSON-REST, в CNCF предлагают попробовать gRPC.
  9. Исполняемая среда контейнеров (container runtime). Альтернативные среды для запуска контейнеров, совместимые с OCI, — containerd, rkt и CRI-O.
  10. Распространение ПО. Для безопасного распространения собираемого программного обеспечения можно задействовать Notary (мы писали о нём в конце этой статьи).

Первые 3 пункта являются базовыми, а остальные — выполняются по усмотрению, в зависимости от ситуации.

Cloud Native Landscape


Сам же «ландшафт» — это довольно обширный каталог продуктов, не ограниченных проектами самой CNCF и даже свободными лицензиями (хотя большинство из них относятся к Open Source). Для удобства они разбиты по категориям:

  • Разработка приложений: базы данных и хранилища данных (Vitess, CockroachDB…), очереди (RabbitMQ, Kafka…), управление исходным кодом (GitLab, GitHub…), моделирование/определение приложений (Docker Compose, Bitnami…), непрерывная интеграция и доставка (GitLab Runner, Jenkins…);
  • Оркестровка и управление: планирование/оркестровка (Kubernetes, Mesos…), взаимодействие и обнаружение сервисов (CoreDNS, Consul…), управление сервисами (gRPC, Linkerd…);
  • Окружение для исполнения: облачные хранилища (Rook, Ceph…), runtime для контейнеров (containerd, rkt…), облачные сетевые решения (CNI, open vSwitch…);
  • Provisioning: tooling и управление для хостов (Ansible, Chef…), инфраструктурная автоматизация (Helm, Terraform…), реестры контейнеров (Docker Registry, Quay…), безопасность образов (Notary, Clair…), управление ключами (Vault, Spire…);
  • Платформы: сертифицированные дистрибутивы Kubernetes (OpenShift, Tectonic…), сертифицированные платформы Kubernetes (Google Kubernetes Engine, Azure Container Service…), несертифицированные реализации Kubernetes (Amazon EKS, ContainerShip…), PaaS и контейнерные сервисы (Heroku, Hyper.sh…);
  • Наблюдение и анализ: мониторинг (Prometheus, Datadog…), логирование (fluentd, Graylog…), трассировка (Jaeger, Zipkin…), serverless (множество подкатегорий вынесено в отдельную таблицу);
  • Облака: публичные (AWS, Google Cloud…) и частные (OpenStack, MAAS…);
  • Сертифицированные сервис-провайдеры Kubernetes (Heptio, Huawei…).

Вся эта подборка представлена графически:


(Полное изображение в GitHub.)

(Примечание: в этой таблице можно также увидеть, что Kubernetes стал первым в истории CNCF проектом, достигнувшим статуса graduated, т.е. «выпускника». Об этом было объявлено совсем недавно — 6 марта. Все остальные проекты CNCF относятся к категориям incubating и inception.)

Интерактивный Landscape


Кроме того, со второй версией Cloud Native Landscape в CNCF запустили интерактивную веб-версию каталога, доступную как landscape.cncf.io (для serverless — s.cncf.io).

Контент для Landscape


Каталоги Cloud Native Landscape генерируются на основе данных, получаемых из специального YAML, к которому добавляются сведения из внешних сервисов (информация о проекте в GitHub, финансовые показатели из Crunchbase и Yahoo Finance), в результате чего получается новый YAML, а также JSON, который уже и используется приложением для вывода данных.

В CNCF приветствуют добавление новых проектов, что делается через pull request к упомянутому landscape.yml. У проекта должно быть хотя бы 250 звёздочек на GitHub и он должен соответствовать одной из имеющихся категорий (подробнее о предъявляемых требованиях см. здесь).

Основная таблица Cloud Native Landscape, как и её аналог для serverless, и упомянутый ранее Trail Map, доступны в разных форматах. Все данные проекта распространяются на условиях свободной лицензии Apache License 2.0 за исключением графических файлов и YAML (они лицензированы под Creative Commons Attribution 4.0), сведений от Crunchbase и логотипов проектов/продуктов.

P.S.


Читайте также в нашем блоге:

Проголосовать:
+24
Сохранить: