Charmed Kubeflow - это проект с открытым исходным кодом, который предоставляет предварительно настроенную среду для развертывания Kubeflow на Kubernetes. Charmed Kubeflow упрощает настройку и управление кластерами Kubeflow, обеспечивая высокую доступность и отказоустойчивость. Он также включает в себя дополнительные инструменты и сервисы, такие как хранилище данных, мониторинг и визуализацию, что делает его полноценной платформой для машинного обучения.

Charmed Kubeflow - это волшебная палочка для мира машинного обучения, которая превращает рутинные задачи в магические приключения. Это доверенный помощник, который берет на себя все заботы о настройке и управлении сложными кластерами, позволяя исследователям и разработчикам сосредоточиться на создании и обучении моделей машинного обучения. С Charmed Kubeflow рабочие процессы становятся более эффективными, модели - более точными, а их развертывание в производстве - более надежным и безопасным.

Как начать работу с Charmed Kubeflow?

Допустим, ваша компания нуждается в мощной платформе MLOps, которая позволила бы исследователям данных, специалистам по машинному обучению и инженерам MLOps работать вместе над созданием передовых решений в области машинного обучения. Одним из возможных вариантов такой платформы является Kubeflow. Однако стоит учесть, что внедрение и поддержка Kubeflow на уровне производства – это сложная задача, требующая большого количества индивидуальных настроек. Кроме того, внедрение этой платформы в уникальную среду вашей компании может привести к возникновению проблем, с которыми ранее никто не сталкивался, и решить которые придётся самостоятельно.

Charmed Kubeflow - это как супергерой, который делает работу по развертыванию Kubeflow невероятно легкой. Вы просто даете ему команду, и он делает всю тяжелую работу за вас. Он уже имеет хорошие базовые настройки, но если вам нужно что-то изменить, вы можете легко это сделать. И самое главное, он обладает всеми суперспособностями Juju, что делает его еще более мощным и универсальным.

Давайте приступим! Чуть ниже я покажу как развернуть Charmed Kubeflow для ваших нужд. Не беспокойтесь, благодаря Juju, мы сделаем этот процесс максимально безболезненным.

Требования:

В этой статье предполагается, что вы развернете Kubeflow на виртуальной машине публичного облака со следующими характеристиками(не хотите тратить на облако? пишите в телеграмм zubikas.t.me бесплатно предоставим необходимые ресурсы первым 10 пользователям):

  • Работает под управлением Ubuntu 22.04 (jammy).

  • Имеет как минимум 4 ядра, 32 ГБ оперативной памяти и 50 ГБ дискового пространства.

  • Подключен к интернету для загрузки необходимых привязок и чармов.

  • Установлен python3.

Как настроить доступ к виртуальной машине по SSH с переадресацией портов?

Ниже показано, как подключить ноутбук к виртуальной машине с помощью SSH и проброса портов.

Чтобы настроить туннель SSH с прокси-сервером SOCKS, выполните следующие действия:

  1. Для Charmed Kubeflow выполните эту команду:

ssh -L 31380:localhost:31380 -D 9999 ubuntu@kubeflow-3.mk8s.by
img1png

Примечание: для MLflow вы увидите дополнительную опцию -L 31380:localhost:31380. Это перенаправляет порт localhost 31380 на удаленную машину, поскольку он нужен нам для доступа к панели MLflow.

  1. Настройте сетевые параметры браузера для использования прокси-сервера SOCKS

  • Откройте Настройки > Настройки сети > Настроить....

  • Установите для сетевого прокси значение Ручная настройка прокси.

  • Установите для хоста SOCKS значение: 127.0.0.1 и порт 9999.

imgpng

Примечание: После этого весь сетевой трафик будет проходить через SSH-туннель к виртуальной машине. Если SSH-туннель будет закрыт, то вы потеряете интернет.

Чтобы отключить, сначала измените настройки сети, отключив сетевой прокси, а затем закройте SSH-туннель.

В остальной части этой статьи, если не указано иное, предполагается, что вы будете выполнять все операции командной строки на ВМ через открытый SSH-туннель. Также предполагается, что для доступа к панели Kubeflow вы будете использовать веб-браузер на своей локальной машине.

Установка и подготовка MicroK8s.

Давайте начнем наше развертывание. Каждому экземпляру Kubeflow нужен кластер K8s для работы. Для простоты мы запустим наш экземпляр Kubeflow на MicroK8s, который является самым простым и быстрым способом создания кластера K8s.

Установите пакет microk8s из канала 1.29/stable.

sudo snap install microk8s --classic --channel=1.29

Отлично! Теперь microk8s установлен и автоматически начнет работать в фоновом режиме. Теперь пришло время настроить его, чтобы он был готов к работе с Kubeflow.

Далее, небольшой лайвхак. Чтобы не использовать sudo для каждой команды MicroK8s, выполните следующие команды:

sudo usermod -a -G microk8s 
newgrp microk8s

Примечание: Вам нужно будет повторно запускать newgrp microk8s каждый раз, когда вы открываете новый сеанс оболочки.

