Содержание
Введение
ПК СВ Брест устанавливается в среде ОС Astra Linux SE 1.6 с установленным вторым обновлением безопасности
Состав стенда
Фронтальная машина (сервер управления виртуализацией)
srv1.brest133.local
ip 192.168.133.1
Гипервизоры ceph-хранилища:
node1.brest133.local
ip 192.168.133.101
node2.brest133.local
ip 192.168.133.102
node3.brest133.local
ip 192.168.133.103
АРМ управления виртуализацией
arm1.brest0.local
ip 192.168.133.31
1.srv1 - предварительная настройка фронтальной машины
1.1 подготовка
1.1.1. настройка сети
на всех узлах OpenNebula необходимо создать мост с одинаковым именем. в данном примере используется имя br0, настройка осуществляется через редактирование /etc/network/interfaces. однако, можно использовать network-manager
установить пакет bridge-utils
настраиваем bridge для nebula. /etc/network/interfaces:
auto br0 iface br0 inet static bridge_ports eth0 address <ip> netmask <mask>
настроить hosts записи в файле /etc/hosts:
192.168.133.1 srv1.brest133.local srv1 192.168.133.31 arm1.brest133.local arm1 192.168.133.101 node1.brest133.local node1 192.168.133.102 node2.brest133.local node2 192.168.133.103 node3.brest133.local node3
в случае редактирования файла hosts закомментировать строку:
127.0.1.1 <hostname>
1.1.2. настройка сервера NTP
в /etc/ntp.conf закомментировать строки:
#pool 0.debian.pool.ntp.org iburst #pool 1.debian.pool.ntp.org iburst #pool 2.debian.pool.ntp.org iburst #pool 3.debian.pool.ntp.org iburst
и добавить в соответствующие секции:
server 127.127.1.0 fudge 127.127.1.0 stratum 10 restrict 192.168.133.0 mask 255.255.255.0 nomodify notrap
включить и рестартовать сервис ntp:
sudo systemctl enable ntp sudo systemctl restart ntp
проверить работоспособность NTP:
ntpq -p
1.1.3. ALD-сервер
sudo apt install ald-server-common
добавить группы disk,kvm,libvirt,libvirt-admin,libvirt-qemu,astra-admin,astra-console
в ALLOWED_LOCAL_GROUPS файла /etc/ald/ald.conf
sudo ald-init init
1.1.4. Postgresql
sudo apt install postgresql-9.6 sudo -u postgres psql create database onedb; alter user postgres password 'postgres'; \q
1.1.5. повышение уровня целостности до 127
в файле /etc/default/grub отредактировать сроку:
GRUB_CMDLINE_LINUX_DEFAULT="parsec.max_ilev=127 parsec.ccnr_relax=1 quiet net.ifnames=0"
выполнить команды:
sudo pdpl-user -i 127 <user> sudo update-grub
перезагрузиться
1.2. развертывание БРЕСТ (opennebula)
1.2.1. установка
sudo apt install brestcloud
перезагрузиться
1.2.2. настройка opennebula
остановить службы OpenNebula:
sudo systemctl stop opennebula sudo systemctl stop unicorn-opennebula
в конфигурационном файле /etc/one/oned.conf в секции DB закомментировать строку sqlite и раскоментировать строку pgsql, добавить указанные данные для авторизации postgresql;
удалить все файлы в /var/lib/one/.one кроме one_auth
запустить службы OpenNebula:
sudo systemctl start opennebula sudo systemctl start unicorn-opennebula
сконфигугировать облако и создать пользователя командами:
sudo brestcloud-configure sudo ald-libvirt-qemu-configure
sudo brestuser create brestadmin
1.2.3. Настройка firefox
Войти в графику пользователем brestadmin.
В адресной строке firefox ввести about:config
для параметров
network.negotiate-auth.delegation-uris network.negotiate-auth.trusted-uris
выставить значение "http://" (без кавычек).
Перейти в интерфейс OpenNebula: http://srv1
2. arm1 - предварительная настройка АРМ управления виртуализацией
2.1. настройка сети
Установить IP-адрес 192.168.133.31/24 (использовать networking или NetworkManager).
Настроить hosts записи в файле /etc/hosts:
192.168.133.1 srv1.brest133.local srv1 192.168.133.31 arm1.brest133.local arm1 192.168.133.101 node1.brest133.local node1 192.168.133.102 node2.brest133.local node2 192.168.133.103 node3.brest133.local node3
В случае редактирования файла hosts закомментировать строку:
127.0.1.1 <hostname>
2.2. настройка NTP
в /etc/ntp.conf закомментировать строки:
#pool 0.debian.pool.ntp.org iburst #pool 1.debian.pool.ntp.org iburst #pool 2.debian.pool.ntp.org iburst #pool 3.debian.pool.ntp.org iburst
и добавить:
server srv1
включить и рестартовать сервис ntp:
sudo systemctl enable ntp sudo systemctl restart ntp
проверить NTP:
ntpq -p
2.3. Ввод в домен ALD
sudo apt install ald-client-common ald-admin sudo ald-client join
добавить возможность входа пользователем brestadmin на arm1
ald-admin user-ald-cap brestadmin --add-hosts --host=arm1.brest133.local
3. nodes - предварительная настройка узлов
3.1 Настройка сети
установить пакет bridge-utils
настраиваем bridge для nebula. /etc/network/interfaces:
auto br0 iface br0 inet static bridge_ports eth0 address <ip> netmask <mask>
Настроить hosts записи в файле /etc/hosts:
192.168.133.1 srv1.brest133.local srv1 192.168.133.31 arm1.brest133.local arm1 192.168.133.101 node1.brest133.local node1 192.168.133.102 node2.brest133.local node2 192.168.133.103 node3.brest133.local node3
В случае редактирования файла hosts закомментировать строку:
127.0.1.1 <hostname>
3.2. настройка NTP
в /etc/ntp.conf закомментировать строки:
#pool 0.debian.pool.ntp.org iburst #pool 1.debian.pool.ntp.org iburst #pool 2.debian.pool.ntp.org iburst #pool 3.debian.pool.ntp.org iburst
и добавить:
server srv1
включить и рестартовать сервис ntp:
sudo systemctl enable ntp sudo systemctl restart ntp
проверить NTP:
ntpq -p
3.3. Ввод в домен ALD
sudo apt install ald-client-common sudo ald-client join
3.4 повышение уровня целостности до 127
в файле /etc/default/grub отредактировать сроку:
GRUB_CMDLINE_LINUX_DEFAULT="parsec.max_ilev=127 parsec.ccnr_relax=1 quiet net.ifnames=0"
выполнить команды:
sudo pdpl-user -i 127 <user> sudo update-grub
перезагрузиться
3.5 развертывание ноды
sudo apt install ald-libvirt-qemu opennebula-node ipmitool
перезагрузиться
sudo ald-libvirt-qemu-configure
3.6 настройка беспарольного доступа SSH на фронтальную машину
KEY=$(sudo cat /root/.ssh/id_rsa.pub) ssh u@srv1 "sudo bash -c \"echo $KEY >> /root/.ssh/authorized_keys\""
4. Установка кластера Ceph
на узлах кластера добавляем пользователя ceph-adm и разрешаем ему sudo без пароля на srv1, node{1,2,3} и arm1
sudo adduser ceph-adm echo "ceph-adm ALL = (root) NOPASSWD:ALL" |sudo tee /etc/sudoers.d/ceph-adm sudo chmod 0440 /etc/sudoers.d/ceph-adm sudo pdpl-user -i 127 ceph-adm
настраиваем ключевой доступ по ssh с arm1 на srv1, node{1,2,3} и arm1 (можно выполнять от любого локального пользователя arm1)
ssh-keygen ssh-copy-id ceph-adm@srv1 for node_id in 1 2 3; do ssh-copy-id ceph-adm@node$node_id; done ssh-copy-id ceph-adm@arm1
устанавливаем ceph-deploy на arm1
sudo apt install ceph-deploy
установить Ceph на узлах кластера node{1,2,3} (репозиторий Астры должен быть доступен на всех узлах)
ceph-deploy --username ceph-adm install --mon --osd node1 node2 node3
перезагрузить node{1,2,3}
for node_id in 1 2 3; do ssh ceph-adm@node$node_id sudo reboot; done
установить на узле node1 компонент ceph-mgr
ceph-deploy --username ceph-adm install --mgr node1
создать новый кластер Ceph, при этом указать в команде узлы кластера, на которых в дальнейшем будут инициализированы первоначальные мониторы
ceph-deploy --username ceph-adm new node1 node2 node3
После выполнения команды будут созданы конфигурационный файл (по умолчанию ceph.conf) и keyring-файл мониторов
инициализировать мониторы на ранее указанных узлах кластера выполнив команду
ceph-deploy --username ceph-adm mon create-initial
создать mgr на узле node1 используя команду
ceph-deploy --username ceph-adm mgr create node1
перезагрузить node{1,2,3}
for node_id in 1 2 3; do ssh ceph-adm@node$node_id sudo reboot; done
создать OSD на дисках sdb узлов кластера node{1,2,3} и добавить их в кластер используя команды (вместо /dev/sdb нужно указать соответствующее каждому хосту блочное устройство)
ceph-deploy --username ceph-adm osd create --data /dev/sdb node1 ceph-deploy --username ceph-adm osd create --data /dev/sdb node2 ceph-deploy --username ceph-adm osd create --data /dev/sdb node3
установить основные компоненты Ceph на srv1, node{1,2,3} и arm1 используя команду
ceph-deploy --username ceph-adm install --cli srv1 node1 node2 node3 arm1
скопировать конфигурационный файл и keyring-файл администратора на рабочую станцию arm1 используя команду
ceph-deploy --username ceph-adm admin arm1
проверить кластер
sudo ceph -s
вывод команды должен быть примерно таким:
cluster: id: 6f6f8a54-6621-4e94-85b2-a30fc9117553 health: HEALTH_OK services: mon: 3 daemons, quorum node1,node2,node3 mgr: node1(active) osd: 3 osds: 3 up, 3 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 3164 MB used, 146 GB / 149 GB avail pgs:
добавить конфигурационный файл на клиенты srv1 и node{1,2,3} кластера Ceph
ceph-deploy --username ceph-adm config push srv1 node1 node2 node3
создаем пул где 128 это pg_num (pg_num = ((Total_number_of_OSD * 100) / max_replication_count) с округлением до ближайшей степени 2 в сторону увеличения, в нашем случае (3 OSD * 100) / 3 rep_size = 100 округляем до 128)
sudo ceph osd pool create one 128 sudo ceph osd pool application enable one rbd
определить Ceph-пользователя, который будет иметь доступ к пулу хранилищ. Данный пользователь будет также использоваться libvirt для доступа к образам дисков:
sudo ceph auth get-or-create client.libvirt mon 'allow rw' osd 'allow rwx pool=one'
Далее необходимо получить копию ключа данного пользователя для его дальнейшей передачи на узлы OpenNebula:
sudo ceph auth get-key client.libvirt | tee client.libvirt.key sudo ceph auth get client.libvirt -o ceph.client.libvirt.keyring
Скопировать все файлы ключей на OpenNebula хосты srv1 и node{1,2,3}
scp ceph.client.libvirt.keyring ceph-adm@srv1:/tmp for node_id in 1 2 3; do scp ceph.client.libvirt.keyring ceph-adm@node$node_id:/tmp; done scp client.libvirt.key ceph-adm@srv1:/tmp for node_id in 1 2 3; do scp client.libvirt.key ceph-adm@node$node_id:/tmp; done ssh ceph-adm@srv1 "sudo mv /tmp/ceph.client.libvirt.keyring /etc/ceph" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo mv /tmp/ceph.client.libvirt.keyring /etc/ceph"; done ssh ceph-adm@srv1 "sudo mv /tmp/client.libvirt.key /var/lib/one" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo mv /tmp/client.libvirt.key /var/lib/one"; done ssh ceph-adm@srv1 "sudo ln -s /var/lib/one/client.libvirt.key /root/client.libvirt.key" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo ln -s /var/lib/one/client.libvirt.key /root/client.libvirt.key"; done
сгенерировать секретный ключ для Ceph-пользователя и скопировать его на узлы в каталог /var/lib/one. Запомнить универсальный уникальный идентификатор (UUID) для дальнейшего использования:
sudo apt install uuid-runtime UUID=`uuidgen` cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>$UUID</uuid> <usage type='ceph'> <name>client.libvirt secret</name> </usage> </secret> EOF
scp secret.xml ceph-adm@srv1:/tmp for node_id in 1 2 3; do scp secret.xml ceph-adm@node$node_id:/tmp; done ssh ceph-adm@srv1 "sudo mv /tmp/secret.xml /var/lib/one" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo mv /tmp/secret.xml /var/lib/one"; done ssh ceph-adm@srv1 "sudo ln -s /var/lib/one/secret.xml /root/secret.xml" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo ln -s /var/lib/one/secret.xml /root/secret.xml"; done
установить секретный ключ libvirt и удалить файлы ключа на узлах (переменная $UUID должна быть определена с предыдущих шагов):
ssh ceph-adm@srv1 "sudo virsh -c qemu:///system secret-define /root/secret.xml" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo virsh -c qemu:///system secret-define /root/secret.xml"; done BASE64=$(cat client.libvirt.key) ssh ceph-adm@srv1 "sudo virsh -c qemu:///system secret-set-value --secret $UUID --base64 $BASE64" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo virsh -c qemu:///system secret-set-value --secret $UUID --base64 $BASE64"; done ssh ceph-adm@srv1 "sudo rm /root/client.libvirt.key" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo rm /root/client.libvirt.key"; done ssh ceph-adm@srv1 "sudo rm /var/lib/one/client.libvirt.key" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo rm /var/lib/one/client.libvirt.key"; done
убедиться, что Ceph-клиент имеет корректные настройки на узле (результатом выполнения команды должен быть пустой вывод без ошибок)
ssh ceph-adm@srv1 "sudo rbd ls -p one --id libvirt" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo rbd ls -p one --id libvirt"; done
создать хранилища используя CLI на srv1
Создать системное хранилище через CLI (CEPH_SECRET значение брать из файла secret.xml)
$ cat systemds.txt NAME = ceph_system TM_MAD = ceph TYPE = SYSTEM_DS POOL_NAME = one CEPH_HOST = "node1 node2 node3" CEPH_USER = libvirt BRIDGE_LIST = "node1 node2 node3" CEPH_SECRET = "7dd9096b-3392-4237-9ef0-38c7ce453145" $ sudo onedatastore create systemds.txt
Создать хранилище образов через CLI
$ cat ds.conf NAME = "cephds" DS_MAD = ceph TM_MAD = ceph DISK_TYPE = RBD POOL_NAME = one CEPH_HOST = "node1 node2 node3" CEPH_USER = libvirt BRIDGE_LIST = "node1 node2 node3" CEPH_SECRET = "7dd9096b-3392-4237-9ef0-38c7ce453145" $ sudo onedatastore create ds.conf
установить пакет qemu-block-extra на srv1 и node{1,2,3} (Примечание, для установки этого пакета в качестве репозитория необходимо использовать диск для разработчика ОС Astra Linux SE и соответствующее обновление безопасности)
ssh ceph-adm@srv1 "sudo apt install qemu-block-extra" for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo apt install qemu-block-extra"; done
5. Настройка Opennebula
5.1. настройка беспарольного root-доступа фронтальной машины к нодам по SSH
выполнить команды на srv1
KEY=$(sudo cat /root/.ssh/id_rsa.pub) for node_id in 1 2 3; do ssh ceph-adm@node$node_id "sudo bash -c \"echo $KEY >> /root/.ssh/authorized_keys\""; done
5.2 настройка Infrastructure
добавить узлы как показано на рисунках
5.3 настройка Networks
добавить vNetwork0 как показано на рисунках