ru:https://highload.today/blogs/sakk-opensors-instrument-dlya-razvertyvaniya-klasterov-eks-s-kubeflow/ ua:https://highload.today/uk/blogs/sakk-opensors-instrument-dlya-razvertyvaniya-klasterov-eks-s-kubeflow/
logo
DevOps      20/04/2021

SAKK: опенсорс-инструмент для развертывания кластеров EKS с Kubeflow

Елена Гойдина BLOG

Product Manager в Provectus

Как организовать рабочий процесс ML-команд? Как сделать так, чтобы DevOps-инженеры, которые работают над внедрением моделей машинного обучения и искусственного интеллекта, имели возможность полностью погрузиться в процесс, не беспокоясь о развертывании самой инфраструктуры? Это рассказ о внутреннем инструменте команды Provectus — SAKK — и о том, как легко и быстро начать работу с Kubeflow.

Схема управляемого кластера GitOps с Kubeflow и Argo CD внутри EKS, развернутого с использованием Terraform и SAKK. Источник: Provectus

Популярность ML-технологий (Machine Learning) устойчиво растет, а по мере увеличения числа ML-проектов растет и спрос на внедрение облачных решений.

Kubeflow — один из самых популярных инструментов для упрощения развертывания ML-проектов. Этот инструмент с открытым исходным кодом появился еще в декабре 2017-го, а с тех пор значительно вырос и окреп. Amazon для гибкого запуска и масштабирования приложений Kubernetes в облаке AWS предлагает Amazon EKS (Elastic Kubernetes Service). Amazon EKS стал общедоступным в 2018 году, сейчас это одна из ведущих сред для Kubernetes, который в свою очередь часто используется для запуска Kubeflow.

Но несмотря на широкие возможности, многие все еще не видят очевидного пути к быстрой установке и запуску Kubeflow-кластера c EKS. В Provectus эту проблему решили.

Зачем развертывать Kubeflow с Amazon EKS?

Многим компаниям, которые работают над ML/AI-проектами (клиентскими или собственными), часто приходится развертывать несколько копий Kubeflow-кластеров, а затем управлять ими и дополнять их новыми ресурсами по мере роста рабочей нагрузки на обучение и вывод. Когда над проектом работают несколько команд, им также может потребоваться изолированный доступ к конвейерам данных Kubeflow из соображений безопасности.

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

Например, если ваша компания работает над несколькими ML/AI-проектами, ей необходимо как минимум несколько кластеров с копиями Kubeflow (dev, test, рабочие среды, client stands и т. д.) для каждого проекта, а часто и для каждой проектной команды. Все эти развертывания требуют установки нескольких инструментов CLI и их отдельной настройки для Kubernetes и Kubeflow. Для каждого из кластеров необходима отдельная настройка.

Все это означает одно: надо нанимать высококвалифицированных специалистов для развертывания и обслуживания инфраструктуры машинного обучения. Они настроят несколько конфигураций кластера вручную или напишут гору скриптов. Дальнейшая поддержка и апгрейд кластера также будет требовать вмешательства профессионалов.

Что такое Swiss Army Kube для Kubeflow (SAKK)

SAKK для Kubeflow предлагает простое решение, основанное на лучших практиках DevOps. Оно избавит вас от необходимости отдельных развертываний Kubeflow, Amazon EKS и других ресурсов, которые могут потребоваться для процесса машинного обучения.

Папка с SAKK-репозиторием играет роль готового шаблона проекта. Все, что необходимо сделать — это проверить ветку и настраивать ее каждый раз, когда необходимо развернуть Kubeflow с Amazon EKS.

Курс Front-end Basic.
Після успішного закінчення курсу студенти отримують достатньо знань і навичок для верстки сайту будь-якої складності.
Реєстрація на курс

ML-команды могут настраивать кластер со всем необходимым сразу, задав переменные в одном файле main.tf в корне репозитория, и разворачивать его с помощью пары Terraform-команд. Это позволит за считанные минуты запускать несколько кластеров машинного обучения, используя Terraform в качестве единой точки входа.

Кластер Amazon EKS с Kubeflow и Argo CD, который вы получаете в результате настройки и развертывания ML инфраструктуры с Terraform с использованием SAKK. Источник: Provectus

После развертывания кластерами можно управлять с помощью Argo CD CLI или пользовательского интерфейса. Они хранятся в репозитории GitHub с организованным CI/CD-конвейером. Такой подход позволяет пользоваться всеми преимуществами портативности и стандартизации Kubernetes и Amazon EKS.

В дополнение к этому также можно добавлять ресурсы в свои кластеры, которые не являются родными инструментами Kubeflow, Kubernetes или Amazon EKS CLI. Для этого нет никакой необходимости писать кастомный код.

Использование SAKK для настройки и развертывания кластера не требует знаний об инструментах DevOps. Это означает, что DevOps-инженеры смогут уделять больше времени решению более важных задач. SAKK дает возможность сократить время, ресурсы и затраты, связанные с развертыванием и обслуживанием ML-инфраструктуры.

