Установка ПО BasIS
Установка и управление ПО BasIS выполняется с помощью набора утилит EXMT. Настройки этих утилит обеспечивают контроль используемых версий, а также режим запуска компонент BasIS. После EXMT происходит настройка параметров BasIS, затем выполняется автоматизированная загрузка компонент BasIS и их запуск. Перед началом установки необходимо получить информацию о текущей стабильной версии EXMT и токен для доступа к репозиторию git.rsc-tech.ru, отправив соответствующее письмо в RequestTracker(RT).
Для работы EXMT необходимо установить goss, jq и dig.
Для этого необходимо выполнить команды:
# curl -fsSL https://goss.rocks/install | sh
# curl -fsSL https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 > /usr/bin/jq && chmod +x /usr/bin/jq
# yum install -y bind-utils
Установка набора утилит EXMT
Для установки набора утилит EXMT необходимо получить архив пакета для установки, распаковать его и выполнить его установку:
# unzip exmt.sh-21.08.2.rpm.zip
# yum install ./exmt.sh-21.08.2.rpm
Настройка окружения EXMT
Для настройки окружения EXMT необходимо запустить exmt.sh. При первом запуске утилита запросит:
- Интерфейс сервера управления для доступа в сеть доступа.
- Доменное имя ВК.
- Мастер-пароль (допускается его отсутствие).
После запуска утилит будет запущена оболочка EXMT. Для вступления в силу указанных переменных необходимо выйти из оболочки EXMT (команда exit) и снова запустить exmt.sh.
Справка. Оболочка EXMT является дополнением поверх текущей оболочки CLI (обычно bash). Таким образом, в оболочке EXMT работают все команды, доступные в ОС, и команды, предоставляемые утилитой EXMT.
Переменные, используемые EXMT, хранятся в файле /opt/exmt/$EXMT_VERSION/.env.
Подготовка к развёртыванию компонентов BasIS
dnsmasq , dummy
и остальными сетевыми службами необходимо произвести несколько команд, обеспечивающих эти связи
exmt.sh
_dummy
_dnsmasq_setup
_dnsmasq_consul
_dnsmasq_xcat
Перед началом развёртывания необходимо запустить exmt.sh и подключить docker к репозиторию git.rsc-tech.ru, выполнив команду:
# docker login -u gitlab-ci-token -p $REGISTRY_TOKEN git.rsc-tech.ru:4567
Развёртывание компонентов BasIS
Развёртывание компонентов выполняется из под оболочки exmt.sh с помощью команд:
docker compose pull
docker compose up -d
Команда выполняет загрузку и запуск контейнеров в несколько этапов:
- Контейнер discovery.
- Контейнер vault.
- Контейнеры xcat, xcatdb и nats.
- Контейнер cmdb.
- Все остальные контейнеры.
После каждого этапа запускается проверка запущенных на данном этапе контейнеров. Следующий этап запускается только после того, как проверка прошла успешно. Установка занимает от 20 до 30 минут. После того, как все контейнеры будут запущены, будет выведен отчет о запущенных сервисах вида:
Creating exmt_imx_repo_1 ...
Creating exmt_puppet_1 ... done
Creating exmt_ldap_1 ... done
Creating exmt_imx_repo_1 ... done
Creating exmt_process_agent_1 ... done
Creating exmt_phpldapadmin_1 ... done
Creating exmt_slurm_repo_1 ... done
Creating exmt_xcat_repo_1 ... done
Creating exmt_influxdb_repo_1 ... done
Creating exmt_puppet_repo_1 ... done
Creating exmt_lustre_repo_1 ... done
Creating exmt_tools_repo_1 ... done
Creating exmt_gateway_1 ... done
Creating exmt_xcat_agent_1 ... done
Creating exmt_rmc_gateway_1 ... done
Creating exmt_ui_1 ... done
Creating exmt_slurmdb_mysql_1 ... done
После вывода отчета установка и развёртывание ПО системы управления BasIS завершится.
vault token (этот пункт обычно выполняется только при первоначальной настроке управляющего сервера)
Для корректного взаимодействия между сервисами запущенными в контейнерах Docker необходимо,что бы vault token везде был одинаковым. В противном случае сервисы внутри этих контейнеров не сумеют даже запуститься.
Для этого нужно сравнить вывод команды:
grep Token /var/lib/docker/volumes/exmt_vault/_data/init
Со значением внутри файла:
cat /root/.vault_token
$ printenv | grep -i vault_token
Если значения различаются , то необходимо:
1) значение из cat `/var/lib/docker/volumes/exmt_vault/_data/init` , скопировать в `/root/.vault_token`
2) удалить созданные все docker Volumes, кроме vault :
- docker stop $(docker ps -a --format "{{.ID}} {{.Names}}" | grep -v 'vault' | awk '{print $1}') # Останавливаем все запущенные контейнеры
- docker volume rm $(docker volume ls -q | grep -v vault) # Удаление всех Docker Volumes кроме vault
- docker rm $(docker ps -a --format "{{.ID}} {{.Names}}" | grep -v 'vault' | awk '{print $1}') # Удаляем все контейнеры
3) Пересоздать все удаленные Docker Containers & Volumes :
- exmt.sh
- ```docker compose up -d```
Дополнительная настройка компонентов BasIS
Настройки компонент BasIS определяются настройками контейнеров, расположенных в директории /opt/exmt/$EXMT_VERSION/docker-compose.d.
Дополнительные настройки xCAT
Для обеспечения полнофункциональной работы данного сервиса внутри контейнера запускаются сервер DHCP, DNS-сервер, NFS-сервер и его службы. NFS-сервер и его службы не должны запускаться вне контейнера xCAT. При необходимости предоставление общего доступа к какой-либо из директорий головного сервера по протоколу NFS можно реализовать, изменив файл конфигурации xCAT-контейнера /opt/exmt/docker-compose.d/docker-compose.xcat.yml:
- в секции volumes необходимо указать, какая директория на головном сервере должна быть проброшена во внутрь контейнера xCAT;
- в секции environment необходимо указать, что к проброшенной во внутрь контейнера директории необходимо предоставить доступ по NFS.
После внесения изменений в конфигурационный файл контейнера xCAT необходимо остановить соответствующий контейнер xCAT командой и удалить экземпляр контейнера:
# docker stop exmt_xcat_1
# docker rm exmt_xcat_1
Для применения измененных переменных в файле настроек контейнера необходимо заново зайти в оболочку EXMT и пересоздать экземпляр контейнера на основе обновлённого конфигурационного файла:
# exmt.sh
# docker-compose up –d
Контейнер будет пересоздан и запущен.
Настройка упрощённого доступа к контейнеру xCAT
Для доступа к контейнеру открыт порт 17235 для подключения по SSH. Таким образом, для доступа достаточно открыть shh-сессию на указанном порту, предварительно настроив беспарольный доступ. Для этого необходимо выполнить ряд действий:
- Если у пользователя root отсутствуют SSH-ключи, то необходимо их создать, выполнив команды:
# cd ~/.ssh
# ssh-keygen -t rsa -b 4096 -C "some_code_phrase" -f /root/.ssh/id_rsa -P ''
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
88:bd:60:d6:a5:30:39:1a:8f:2f:31:05:7b:50:04:8e
The key's randomart image is:
+--[ RSA 4096]----+
| ++o |
| o + . |
|E + B . |
| B B + |
| = * = S |
| * . . |
| . . . |
| . |
| |
+-----------------+
# ls
authorized_keys id_rsa id_rsa.pub
# cat ./id_rsa.pub >> ./authorized_keys
- Авторизовать пользователя root для доступа по ssh:
# eval "$(ssh-agent -s)"
Agent pid 25121
# ssh-add /root/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
# ssh root@localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is 22:47:74:63:52:ed:57:79:93:7e:86:bc:2e:b:dc:90.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
- Открыть ssh-сессию:
ssh localhost -p 17235
------------------------------------------------------------
___
____ _ _____ _.-| | |\__/,| (`\
__ __/ ___| / \|_ _| { | | |x x |__ _) )
\ \/ / | / _ \ | | "-.|___| _.( T ) ` /
> <| |___ / ___ \| | .--'-`-. _((_ `^--' /_< \
/_/\_\\____/_/ \_\_| .+|______|__.-||__)`-'(((/ (((/
------------------------------------------------------------
[ Docker: xCAT root@head1 ~]#
Генерация ключа munge
В системе управления BasIS используется планировщик задач Slurm, который применяет в своей работе систему авторизации Munge. Для обеспечения автоматизации последующей настройки Munge на головном сервере и вычислительных узлах необходима генерация уникального в пределах ВК ключа Munge. Для этого в составе оболочки EXMT существует специальная команда, выполняющая генерацию ключа и записывающая его в реестр ключей системы управления:
_generate_munge_key
Проверить наличие ключа в реестре можно командой _secret оболочки EXMT:
_secret munge