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.

Онлайн курс з промт інжинірингу та ефективної роботи з ШІ від Powercode academy.
Курс-інтенсив для отримання навичок роботи з ChatGPT та іншими інструментами ШІ для професійних та особистих задач, котрі допоможуть як новачку, так і професіоналу.
Записатися на курс

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 переменных в одном файле);
  • Курс QA Manual (Тестування ПЗ мануальне) від Powercode academy.
    Навчіться знаходити помилки та контролювати якість сайтів та додатків.
    Записатися на курс
  • разверните свой кластер с помощью двух команд 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:

Курс English For Tech course від Enlgish4IT.
Лише 7 тижнів по 20-30 хвилин щоденного навчання допоможуть вам подолати комунікативні бар'єри. Отримайте знижку 10% за промокодом ITCENG.
Дійзнайтеся більше
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.

Курс English For Tech: Speaking&Listening від Enlgish4IT.
Після курсу ви зможете найкраще презентувати свої досягнення, обговорювати проекти та вирішувати повсякденні завдання англійською мовою. Отримайте знижку 10% за промокодом TCENG.
Дізнатись про курс

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

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

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

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

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

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

  • Kubeflow
  • Курс "Web design" від Web-academy.
    Швидкий початок кар'єри у сфері IT! Опануйте професію веб-дизайнера — почніть самостійно керувати своїм часом й отримувати високий дохід вже за 9 тижнів.
    Дізнатися більше
  • 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, укажите их в форме, чтобы начать запуск:

Курс Frontend від Mate academy.
Frontend розробник може легко створити сторінки вебсайту чи вебдодаток. Тому після курсу ви станете затребуваним фахівцем у сфері, що розвивається.
Інформація про курс

Все готово к запуску. Источник: 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.

Курс Project Manager від Powercode academy.
Онлайн-курс Project Manager. З нуля за 3,5 місяці до нової позиції Без знання коду, англійської та стресу.
Зарееструватися

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

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

PHP Developer в ScrumLaunch
Всего просмотровВсего просмотров
1898
#1
Всего просмотровВсего просмотров
1898
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсего просмотров
111
#2
Всего просмотровВсего просмотров
111
Career Consultant в GoIT
Всего просмотровВсего просмотров
93
#3
Всего просмотровВсего просмотров
93
CEO & Founder в Trustee
Всего просмотровВсего просмотров
92
#4
Всего просмотровВсего просмотров
92
Рейтинг блогеров

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

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

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