Установка ClearML Agent
Важно
Вместо <userdomain> укажите свой домен.
Использование аутентификационного токена для установки ClearML Agent
Для генерации пользовательского токена выполните следующие действия:
Аутентифицируйтесь на ClearML Server по адресу:
https://clearml-app.<userdomain>.ruили соответствующему адресу предоставленному клиентом.Войдите в меню Settings профиля пользователя и во вкладке Workspace нажмите на Create new credentials.
Получите и сохраните сгенерированные
Access keyиSecret key.В web-интерфейсе ClearML в разеделе Workers and Queues перейдите на вкладку Queues, выберите New Queue и создайте очередь с именем "k8s_scheduler". В качестве шаблона используйте прилагаемый файл: clearml.conf.
Измените параметры для доступа к ClearML Server используя соответствующие токены
Access keyиSecret key.
Установка ClearML Agent на k8s worker nodes
Для установки ClearML Agent на нодах Kubernetes измените настройки переменных для Helm chart и внесите соответствующие изменения в файл clearml-agent-myvalues.yaml для дальнейшего его использования при развертывании Helm chart. В качестве шаблона используйте прилагаемый файл: clearml.zip, clearml.tar.
Измените значения одним из способов: с помощью шаблона скрипта или выполните пошагово действия настройки.
Изменение значений с помощью шаблона скрипта
DOMAIN=new.<userdomain>.ru
KEY=<key>
SCRT=<secret>
sed -i "s/<userdomain>.ru/$DOMAIN/g" clearml-agent-myvalues.yaml
sed -i -E "s/agentk8sglueKey\s*:\s*\"[^\"]+\"/agentk8sglueKey: \"$KEY\"/g" clearml-agent-myvalues.yaml
sed -i -E "s/agentk8sglueSecret\s*:\s*\"[^\"]+\"/agentk8sglueSecret: \"$SCRT\"/g" clearml-agent-myvalues.yaml
sed -i -E "s/access_key\":\s*\"[^\"]+\"/access_key\": \"$KEY\"/g" clearml-agent-myvalues.yaml
sed -i -E "s/secret_key\":\s*\"[^\"]+\"/secret_key\": \"$SCRT\"/g" clearml-agent-myvalues.yaml
S3_HOST=0123456789.s3mts.ru
S3_KEY=admin-0123456789
S3_SCRT=s3_secret
sed -i -E "s/[0-9]+\.s3mts.ru/$S3_HOST/g" clearml-agent-myvalues.yaml
sed -i -E "s/admin-[0-9]+/$S3_KEY/g" clearml-agent-myvalues.yaml
sed -i -E "s/secret:\s*\"[^\"]+\"/secret: \"$S3_SCRT\"/g" clearml-agent-myvalues.yamlИзменение значений пошагово
Измените значения
clearml.agentk8sglueKeyиclearml.agentk8sglueSecretна значенияAccess KeyиSecret Key, полученные на шаге Использование аутентификационного токена для установки ClearML Agent.bash# -- ClearMl generic configurations clearml: # -- If this is set, chart will not generate a secret but will use what is defined here existingAgentk8sglueSecret: "" # -- Agent k8s Glue basic auth key agentk8sglueKey: "<key>" # -- Agent k8s Glue basic auth secret agentk8sglueSecret: "<secret>"Измените в шаблоне значения всех переменных, указывающих на URL ClearML:
api.api_serverapi.web_serverapi.files_server
Пример секции
apibash# -- ClearML configuration file clearmlConfig: |- # CLEARML-AGENT configuration file api { # Notice: 'host' is the api server (default port 8008), not the web server. api_server: https://clearml-api.<userdomain>.ru web_server: https://clearml-app.<userdomain>.ru files_server: https://clearml-files.<userdomain>.ru # Credentials are generated using the webapp, http://clearml-app.cloud.mts.ru:80/settings # Override with os environment: CLEARML_API_ACCESS_KEY / CLEARML_API_SECRET_KEY credentials {"access_key": "you key", "secret_key": "you secret"} } # Default Task output_uri. if output_uri is not provided to Task.init, default_output_uri will be used instead. sdk.development.default_output_uri="https://clearml-files.<userdomain>.ru" # -- Reference to Api server url apiServerUrlReference: "https://clearml-api.<userdomain>.ru" # -- Reference to File server url fileServerUrlReference: "https://clearml-files.<userdomain>.ru" # -- Reference to Web server url webServerUrlReference: "https://clearml-app.<userdomain>.ru"Измените значения
aws.s3.credentials:aws.s3.credentials.hostaws.s3.credentials.keyaws.s3.credentials.secret
Пример секции
awsbashaws { s3 { # S3 credentials, used for read/write access by various SDK elements credentials: [ { # Host with the namespace for accessing object storage: host: "6839735844.s3mts.ru" # Bucket name - optional: bucket: "clearml-bucket-1" # Key for object storage access: key: "admin-6839735844" # Secret for object storage access: secret: "secret-xuXsuf-2romme-qymwoh" secure: false multipart: false } ] } boto3 { pool_connections: 512 max_multipart_concurrency: 16 #https_validate_certificates: false } }Установите ClearML Agent в k8s кластер с помощью Helm:
bashhelm install --generate-name allegroai/clearml-agent -f clearml-agent-myvalues.yaml --version 2.0.2 NAME: clearml-agent-1674060515 LAST DEPLOYED: Wed Jan 18 19:48:36 2023 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Glue Agent deployed.
Совет
Дополнительная документация по установке ClearML Agent в k8s представлена по адресу.
Установка ClearML Agent на виртуальные машины
Для установки ClearML Agent на виртуальные машины выполните следующие действия:
Войдите на виртуальную машину:
bashssh -l user <vm_ip>Поднимите привилегии до
root:bashsudo -iУстановите python:
bashroot@clearml-vm-node1:~# apt install python3 Reading package lists... Done Building dependency tree... Done Reading state information... Done python3 is already the newest version (3.9.2-3). python3 set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@clearml-vm-node1:~# python3 --version Python 3.9.2Установите pip:
bashuser@clearml-vm-node1:~$ sudo apt-get install python3-pip Reading package lists... Done Building dependency tree... Done Reading state information... Done python3-pip is already the newest version (20.3.4-4+deb11u1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. dgxuser@clearml-vm-node1:~$ pip --version pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9) dgxuser@clearml-vm-node1:~$ pip3 --version pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)Установите ClearML Agent:
bashuser@clearml-vm-node1:~$ python3 -m pip install clearml-agent Collecting clearml-agent Downloading clearml_agent-1.5.1-py3-none-any.whl (397 kB) |████████████████████████████████| 397 kB 1.4 MB/s Collecting python-dateutil<2.9.0,>=2.4.2 Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) |████████████████████████████████| 247 kB 25.3 MB/s Collecting pathlib2<2.4.0,>=2.3.0 Downloading pathlib2-2.3.7.post1-py2.py3-none-any.whl (18 kB) Collecting virtualenv<21,>=16 Downloading virtualenv-20.17.1-py3-none-any.whl (8.8 MB) |████████████████████████████████| 8.8 MB 38.3 MB/s Requirement already satisfied: six<1.17.0,>=1.13.0 in /usr/lib/python3/dist-packages (from clearml-agent) (1.16.0) Requirement already satisfied: urllib3<1.27.0,>=1.21.1 in /usr/lib/python3/dist-packages (from clearml-agent) (1.26.5) Collecting furl<2.2.0,>=2.0.0 Downloading furl-2.1.3-py2.py3-none-any.whl (20 kB) Collecting pyparsing<3.1.0,>=2.0.3 Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB) |████████████████████████████████| 98 kB 11.1 MB/s Requirement already satisfied: attrs<23.0.0,>=18.0 in /usr/local/lib/python3.9/dist-packages (from clearml-agent) (22.1.0) Requirement already satisfied: PyYAML<6.1,>=3.12 in /usr/local/lib/python3.9/dist-packages (from clearml-agent) (6.0) Requirement already satisfied: jsonschema<5.0.0,>=2.6.0 in /usr/local/lib/python3.9/dist-packages (from clearml-agent) (4.17.0) Requirement already satisfied: requests<2.29.0,>=2.20.0 in /usr/lib/python3/dist-packages (from clearml-agent) (2.25.1) Collecting psutil<5.10.0,>=3.4.2 Downloading psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (280 kB) |████████████████████████████████| 280 kB 90.5 MB/s Collecting pyjwt<2.7.0,>=2.4.0 Downloading PyJWT-2.6.0-py3-none-any.whl (20 kB) Collecting orderedmultidict>=1.0.1 Downloading orderedmultidict-1.0.1-py2.py3-none-any.whl (11 kB) Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/lib/python3.9/dist-packages (from jsonschema<5.0.0,>=2.6.0->clearml-agent) (0.19.2) Collecting distlib<1,>=0.3.6 Downloading distlib-0.3.6-py2.py3-none-any.whl (468 kB) |████████████████████████████████| 468 kB 79.7 MB/s Collecting filelock<4,>=3.4.1 Downloading filelock-3.9.0-py3-none-any.whl (9.7 kB) Collecting platformdirs<3,>=2.4 Downloading platformdirs-2.6.2-py3-none-any.whl (14 kB) Installing collected packages: platformdirs, orderedmultidict, filelock, distlib, virtualenv, python-dateutil, pyparsing, pyjwt, psutil, pathlib2, furl, clearml-agent WARNING: The script virtualenv is installed in '/home/dgxuser/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. WARNING: The script clearml-agent is installed in '/home/dgxuser/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. Successfully installed clearml-agent-1.5.1 distlib-0.3.6 filelock-3.9.0 furl-2.1.3 orderedmultidict-1.0.1 pathlib2-2.3.7.post1 platformdirs-2.6.2 psutil-5.9.4 pyjwt-2.6.0 pyparsing-3.0.9 python-dateutil-2.8.2 virtualenv-20.17.1Измените настройки PATH:
bashuser@clearml-vm-node1:~$ grep PATH ~/.bashrc user@clearml-vm-node1:~$ cp -av ~/.bashrc ~/.bashrc- '/home/user/.bashrc' -> '/home/user/.bashrc-' user@clearml-vm-node1:~$ echo 'export PATH=$PATH:/home/user/.local/bin' >> ~/.bashrcПроверьте версию ClearML Agent:
bashuser@clearml-vm-node1:~$ source ~/.bashrc user@clearml-vm-node1:~$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/user/.local/bin:/home/user/.local/bin user@clearml-vm-node1:~$ clearml-agent --version CLEARML-AGENT version 1.5.1Для настройки параметров ClearML Agent скопируйте конфигурационный файл агента
clearml.confв домашнюю директорию пользователя.Запустите сессию агента в
shellвиртуальной машины:bash$ screen -d -m "clearml-agent daemon --queue default —foreground"
Важно
Выполните данные операции на всех виртуальных машинах, запрошенных в заявке.
Установка стека Grafana-Prometheus
Для развертывания системы мониторинга используется kube-prometheus stack, состоящий из коллекции манифестов Kubernetes, Grafana dashboards и Prometheus rules. Prometheus rules объединены с документацией и скриптами, которые упрощают мониторинг кластера Kubernetes с помощью Prometheus, использующих Prometheus Operator.
Используемая версия Helm chart: 45.2.0 (20 Feb, 2023).
Для установки стека Grafana-Prometheus выполните следующие действия:
Добавьте репозиторий prometheus-community:
bashhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo updateПроверьте доступность репозитория:
bashhelm search repo kube-prometheus-stack NAME CHART VERSION APP VERSION DESCRIPTION prometheus-community/kube-prometheus-stack 45.2.0 v0.63.0 kube-prometheus-stack collects Kubernetes manif...Для установки стека мониторинга в k8s, в файле значений
grafana-myvalues.yamlдля helm charts в переменнойgrafana.ingress.hostsустановите имя хоста для Grafana server:bashhosts: - "clearml-grafana.cloud.mts.ru"Установите стек c помощью следующей команды:
bashhelm install mon-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.2.0 -f grafana-myvalues.yaml NAME: mon-prometheus-stack LAST DEPLOYED: Mon Feb 20 15:37:53 2023 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: kube-prometheus-stack has been installed. Check its status by running: kubectl --namespace default get pods -l "release=mon-prometheus-stack" Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.Проверьте статус разворачиваемых
pods:bashhelm-charts git:(main) kubectl --namespace default get pods -l "release=mon-prometheus-stack" NAME READY STATUS RESTARTS AGE mon-prometheus-stack-kube-operator-54659db86b-zfmgt 1/1 Running 0 75s mon-prometheus-stack-kube-state-metrics-6cc6b8d6d8-zfkk2 1/1 Running 0 75s mon-prometheus-stack-prometheus-node-exporter-z9dx8 1/1 Running 0 75sПроведите апгрейд настроек развернутой инсталляции ClearML Server в k8s:
bashhelm upgrade clearml allegroai/clearml -f myvals.yaml --version 4.4.0
Установка сертификата TLS/SSL для Grafana
Для установки сертификата TLS/SSL для Grafana выполните следующие действия:
В секции
tlsфайлаgrafana-myvalues.yamlв значениеsecretNameукажите имя созданного хранилища секретов, а в значенииhostsукажите имя хоста для которого будут применены настройки сертификата:bashtls: - secretName: "tls-secret-clearml-app" hosts: - "clearml-grafana.cloud.mts.ru"Произведите апгрейд настроек развернутой инсталляции Grafana в k8s помощью следующей команды:
bashhelm upgrade mon-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.2.0 -f grafana-myvalues.yaml Release "mon-prometheus-stack" has been upgraded. Happy Helming! NAME: mon-prometheus-stack LAST DEPLOYED: Wed Feb 22 16:59:01 2023 NAMESPACE: default STATUS: deployed REVISION: 5 NOTES: kube-prometheus-stack has been installed. Check its status by running: kubectl --namespace default get pods -l "release=mon-prometheus-stack" Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
Проверка функционирования инсталляции
Для проверки доступности приложения в web-интерфейсе ClearML в меню Workers and Queues проверьте наличие зарегистрированных workers.

