Содержание

Skip to end of metadata
Go to start of metadata

Введение

ПК СВ Брест устанавливается в среде ОС 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;

 Было:
DB = [ BACKEND = "sqlite" ]


# rbt: Sample configuration for Postgresql with default credentials
# DB = [ BACKEND = "pgsql",    
#        SERVER  = "localhost",
#        PORT    = 5432,      
#        USER    = "USERNAME",
#        PASSWD  = "PASSWORD",
#        DB_NAME = "DB_NAME" ]
 Стало:
# DB = [ BACKEND = "sqlite" ]
                             
# rbt: Sample configuration for Postgresql with default credentials
DB = [ BACKEND = "pgsql",     
        SERVER  = "localhost",
        PORT    = 5432,       
        USER    = "postgres",
        PASSWD  = "postgres",
        DB_NAME = "onedb" ]

удалить все файлы в /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 как показано на рисунках


  • No labels