Установить Kubeflow

В инструкции мы рассматриваем установку Kubeflow версии 1.5. Также инструкция подходит для установки версии 1.6
  1. Подключите ML-платформу Selectel.
  2. Создайте облачный сервер с операционной системой Linux.
  3. Подключитесь к облачному серверу.
  4. Установите kustomize на облачном сервере.
  5. Установите kubectl на облачном сервере.
  6. Установите Kubeflow на облачном сервере.

Подключить ML-платформу

Для работы Kubeflow нужен кластер Kubernetes с StorageClass. Подключите ML-платформу — будет автоматически создан готовый к работе кластер Managed Kubernetes.

Рекомендованные версии кластера Managed Kubernetes:

Kubeflow Managed Kubernetes
1.5 1.21
1.6 1.22

Создать облачный сервер

Для установки Kubeflow 1.5 необходим kustomize версии 3.2.0 (для Kubeflow 1.6 тоже можно использовать версию 3.2.0). Собранный бинарный файл для установки kustomize 3.2.0 есть только для операционной системы Linux и amd64, поэтому в инструкции мы рассматриваем установку всех компонентов на облачном сервере с Linux.

Если вы используете другую архитектуру CPU или другую операционную систему, то могут возникнуть проблемы с использованием kustomize версии 3.2.0
  1. В панели управления перейдите в раздел Облачная платформа ⟶ Серверы.

  2. Нажмите Создать сервер.

  3. В блоке Источник нажмите Выбрать другой источник и выберите готовый образ с операционной системой Linux (например, Ubuntu 18.04).

  4. Выберите загрузочный диск сервера. Можно выбрать:

    Мы рекомендуем использовать диск размером не менее 5 ГБ (минимальный доступный размер) — на облачном сервере требуется место для бинарного файла kustomize (~25 МБ) и манифеста Kubeflow (~7 МБ).

  5. В блоке Сеть выберите приватную подсеть с плавающим IP-адресом. IP-адрес нужен для подключения к серверу по SSH.

  6. Создайте SSH-ключ и скопируйте его публичную часть. В блоке Доступ нажмите Загрузить SSH-ключ и вставьте публичную часть ключа. Нажмите Добавить ключ.

  7. Выберите остальные настройки сервера — подробнее в инструкции Создать облачный сервер.

  8. Нажмите Создать.

Подключиться к облачному серверу

  1. В панели управления перейдите в раздел Облачная платформа ⟶ Серверы.
  2. В строке с облачным сервером скопируйте значение в столбце IP-адрес.
  3. Подключитесь к облачному серверу по SSH:
  ssh root@<IP_address> -i <path_to_private_key>
Укажите:

- `<IP_address>` — плавающий IP-адрес облачного сервера, скопированный на шаге 2;
- `<path_to_private_key>` — путь до приватной части ключа.

Установить kustomize на облачном сервере

Kubeflow 1.5.0 не совместим с версиями kustomize выше 4.х — мы рассматриваем установку kustomize версии 3.2.0

  1. Загрузите бинарный файл с дистрибутивом kustomize на облачный сервер:
  wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64
  1. Установите kustomize:
  install -o root -g root -m 0755 kustomize_3.2.0_linux_amd64 /usr/local/bin/kustomize
  1. Проверьте, что kustomize установлен:
  kustomize version
Ответ:

```
Version: {KustomizeVersion:3.2.0 GitCommit:a3103f1e62ddb5b696daa3fd359bb6f2e8333b49 BuildDate:2019-09-18T16:26:36Z GoOs:linux GoArch:amd64}
```

Установить kubectl на облачном сервере

  1. Загрузите дистрибутив kubectl на облачный сервер:
  curl -LO [https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl](https://d1.k8.io/release/v1.21.0/bin/linux/amd64/kubectl)
  1. Установите kubectl:
  install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  1. В панели управления перейдите в раздел Облачная платформа ⟶ Kubernetes.
  2. Откройте страницу кластера вкладка Настройки.
  3. Нажмите Скачать kubeconfig.
  4. Отключитесь от облачного сервера и откройте терминал на локальной машине.
  5. Скопируйте конфигурационный файл с локальной машины на облачный сервер:
  scp -i <~/.ssh/id_rsa> <~/Downloads/kubeconfig.yaml> root@<IP_address>:/root/<kubeconfig.yaml>
Укажите:

- `<~/.ssh/id_rsa>` — путь на локальной машине до SSH-ключа, который был сгенерирован на шаге 6 инструкции [Создать облачный сервер](#создать-облачный-сервер);
- `<~/Downloads/kubeconfig.yaml>` — путь на локальной машине до конфигурационного файла, который был скачан на шаге 6;
- `<IP_address>` — плавающий IP-адрес облачного сервера;
- `<kubeconfig.yaml>` — имя конфигурационного файла.
  1. Подключитесь к облачному серверу.
  2. Проверьте, что конфигурационный файл загружен:
  ls -ailh
  1. Экспортируйте конфигурационный файл:
  export KUBECONFIG=/root/<kubeconfig.yaml>
Укажите `<kubeconfig.yaml>` — имя конфигурационного файла.
  1. Проверьте, что kubectl установлен:
  kubectl version
Ответ:

```
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.13", GitCommit:"592eca05be27f7d927d0b25cbb4241d75a9574bf", GitTreeState:"clean", BuildDate:"2022-10-12T10:50:48Z", GoVersion:"go1.17.13", Compiler:"gc", Platform:"linux/amd64"}
WARNING: version difference between client (1.21) and server (1.23) exceeds the supported minor version skew of +/-1
```
  1. Обратитесь к кластеру через kubectl:
  kubectl get nodes
Ноды должны быть в статусе Ready.

Установить Kubeflow на облачном сервере

  1. Установите git:
  apt update
  apt install git
  1. Клонируйте репозиторий с манифестами Kubeflow:
  git clone [https://github.com/kubeflow/manifests.git](https://github.com/kubeflow/manifests.git)
  1. Перейдите в папку с манифестами:
  cd manifests/
  1. Откройте ветку:
  git checkout v1.5-branch
  1. Убедитесь, что открыта нужная ветка:
  git branch -a
Ответ:

```
master

* v1.5-branch
```
  1. Установите официальные компоненты Kubeflow:
  while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
  1. Проверьте, что все пространства имен активны:
  kubectl get namespaces
  1. Если при установке возникли ошибки, установите компоненты отдельно — используйте документацию Kubeflow.
  2. Проверьте, что все компоненты активны — у них должен быть статус Running:
  kubectl get pods -n auth
  kubectl get pods -n cert-manager
  kubectl get pods -n istio-system
  kubectl get pods -n knative-eventing
  kubectl get pods -n kserve
  kubectl get pods -n knative-serving
  kubectl get pods -n kubeflow
  kubectl get pods -n kubeflow-user-example-com
  1. Пробросьте порты:
  kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
  1. Откройте в браузере страницу http://localhost:8080
  2. Для подключения к Kubeflow введите данные по умолчанию — логин (user@example.com) и пароль (12341234).