Основные моменты такие:

Автоматизация кластера с Argo CD

SAKK использует Argo CD для автоматизации состояний приложений с GitOps-оператором. Состояние вашего кластера будет храниться в репозитории GitHub и сегменте S3, описанном как код.

Преимущества Terraform

Terraform используется для унификации и стандартизации развертывания облачной инфраструктуры с IaC — одним из лучших стандартов для ML DevOps (MLOps). Terraform позволяет создавать файлы конфигурации с применением синтаксиса HCL (HashiCorp Configuration Language). Это лучшая альтернатива случайным скриптам для работы с кластерами. Более того, у Terraform есть большое сообщество и подробная документация.

Встроенный контроль доступа с Amazon Cognito

Для управления доступом в AWS SAKK использует Cognito User Pools (пулы пользователей). В кратком руководстве ниже Cognito используется для создания безопасной среды, в которой правами доступа можно управлять из одного места. Но SAKK не ограничивает вас одним провайдером, можно использовать любой другой.

Краткое руководство: развертывание кластера EKS с помощью Kubeflow

Иллюстрация: Provectus

Развернуть Kubeflow на EKS с помощью SAKK довольно просто. Помимо предварительных условий, потребуется еще несколько действий:

  • настройте развертывание кластера (~5 переменных в одном файле);
  • разверните свой кластер с помощью двух команд Terraform (init и apply).

После этого вы получите доступ к кластеру с возможностью управления.

Что необходимо заранее:

  1. Потребуется аккаунт AWS с пользователем IAM и установленный AWS CLI. Если у вас его нет, ознакомьтесь с официальными руководствами от AWS:

Далее установите Terraform, используйте официальный гайд:

Создайте ответвление и клонируйте SAKK для репозитория Kubeflow:

Вот и все! Осталось развернуть и настроить кластер Amazon EKS Kubeflow:

Курс Мікросервісна архітектура.
Здійснюйте міграцію моноліту в мікросервіси та проєктуйте легкомасштабовані бізнес-рішення.
Дійзнайтеся більше

1. Развертывание и настройка кластера

Настройка кластера осуществляется в одном файле Terraform: main.tf. Минимальные настройки конфигурации следующие:

  • cluster_name (имя вашего кластера);
  • mainzoneid (ID основной зоны Route53);
  • domains (имена конечных точек адресов);
  • admin_arns (ARN пользователей, у которых будут права администратора);
  • cert_manager_email (имейлы для LetsEncrypt уведомлений);
  • cognito_users (список пользователей Cognito Pool).

Пример конфигурации main.tf:

terraform {
  backend s3 {}
}
module "sak_kubeflow" {
  source = "git::https://github.com/provectus/sak-kubeflow.git?ref=init"
  cluster_name = "simple"
  owner      = "github-repo-owner"
  repository = "github-repo-name"
  branch     = "branch-name"
  #Main route53 zone id if exist (Change It)
  mainzoneid = "id-of-route53-zone"
  # Name of domains aimed for endpoints
  domains = ["sandbox.some.domain.local"]
  # ARNs of users who will have admin permissions.
  admin_arns = [
    {
      userarn  = "arn:aws:iam::<aws-account-id>:user/<username>"
      username = "<username>"
      groups   = ["system:masters"]
    }
  ]
  # Email that would be used for LetsEncrypt notifications
  cert_manager_email = "[email protected]"
  # An optional list of users for Cognito Pool
  cognito_users = [
    {
      email    = "[email protected]"
      username = "qa"
      group    = "masters"
    },
    {
      email    = "[email protected]"
      username = "developer"
    }
  ]
  argo_path_prefix = "examples/simple/"
  argo_apps_dir    = "argocd-applications"
}

В некоторых случаях также потребуется переопределить переменные, связанные с репозиторием GitHub (репозиторий, ветка, владелец), в main.tf.

Далее можно настроить backend.hcl, в котором хранится состояние Terraform.

Пример конфигурации backend.hcl:

bucket         = "bucket-with-terraform-states"
key            = "some-key/kubeflow-sandbox"
region         = "region-where-bucket-placed"
dynamodb_table = "dynamodb-table-for-locks"

2. Развертывание кластера AWS EKS Kubeflow

Кластер, который только что был настроен, развертывается с помощью следующих команд Terraform:

terraform init
terraform apply
aws --region <region> eks update-kubeconfig --name <cluster-name>

Эти команды позволяют:

  • инициализировать Terraform и загрузить все удаленные зависимости;
  • создать чистый кластер EKS со всеми необходимыми ресурсами AWS (IAM, ASG, корзинами S3 и т. д.);
  • обновить локальный файл kubeconfig для получения доступа к недавно созданному кластеру EKS.

Эти команды Terraform сгенерируют несколько файлов в дефолтной папке приложений в репозитории. Прежде чем вы начнете развертывать сервисы в кластере EKS Kubernetes, необходимо добавить их в Git и отправить в репозиторий Github.