Теперь, хотя мы будем использовать juju в качестве основного инструмента настройки для работы с развертыванием Kubeflow, иногда нам нужно будет взаимодействовать с MicroK8s напрямую через команду kubectl. Чтобы это работало, нам нужно предоставить право собственности на все конфигурационные файлы kubectl пользователю, выполняющему kubectl. Для этого выполните эту команду:

sudo chown -f -R $USER ~/.kube

Отлично! Это все, что касается установки прав доступа. Следующая остановка: дополнения!

MicroK8s - это полностью функциональный Kubernetes, работающий с минимальным количеством накладных расходов. Однако для наших целей нам понадобится Kubernetes с несколькими дополнительными функциями. Множество дополнительных сервисов доступны в виде аддонов MicroK8s - кода, который поставляется вместе со снапом и может быть включен или выключен, когда это необходимо. Давайте включим некоторые из этих функций, чтобы получить Kubernetes, на котором мы сможем установить Kubeflow. Мы добавим службу DNS, чтобы приложения могли находить друг друга; хранилище; ингресс-контроллер, чтобы мы могли получить доступ к компонентам Kubeflow; и приложение-балансировщик нагрузки MetalLB.

Включите следующие дополнения Microk8s, чтобы настроить кластер Kubernetes с дополнительными сервисами, необходимыми для запуска Charmed Kubeflow: dnshostpath-storageingress и metallb для диапазона IP-адресов 10.64.140.43-10.64.140.49.

Включить аддоны MicroK8s

microk8s enable dns hostpath-storage ingress metallb:10.64.140.43-10.64.140.49 rbac
img2png
img3png

 Отличная работа! Теперь вы установили и настроили MicroK8s.

Теперь может пройти 5 минут или около того, прежде чем все аддоны, которые мы настроили, будут готовы к работе.

Выполните следующую команду:

microk8s status --wait-ready

В выводе MicroK8s должен отображаться как запущенный, а все аддоны, которые мы включили ранее, должны быть перечислены как enabled:dnsstorageingress и metallb. Если это не так, подождите еще немного и выполните команду снова. 

img4png

 Отлично, теперь вы установили и настроили MicroK8s, и он запущен и готов! Теперь у нас есть кластер K8s, на котором мы можем развернуть наш экземпляр Kubeflow.

Установка Juju

Juju - это менеджер жизненного цикла операций (OLM) для облаков, голого железа или Kubernetes. Мы будем использовать его для развертывания и управления компонентами, составляющими Kubeflow.

Чтобы установить Juju из snap, выполните следующую команду:

sudo snap install juju --channel=3.4
img5png

 На некоторых машинах может отсутствовать папка, необходимая для корректной работы juju. В связи с этим, пожалуйста, убедитесь, что вы создали эту папку:

mkdir -p ~/.local/share

В качестве следующего шага мы можем настроить microk8s для корректной работы с juju, выполнив следующие действия:

microk8s config | juju add-k8s my-k8s --client

Команда microk8s config извлекает конфигурацию kubernetes клиента, которая затем регистрируется в конечных точках juju kubernetes. 

img6png

 Теперь выполните следующую команду, чтобы развернуть контроллер Juju на Kubernetes, который мы настроили с помощью MicroK8s:

juju bootstrap my-k8s uk8sx

Подождите, пока команда выполнится! Развертывание контроллера может занять минуту или две.

Контроллер - это агент Juju, работающий на Kubernetes, который можно использовать для развертывания и управления компонентами Kubeflow. 

img7png

 Далее нам нужно добавить модель для Kubeflow в контроллер. Выполните следующую команду, чтобы добавить модель под названием kubeflow:

juju add-model kubeflow

Контроллер может работать с различными моделями, которые соотносятся 1:1 с пространствами имен в Kubernetes. В данном случае имя модели должно быть kubeflow, из-за предположения, сделанного в коде Kubeflow Dashboard.

Отличная работа: Juju теперь установлен и настроен для Kubeflow! 

img8png

Развертывание Charmed Kubeflow

Перед развертыванием выполните эти команды:

sudo sysctl fs.inotify.max_user_instances=2560
sudo sysctl fs.inotify.max_user_watches=1048576

Нам нужно выполнить вышеуказанные команды, потому что под капотом microk8s использует inotify для взаимодействия с файловой системой, а в kubeflow иногда превышаются стандартные лимиты inotify. Обновите /etc/sysctl.conf следующими строками, если вы хотите, чтобы эти команды сохранялись при перезагрузке машины:

fs.inotify.max_user_instances=2560
fs.inotify.max_user_watches=655360
img9png

 Наконец, мы готовы развернуть Charmed Kubeflow! Выполните этот код, чтобы развернуть пакет Charmed Kubeflow с помощью Juju:

juju deploy kubeflow --trust --channel=1.8

Будьте терпеливы. Процесс развертывания может занять 5-10 минут.

А пока что, что здесь происходит? Взгляните на свой вывод.

