Блог Amazon Web Services
Создание кластеров с помощью EKS Blueprints
Оригинал статьи: ссылка (Kevin Coleman, Principal Container Specialist; Apoorva Kulkarni, Sr. Specialist Solutions Architect; Mikhail Shapirov, Senior Partner Solutions Architect; Vara Bonthu, Senior Open Source Engineer)
Сегодня мы представляем новый проект с открытым исходным кодом под названием EKS Blueprints, который упрощает и ускоряет внедрение Amazon Elastic Kubernetes Service (Amazon EKS). EKS Blueprints — это набор модулей Infrastructure as Code (IaC), которые помогут вам настроить и развернуть согласованные EKS кластеры в разных аккаунтах и регионах. Вы можете использовать EKS Blueprints для быстрого запуска EKS кластера с Amazon EKS дополнениями, а также широкого спектра популярных дополнений с открытым исходным кодом, включая Prometheus, Karpenter, Nginx, Traefik, AWS Load Balancer Controller, Fluent Bit, Keda, Argo CD и другие. EKS Blueprints также поможет вам внедрить соответствующие средства контроля безопасности, необходимые для управления рабочими нагрузками множеством команд в одном кластере.
EKS Blueprints реализован в двух популярных IaC-фреймворках, HashiCorp Terraform и AWS Cloud Development Kit (AWS CDK), которые помогают автоматизировать развертывание инфраструктуры. Для быстрого старта мы советуем ознакомиться с руководствами по началу работы с EKS Blueprints для Terraform или EKS Blueprints для CDK.
Мотивация
Kubernetes — это мощная и расширяемая технология оркестрации контейнеров, которая позволяет развертывать и управлять контейнерными приложениями в больших масштабах. Расширяемая природа Kubernetes также позволяет использовать в кластерах Kubernetes широкий спектр популярных инструментов с открытым исходным кодом, обычно называемых дополнениями. Обратите внимание, что создание специализированного кластера EKS, отвечающего конкретным потребностям вашего приложения, может занять значительное время при таком большом количестве доступных инструментов и вариантов дизайна. Это время также включает интеграцию широкого спектра инструментов с открытым исходным кодом и сервисов AWS, что требует глубоких знаний как в области AWS, так и Kubernetes.
Если в одном кластере взаимодействуют рабочие нагрузки от нескольких команд, могут возникнуть дополнительные сложности, например, управление сетевыми политиками, доступам к EKS кластерам или AWS ресурсам, которые работают вне EKS кластера. Обеспечение согласованности и стандартизации всего парка EKS кластеров по мере роста внедрения может создать дополнительные проблемы.
Клиенты AWS просят предоставить примеры, демонстрирующие, как интегрировать ландшафт инструментов Kubernetes и упростить процесс создания полноценных кластеров EKS, отвечающих требованиям конкретных приложений. Им нужны решения, использующие знакомые инструменты, такие как Terraform, CDK и Helm, которые помогают управлять жизненным циклом EKS кластеров, операционным программным обеспечением, работающим в каждом кластере, и конфигурацией для команд, которым необходимо запускать рабочие нагрузки в каждом кластере. EKS Blueprints был создан для удовлетворения этой потребности клиентов.
Что такое EKS Blueprints?
EKS Blueprints помогает вам настраивать EKS кластера c полностью сконфигурированным операционным программным обеспечением, необходимым для развертывания и эксплуатации рабочих нагрузок. Вы можете описать конфигурацию желаемого состояния EKS кластера, например, панель управления (control plane), рабочие узлы и дополнительные модули Kubernetes в виде IaC проекта.
Как только проект настроен, его можно использовать для развертывания согласованных сред в нескольких учетных записях и регионах AWS с помощью непрерывной автоматизации развертывания (continuous deployment). EKS Blueprints базируется на существующих наработках сообщества разработчиков EKS с открытым исходным кодом, включая использование terraform-aws-eks модуля для инициализации кластеров.
На следующей архитектурной схеме представлена среда EKS, которую можно настроить и развернуть с помощью EKS Blueprints. На схеме показан EKS кластер, который работает в трех зонах доступности, cконфигурирован с большим количеством дополнительных модулей Kubernetes и размещает рабочие нагрузки от нескольких команд:
С помощью EKS Blueprints вы можете подготовить как EKS, так и самоуправляемые дополнения в EKS кластере. Поскольку EKS сервис продолжает расширять свою библиотеку дополнений EKS, EKS Blueprints будет развиваться, добавляя эти возможности. EKS Blueprints также настраивает соответствующие IAM политики, роли и сервисные аккаунты для каждого дополнения (как указано в документации EKS IAM роли для сервисных аккаунтов (IRSA)).
Если вы хотите разрешить нескольким командам запускать рабочие нагрузки в одном кластере, вы можете использовать EKS Blueprints для настройки и управления пользователями и командами, имеющими доступ к кластеру (команда администраторов) или пространствам имен в кластере (команда приложений).
Если вы хотите применять GitOps подход для управления конфигурацией кластера и рабочими нагрузками, вы можете использовать EKS Blueprints для настройки кластера с Argo CD и любым количеством ресурсов для Argo CD приложений. Поддержка Flux также включена в нашу дорожную карту.
Примеры EKS Blueprints
Мы также разработали библиотеку примеров реализации, демонстрирующих, как использовать EKS Blueprints для решения конкретных технических задач в EKS. В настоящее время наша библиотека включает примеры, демонстрирующие, как запустить EMR в EKS, как настроить EKS кластер с Karpenter для управления рабочими нодами, как реализовать наблюдаемость EKS кластеров и рабочих нагрузок в них, как сконфигурировать EKS кластер с Crossplane, как использовать EKS Blueprints с AWS Proton и многое другое.
Со временем наша библиотека примеров будет продолжать расти и развиваться. Если у вас есть дополнительные примеры, которые вы хотите увидеть в библиотеке, дайте нам знать об этом, создав задачу в GitHub. Кроме того, если вы хотите создать свой собственный blueprint и поделиться им с сообществом, мы будем рады вашему pull request!
Использование EKS Blueprints
Давайте посмотрим на EKS Blueprints в действии. В следующем Terraform примере представлена простая схема развертывания нового кластера EKS с группой управляемых узлов. Он также конфигурирует кластер с дополнениями vpc-cni, coredns, kube-proxy, aws-load-balancer-controller, metrics server и cluster-autoscaler. Указать, что дополнение должно быть установлено в кластере EKS, очень просто — достаточно определить флаг со значение true:
Эта же конфигурация на CDK, будет выглядеть следующим образом:
Настройка дополнительных модулей (add-on) Kubernetes
Каждое дополнение указывает на Helm репозиторий с открытым исходным кодом. EKS Blueprints включает конфигурацию IAM ролей для сервисных аккаунтов (IRSA) по умолчанию для каждого дополнения, которое выполняет запросы к AWS API. Если вам нужна расширенная конфигурация (например, частный Helm репозиторий), вы можете легко переопределить значения по умолчанию.
Например, образы Docker, используемые в Helm чарте, можно заменить в values.yaml на частные Docker репозитории, такие как ECR или Artifactory. В следующем коде показано, как поддерживать расширенную настройку для AWS Load Balancer Controller дополнения:
Эта же конфигурация на CDK:
Рабочие ноды (Worker nodes)
EKS Blueprints поддерживает инициализацию EKS кластеров с различными вычислительными конфигурациями, включая управляемые группы нод, самоуправляемые группы нод и AWS Fargate профили:
Вы также можете указать такую-же конфигурацию с помощью CDK:
Кластеры для нескольких команд
Если вы хотите разрешить нескольким командам запускать рабочие нагрузки в одном кластере, EKS Blueprints предоставляет подход для обеспечения мягкой многопользовательской аренды (soft multi-tenancy). Как определено в руководстве EKS Best Practice Guides, soft multi-tenancy использует встроенные конструкции Kubernetes (например, пространства имен, роли, привязки ролей (role bindings) и сетевые политики) для создания логического разделения между владельцами. Если у вас есть жесткие требования к многопользовательской среде (hard multi-tenancy), например, поставщики программного обеспечения как услуги (SaaS), которым необходимо запускать полностью изолированные рабочие нагрузки для разных клиентов, мы рекомендуем создавать выделенные кластеры для каждого клиента.
Для soft multi-tenancy (мягкой мультиарендности) EKS Blueprints позволяет легко настроить команды и удостоверения, имеющие доступ к кластеру, а также ресурсы, к которым имеют доступ команды и удостоверения. В настоящее время поддерживаются два типа команд: платформы и приложения. Команды платформы представляют администраторов платформы, имеющих доступ администратора к кластеру EKS. Команды приложений представляют команды, управляющие рабочими нагрузками, запущенными в пространствах имен кластера. Команды приложений получают доступ к одному или нескольким выделенным пространствам имен в кластере:
И CDK реализация:
GitOps
Если вы хотите использовать GitOps подход к развертыванию дополнений и рабочих нагрузок в EKS кластере, EKS Blueprints предоставляет встроенную поддержку развертывания Argo CD. Вы можете легко развернуть EKS кластер с установленным Argo CD, с предустановленным одним или множеством Argo CD приложений.
EKS Blueprints предоставляет два примера репозиториев Argo CD: репозиторий рабочих нагрузок, который демонстрирует, как управлять конфигурацией рабочих нагрузок, и репозиторий дополнений, который демонстрирует, как управлять конфигурацией дополнений. Оба репозитория следуют шаблону Argo CD App of Apps Pattern. Следующий пример кода демонстрирует развертывание EKS кластера с установленным Argo CD, и двумя Argo CD приложениями, использующие репозитории с примерами:
И с помощью CDK
Сотрудничество с партнерами AWS
В процессе создания EKS Blueprints мы тесно сотрудничали с несколькими AWS партнерами по проектированию дополнений для их продуктов и услуг. Создав дополнение для EKS Blueprints, наши партнеры могут снизить затраты, связанные с загрузкой своего программного обеспечения в EKS кластер с надлежащей конфигурацией. Datadog, Dynatrace, HashiCorp, Kubecost, NewRelic, Ondat, Rafay, Snyk, Tetrate, Kasten By Veeam создали дополнения, которые позволяют клиентам использовать их продукты с EKS Blueprints. Для других партнеров AWS, заинтересованных в создании дополнений, пожалуйста, ознакомьтесь с руководствами по расширению возможностей в соответствующих репозиториях Terraform и CDK.
Концептуально возможности EKS Blueprints не ограничены конкретными инструментами, такими как CDK или Terraform. Партнеры AWS могут свободно использовать наши инструменты, участвовать в коллективной разработке посредством совместной работы с открытым исходным кодом или разрабатывать свои собственные инструменты. Например, Pulumi, AWS партнер и владелец популярного инструмента «инфраструктура как код» (IaC), присоединилась к нашим стараниям, объявив о выпуске собственной версии EKS Blueprints от Pulumi, доступной в предварительной версии уже сегодня.
Куда мы движемся
EKS Blueprints был разработан с открытым исходным кодом в течение последнего года увлеченной группой архитекторов решений и специалистов AWS. Нам посчастливилось работать с сообществом разработчиков открытого кода, нашими клиентами и партнерами, чтобы получить обратную связь и помочь сформировать направление развития проекта. Наша публичная дорожная карта доступна сегодня в репозиториях Terraform и CDK, и мы хотим услышать ваше мнение. Какие дополнительные модули были бы полезны? Какие новые blueprints мы можем создать?
Наконец, сообщество EKS Blueprints открыто для всех. У нас есть небольшое, но растущее сообщество разработчиков открытого исходного кода, которое вносит свой вклад в проект, и мы хотим расширить нашу базу участников. Если вы заинтересованы в участии в проекте, мы приветствуем любой вклад в проекты Terraform или CDK, включая сообщения об ошибках, новые возможности, исправления или дополнительную документацию.
Следующие шаги
Чтобы начать работу с EKS Blueprints, посетите репозитории EKS Blueprints для Terraform или EKS Blueprints для CDK. Там вы найдете ссылки на полную документацию по проекту и инструкции по началу работы.
Доступность, цены и поддержка
EKS Blueprints для Terraform и CDK уже доступны на GitHub. Их можно использовать для создания EKS сред в любом AWS регионе, где EKS доступен в настоящее время. Поддержка EKS Anywhere включена в нашу дорожную карту.
EKS Blueprints бесплатен в использовании — вы платите только за ресурсы, которые вы развертываете. Например, при развертывании EKS кластера с управляемой группой нод, взимается стандартная плата за EKS и EC2.
EKS Blueprints — это проект с открытым исходным кодом, управляемый сообществом, а не часть услуги AWS, поэтому он не включен в корпоративную поддержку (enterprise support) AWS. Все службы AWS, предоставляемые EKS Blueprints, такие как EKS, полностью поддерживаются. Если вам нужна помощь в использовании EKS Blueprints, пожалуйста, создайте задачу в нашем репозитории GitHub. AWS Professional Services и партнеры AWS также готовы помочь.