Обратите внимание на то, что установленная конфигурация Argo CD отслеживает изменения в текущем репозитории. Когда в его папку apps вносятся изменения, они запускают процесс синхронизации. В этом случае будут созданы все объекты, помещенные в эту папку.

После этого вы сможете управлять своим кластером Kubernetes с помощью Argo CD CLI/UI или kubectl. Чтобы начать использовать kubectl (Kubernetes CLI для управления кластером), установите и настройте его. Для этого обратитесь к официальному гайду:

  • Установка и настройка kubectl

3. Доступ и управление кластером Amazon EKS Kubeflow

Итак, кластер развернут и готов к работе. В процессе развертывания были созданы две конечные точки доступа к службам в соответствии с настройками переменных вашего домена. Они находятся в файле main.tf:

Проверьте e-mail, который вы указали в переменной domains, для получения доступа к учетным данным.

Чтобы узнать больше о Kubeflow и Argo CD, ознакомьтесь с соответствующей официальной документацией:

Использование конвейеров Kubeflow

После успешного входа в кластер Amazon EKS через kubectl, вы попадете в панель управления Kubeflow:

Панель управления Kubeflow. Источник: Provectus

В разделе Pipelines есть несколько примеров конвейеров. Чтобы узнать больше об использовании Kubeflow в AWS, ознакомьтесь с официальной документацией.

Примеры конвейеров. Источник: Provectus

Также можно загружать собственные конвейеры, используя AWS SageMaker и Kubeflow. Например, давайте загрузим демо-модуль с одним из встроенных алгоритмов AWS SageMaker.

Создайте папку для управления отдельными состояниями Terraform (с ресурсами, связанными с выполнением конвейера) и добавьте файл main.tf со следующим кодом:

module kmeans_mnist {
 source = "path/to/kmeans-mnist-pipeline/folder/at/root/of/the/project"


 cluster_name = "<your-cluster-name>"
 username     = "<your-kubeflow-username>"
}

Запустите Terraform:

terraform init
terraform apply

Terraform сгенерирует файл training_pipeline.yaml и создаст учетную запись Kubernetes, которая будет соответствовать вашему имени пользователя Kubeflow и иметь все необходимые AWS разрешения для запуска конвейера.

Загрузите конвейер в Kubeflow через раздел Pipelines:

Загрузка конвейера в Kubeflow. Источник: Provectus

 

Теперь, когда у вас есть первый конвейер и учетная запись в Kubernetes, укажите их в форме, чтобы начать запуск:

Все готово к запуску. Источник: Provectus

Готово! Теперь у вас есть запущенный конвейер в Kubeflow.

Roadmap и дальнейшее развитие SAKK

SAKK продолжит развиваться в соответствии с Roadmap. В ближайших планах разработчиков — сделать больше ресурсов, которые будут настраиваться через Terraform (в main.tf):

  • Дальнейшая интеграция с AWS. Дополнительные функции AWS будут настраиваться через Terraform: RDS (Postgres), ElastiCache (Redis), S3 (Minio) и т. д. Их перенесут из Kubernetes, а управление будет происходить в AWS.
  • Обновление версий продукта. Появится возможность устанавливать версии продукта (Argo CD, Kubeflow, Kubeflow Pipelines) через Terraform.
  • Настройка ролей AWS IAM для Kubeflow. Настройка ролей пользователей и разрешения Kubeflow, позволяющие им работать с AWS, будут перенесены в Terraform. Пользователи смогут создавать Kubeflow профили и ресурсы, которые будут храниться в репозитории GitHub и использоваться как часть процесса GitOps.
  • Управление конвейерами Kubeflow. Можно будет сохранять состояние конвейеров Kubeflow. Пользователи смогут развернуть Kubeflow уже с готовыми конвейерами (загрузить их из репозитория GitHub) или загрузить дефолтные AWS конвейеры.
  • Интеграция с другими облачными платформами. В настоящее время SAKK доступен только для Amazon EKS (Elastic Kubernetes Service), но в долгосрочной перспективе планируется расширение и на другие облачные платформы.

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Курс Мікросервісна архітектура.
Здійснюйте міграцію моноліту в мікросервіси та проєктуйте легкомасштабовані бізнес-рішення.
Дійзнайтеся більше

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Топ-5 самых популярных блогеров февраля

Всего просмотровВсего просмотров
181
#1
Всего просмотровВсего просмотров
181
Senior Project Manager at Nemesis
Всего просмотровВсего просмотров
92
#2
Всего просмотровВсего просмотров
92
Software Architect at Devlify
Всего просмотровВсего просмотров
88
#3
Всего просмотровВсего просмотров
88
Всего просмотровВсего просмотров
68
#4
Всего просмотровВсего просмотров
68
Android Team Lead у Balancуй Team
Всего просмотровВсего просмотров
46
#5
Всего просмотровВсего просмотров
46
Рейтинг блогеров

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: