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 — процесс освоения облачной инфраструктуры — выглядит следующим образом:
- Контейнеризация. Обычно реализуется с помощью Docker. Упаковать в контейнеры можно приложения и их зависимости любого размера (хоть код для PDP-11, запускаемый в эмуляторе). Со временем рекомендуется разбивать на части существующие функции, а новые — реализовывать как микросервисы.
- CI/CD. Настройте непрерывную интеграцию и доставку (Continuous Integration / Continuous Delivery), чтобы изменения в исходном коде автоматически превращались в собранный с ними контейнер, тестировались и развёртывались на staging и в конечном счете, возможно, на production. Настройте автоматизированные выкаты, откаты и тестирование.
- Оркестровка. Выберите решение для оркестровки. Лидером рынка тут называется Kubernetes, а в качестве его дистрибутивов рекомендуются сертифицированные варианты.
- Наблюдение и анализ. Выберите решения для мониторинга, логирования, трассировки. Среди проектов CNCF — Prometheus (мониторинг), Fluentd (логирование), Jaeger (трассировка).
- Service mesh. Эти продукты решают вопросы взаимодействия между сервисами и их доступности извне (из интернета), в том числе — обнаружение сервисов, проверка их состояния, маршрутизация, балансировка нагрузки. CNCF предлагает Envoy, Linkerd и CoreDNS (мы также недавно писали про Conduit, который, впрочем, [пока что?] не числится в списке проектов CNCF).
- Сеть. Более гибкие сетевые возможности помогают обеспечить совместимые с CNI решения: Calico, Flannel, Weave Net.
- Распределённая база данных. Когда одной СУБД перестаёт хватать, для запуска MySQL в больших масштабах рекомендуется проект Vitess.
- Обмен сообщениями. Для достижения лучшей производительности, чем в случае JSON-REST, в CNCF предлагают попробовать gRPC.
- Исполняемая среда контейнеров (container runtime). Альтернативные среды для запуска контейнеров, совместимые с OCI, — containerd, rkt и CRI-O.
- Распространение ПО. Для безопасного распространения собираемого программного обеспечения можно задействовать 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.
Читайте также в нашем блоге:
- «CNCF предложила бесплатное облако Open Source-проектам для DevOps/микросервисов»;
- «Сколько разработчиков думают, что Continuous Integration не нужна?»;
- «Какие известные компании используют Docker в production и для чего?»;
- «Зачем нужен Kubernetes и почему он больше, чем PaaS?»;
- «Статистика The New Stack о трудностях внедрения Kubernetes»;
- «Инфраструктура с Kubernetes как доступная услуга».
Автор: shurup