![](https://habrastorage.org/getpro/habr/upload_files/19f/10f/a47/19f10fa47d8afc23f89bd731602fb56e.png)
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, выполните следующие действия:
Для Charmed Kubeflow выполните эту команду:
ssh -L 31380:localhost:31380 -D 9999 ubuntu@kubeflow-3.mk8s.by
![img1png](https://habrastorage.org/getpro/habr/upload_files/9a2/54c/200/9a254c200daa5d4fec913e1a4c36177e.png)
Примечание: для MLflow вы увидите дополнительную опцию
-L 31380:localhost:31380
. Это перенаправляет порт localhost31380
на удаленную машину, поскольку он нужен нам для доступа к панели MLflow.
Настройте сетевые параметры браузера для использования прокси-сервера SOCKS
Откройте
Настройки > Настройки сети > Настроить...
.Установите для сетевого прокси значение
Ручная настройка прокси
.Установите для хоста
SOCKS
значение:127.0.0.1
и порт9999
.
![imgpng](https://habrastorage.org/getpro/habr/upload_files/ac0/b27/640/ac0b27640bb8b18b2c4b0fbace5d893f.png)
Примечание: После этого весь сетевой трафик будет проходить через 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: dns
, hostpath-storage
, ingress
и 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](https://habrastorage.org/getpro/habr/upload_files/431/4b9/7b0/4314b97b0af50cd049bb6650e22cefde.png)
![img3png](https://habrastorage.org/getpro/habr/upload_files/c12/167/190/c12167190cb3739534b2a5fd135b8531.png)
Отличная работа! Теперь вы установили и настроили MicroK8s.
Теперь может пройти 5 минут или около того, прежде чем все аддоны, которые мы настроили, будут готовы к работе.
Выполните следующую команду:
microk8s status --wait-ready
В выводе MicroK8s должен отображаться как запущенный, а все аддоны, которые мы включили ранее, должны быть перечислены как enabled:
: dns
, storage
, ingress
и metallb
. Если это не так, подождите еще немного и выполните команду снова.
![img4png](https://habrastorage.org/getpro/habr/upload_files/fac/f84/101/facf84101adcada1c838febc68d47aa3.png)
Отлично, теперь вы установили и настроили MicroK8s, и он запущен и готов! Теперь у нас есть кластер K8s, на котором мы можем развернуть наш экземпляр Kubeflow.
Установка Juju
Juju - это менеджер жизненного цикла операций (OLM) для облаков, голого железа или Kubernetes. Мы будем использовать его для развертывания и управления компонентами, составляющими Kubeflow.
Чтобы установить Juju из snap, выполните следующую команду:
sudo snap install juju --channel=3.4
![img5png](https://habrastorage.org/getpro/habr/upload_files/10f/d5c/806/10fd5c806308ba4c6b85c16d94ac7949.png)
На некоторых машинах может отсутствовать папка, необходимая для корректной работы juju. В связи с этим, пожалуйста, убедитесь, что вы создали эту папку:
mkdir -p ~/.local/share
В качестве следующего шага мы можем настроить microk8s для корректной работы с juju, выполнив следующие действия:
microk8s config | juju add-k8s my-k8s --client
Команда microk8s config
извлекает конфигурацию kubernetes клиента, которая затем регистрируется в конечных точках juju kubernetes.
![img6png](https://habrastorage.org/getpro/habr/upload_files/56d/f03/642/56df036420bf777debcfbbd2e0201422.png)
Теперь выполните следующую команду, чтобы развернуть контроллер Juju на Kubernetes, который мы настроили с помощью MicroK8s:
juju bootstrap my-k8s uk8sx
Подождите, пока команда выполнится! Развертывание контроллера может занять минуту или две.
Контроллер - это агент Juju, работающий на Kubernetes, который можно использовать для развертывания и управления компонентами Kubeflow.
![img7png](https://habrastorage.org/getpro/habr/upload_files/fef/459/329/fef459329eeee42d1321380c154225b9.png)
Далее нам нужно добавить модель для Kubeflow в контроллер. Выполните следующую команду, чтобы добавить модель под названием kubeflow
:
juju add-model kubeflow
Контроллер может работать с различными моделями
, которые соотносятся 1:1 с пространствами имен в Kubernetes. В данном случае имя модели должно быть kubeflow
, из-за предположения, сделанного в коде Kubeflow Dashboard.
Отличная работа: Juju теперь установлен и настроен для Kubeflow!
![img8png](https://habrastorage.org/getpro/habr/upload_files/aa0/927/f23/aa0927f230d7442acc68e4e01c131e05.png)
Развертывание 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](https://habrastorage.org/getpro/habr/upload_files/ecf/51b/479/ecf51b479986342f7e8e2e1d77db7558.png)
Наконец, мы готовы развернуть Charmed Kubeflow! Выполните этот код, чтобы развернуть пакет Charmed Kubeflow с помощью Juju:
juju deploy kubeflow --trust --channel=1.8
Будьте терпеливы. Процесс развертывания может занять 5-10 минут.
А пока что, что здесь происходит? Взгляните на свой вывод.
Здесь вы можете увидеть возможности использования Juju
для развертывания kubeflow
. Из вывода видно, что пакет находит, развертывает и настраивает все необходимые чары за нас. Без juju
нам пришлось бы разворачивать и настраивать все эти чары самостоятельно.
![img10png](https://habrastorage.org/getpro/habr/upload_files/94b/14a/fca/94b14afca9c5b75a95cbbf0e3ef00ed7.png)
Когда команда развертывания завершится, вы получите сообщение следующего содержания:
Deploy of bundle completed.
![img11png](https://habrastorage.org/getpro/habr/upload_files/919/cfd/9a6/919cfd9a68244de3f8e0aa585a2df972.png)
Это означает, что все компоненты пакета были запущены в работу. Однако это еще не означает, что Kubeflow
готов. После развертывания различным компонентам пакета требуется некоторое время для инициализации и установления связи друг с другом. Наберитесь терпения - обычно это занимает от 15 минут до 1 часа.
Как же узнать, когда весь пакет будет готов? Это можно сделать с помощью команды juju status
. Для начала давайте выполним основную команду status и посмотрим, что получится. Выполните следующую команду, чтобы вывести статус всех компонентов Juju:
juju status
![img12png](https://habrastorage.org/getpro/habr/upload_files/95f/948/24e/95f94824ee83ef97c34ce5e0b1e1f6a1.png)
Просмотрите полученные результаты. Вы должны увидеть краткую информацию, список приложений и связанную с ними информацию, а также список подразделений и связанную с ними информацию. Пока что не стоит слишком беспокоиться о том, что все это значит. Главное, что нас интересует на этом этапе, - это статусы всех приложений и модулей в нашем пакете. Мы хотим, чтобы все статусы в конечном итоге стали active
, указывая на то, что пакет готов. Выполните следующую команду, чтобы следить за компонентами, которые еще не активны:
juju status --watch 5s
При этом периодически будет выполняться команда juju status
. Когда все компоненты на экране будут в состоянии active
, мы будем знать, что наш бандл готов.
Не удивляйтесь, если время от времени статусы некоторых компонентов будут меняться на blocked
или error
. Это ожидаемое поведение, и эти статусы должны разрешиться сами собой по мере настройки пакета. Однако если компоненты по-прежнему находятся в одном и том же состоянии ошибки, обратитесь к шагам по устранению неполадок, приведенным ниже.
![img13png](https://habrastorage.org/getpro/habr/upload_files/c66/eb6/feb/c66eb6feb44413908c758deac75d00df.png)
Пока вы ждете, пока пакет Kubeflow
подготовится, переходите к следующему разделу этого статьи, в котором будут рассмотрены некоторые задачи по настройке после установки.
Настройте доступ к приборной панели.
Запустить Kubeflow - это хорошо, но как мы будем взаимодействовать с ним как пользователь? Вот тут-то и приходит на помощь приборная панель. Мы перейдем к этому позже, а сейчас давайте настроим некоторые компоненты, чтобы получить доступ к приборной панели.
Во-первых, выполните эту команду, чтобы проверить IP-адрес балансировщика нагрузки Istio ingress gateway
, который является точкой входа для всей нашей связки:
microk8s kubectl -n kubeflow get svc istio-ingressgateway-workload -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
![img14png](https://habrastorage.org/getpro/habr/upload_files/e06/351/f4d/e06351f4dfce59db0d2d204b107cccae.png)
Вы должны увидеть на выходе 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](https://habrastorage.org/getpro/habr/upload_files/805/c3f/6ab/805c3f6ab887bf27a7d6d9b28a2b89c9.png)
Это сообщает компонентам аутентификации и авторизации пакета, что пользователи, обращающиеся к пакету, будут делать это через URL http://10.64.140.43.nip.io
. В свою очередь, это позволяет этим компонентам создавать соответствующие ответы на входящий трафик.
Чтобы включить простую аутентификацию и задать имя пользователя и пароль для вашего развертывания Kubeflow, выполните следующие команды:
juju config dex-auth static-username=admin
juju config dex-auth static-password=admin
![img16png](https://habrastorage.org/getpro/habr/upload_files/68c/2fa/32c/68c2fa32c059cc53faae46aef43f8a03.png)
Не стесняйтесь использовать другой (более надежный!) пароль, если хотите.
Отлично! Теперь наш бандл настроен на доступ к приборной панели через браузер.
Проверка развертывания Charmed Kubeflow
Отлично! Мы развернули и настроили Kubeflow. Но как узнать, что мы все сделали правильно? Можно попробовать войти в систему. Поехали!
Откройте браузер и перейдите по следующему URL-адресу:
http://10.64.140.43.nip.io
После этого вы увидите экран входа в систему dex. Введите имя пользователя (в нем указан адрес электронной почты, но подойдет любая строка, которую вы ввели при настройке) и пароль из предыдущего шага настройки.
![img17png](https://habrastorage.org/getpro/habr/upload_files/b2f/9bc/8c3/b2f9bc8c3d75b479c8f26ae64eea084b.png)
Теперь вы должны увидеть страницу "Добро пожаловать" Kubeflow:
![img18png](https://habrastorage.org/getpro/habr/upload_files/6db/d75/d56/6dbd75d56df05e63e397bd919d48aea5.png)
Нажмите кнопку Start setup
. На следующем экране вам будет предложено создать пространство имен. Это просто способ сохранить все файлы и настройки одного проекта в одном, легкодоступном месте. Выберите любое имя, которое вам нравится:
![img19png](https://habrastorage.org/getpro/habr/upload_files/db6/a72/86e/db6a7286e4b8fb6beef3236f7576a2e1.png)
После того как вы нажмете на кнопку Finish
, на экране появится панель управления!
![img20png](https://habrastorage.org/getpro/habr/upload_files/7c6/e9a/411/7c6e9a411bc194ed4c7969d019e35692.png)
Поздравляю, мы развернули Kubeflow!
Более подробную информацию о работе с kubeflow
можно найти в следующих статьях.
По всем вопросам можно писать в телеграмм https://t.me/microk8s_kubeflow