Здесь вы можете увидеть возможности использования Juju для развертывания kubeflow. Из вывода видно, что пакет находит, развертывает и настраивает все необходимые чары за нас. Без juju нам пришлось бы разворачивать и настраивать все эти чары самостоятельно. 

img10png

 Когда команда развертывания завершится, вы получите сообщение следующего содержания:

Deploy of bundle completed.
img11png

 Это означает, что все компоненты пакета были запущены в работу. Однако это еще не означает, что Kubeflow готов. После развертывания различным компонентам пакета требуется некоторое время для инициализации и установления связи друг с другом. Наберитесь терпения - обычно это занимает от 15 минут до 1 часа.

Как же узнать, когда весь пакет будет готов? Это можно сделать с помощью команды juju status. Для начала давайте выполним основную команду status и посмотрим, что получится. Выполните следующую команду, чтобы вывести статус всех компонентов Juju:

juju status
img12png

Просмотрите полученные результаты. Вы должны увидеть краткую информацию, список приложений и связанную с ними информацию, а также список подразделений и связанную с ними информацию. Пока что не стоит слишком беспокоиться о том, что все это значит. Главное, что нас интересует на этом этапе, - это статусы всех приложений и модулей в нашем пакете. Мы хотим, чтобы все статусы в конечном итоге стали active, указывая на то, что пакет готов. Выполните следующую команду, чтобы следить за компонентами, которые еще не активны:

juju status --watch 5s

При этом периодически будет выполняться команда juju status. Когда все компоненты на экране будут в состоянии active, мы будем знать, что наш бандл готов.

Не удивляйтесь, если время от времени статусы некоторых компонентов будут меняться на blocked или error. Это ожидаемое поведение, и эти статусы должны разрешиться сами собой по мере настройки пакета. Однако если компоненты по-прежнему находятся в одном и том же состоянии ошибки, обратитесь к шагам по устранению неполадок, приведенным ниже. 

img13png

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

Настройте доступ к приборной панели.

Запустить Kubeflow - это хорошо, но как мы будем взаимодействовать с ним как пользователь? Вот тут-то и приходит на помощь приборная панель. Мы перейдем к этому позже, а сейчас давайте настроим некоторые компоненты, чтобы получить доступ к приборной панели.

Во-первых, выполните эту команду, чтобы проверить IP-адрес балансировщика нагрузки Istio ingress gateway, который является точкой входа для всей нашей связки:

microk8s kubectl -n kubeflow get svc istio-ingressgateway-workload -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
img14png

Вы должны увидеть на выходе 10.64.140.43 - это IP-адрес данного компонента в конфигурации microk8s по умолчанию. Если вы видите что-то другое, не волнуйтесь - просто замените 10.64.140.43 на любой IP-адрес, который вы видите в оставшейся части инструкций этого руководства.

Чтобы получить доступ к kubeflow через его службу dashboard, нам нужно немного настроить пакет, чтобы он поддерживал аутентификацию и авторизацию. Для этого выполните следующие команды:

juju config dex-auth public-url=http://10.64.140.43.nip.io
juju config oidc-gatekeeper public-url=http://10.64.140.43.nip.io
img15png

 Это сообщает компонентам аутентификации и авторизации пакета, что пользователи, обращающиеся к пакету, будут делать это через URL http://10.64.140.43.nip.io. В свою очередь, это позволяет этим компонентам создавать соответствующие ответы на входящий трафик.

Чтобы включить простую аутентификацию и задать имя пользователя и пароль для вашего развертывания Kubeflow, выполните следующие команды:

juju config dex-auth static-username=admin
juju config dex-auth static-password=admin
img16png

 Не стесняйтесь использовать другой (более надежный!) пароль, если хотите.

Отлично! Теперь наш бандл настроен на доступ к приборной панели через браузер.

Проверка развертывания Charmed Kubeflow

Отлично! Мы развернули и настроили Kubeflow. Но как узнать, что мы все сделали правильно? Можно попробовать войти в систему. Поехали!

Откройте браузер и перейдите по следующему URL-адресу:

http://10.64.140.43.nip.io

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

img17png

 Теперь вы должны увидеть страницу "Добро пожаловать" Kubeflow: 

img18png

 Нажмите кнопку Start setup. На следующем экране вам будет предложено создать пространство имен. Это просто способ сохранить все файлы и настройки одного проекта в одном, легкодоступном месте. Выберите любое имя, которое вам нравится: 

img19png

 После того как вы нажмете на кнопку Finish, на экране появится панель управления! 

img20png

 Поздравляю, мы развернули Kubeflow!

Более подробную информацию о работе с kubeflow можно найти в следующих статьях.

По всем вопросам можно писать в телеграмм https://t.me/microk8s_kubeflow

Комментарии (2)


  1. inkvizitor68sl
    11.04.2024 14:10

    Charmed Kubeflow - это готовая к производству сквозная платформа

    Ох уж эти автопереводы.


    1. ZubikIT Автор
      11.04.2024 14:10

      Согласен. с GPT стало получше?