Особенности установки на серверы ББ без ZFS и предустановленного ПО на хостах

Получил три сервера без IPMI с установленной Debian 10 Buster в минимальном базовом варианте. Используя данную возможность, я протестировал ряд необычных для нас ситуаций.

  • Мало RAM (24-32G)
  • На хосте установлена ОС Debian 10

Стояла задача собрать систему на скудных по RAM серверах (24-32G) с двумя типами хранилища: блочная NFS и объектная sheepdog.

Общее

1) В osada.sh закомментировал все, что связано с созданием zfs-пулов. Вместо этого добавил создание каталогов и линков на /ev3, чтобы сохранить схему директорий.

### Создаем пулы
#zfs create ......

mkdir -p /var/lib/lxc /var/lib/nova/instances /var/lib/glance/images
mkdir -p /ev3/volumes /ev3/backups
ln -s /var/lib/lxc /ev3/services
ln -s /var/lib/nova/instances /ev3/instances
ln -s /var/lib/glance/images /ev3/images

chown -R nova:cinder /var/lib/nova/instances/
chmod g+w /var/lib/nova/instances/
chown -R glance: /var/lib/glance
#zfs share -a
systemctl restart nfs-kernel-server

2) Проверить, включена-ли в BIOS аппаратная виртуализация:

egrep '(vmx|svm)' /proc/cpuinfo

Если вывод есть - все хорошо.

3) Установить пакеты на всех гипервизорах

apt-get -y install ifenslave bridge-utils ethtool
apt-get -y install autoconf pkg-config build-essential liburcu-dev libtool libcorosync-common-dev libzookeeper-mt-dev libcpg-dev libcfg-dev yasm zookeeperd bridge-utils parted net-tools xemacs21-bin lxc git crudini ccrypt nfs-kernel-server openvswitch-switch sysvbanner

4) Отключаем вывод hung

echo 0 > /proc/sys/kernel/hung_task_timeout_secs

5) Добавляем sudo-права на ovt

cat > /etc/sudoers.d/ovt_sudoers << EOF
Defaults:ovt !requiretty
ovt ALL = (ALL) NOPASSWD:ALL
EOF

6) Настройка vim

echo -e "set clipboard=unnamedplus\nsyntax on\nset encoding=utf-8\nset termencoding=utf-8" > /root/.vimrc

7) Создаем шаблон объектного хранилища /etc/evstorage/evs.conf

ZCMAN="zookeeper:"
POOLS="/var/lib/evstorage"

8) Добавим в /etc/sysctl.conf

fs.file-max = 1024000
fs.inotify.max_queued_events = 1048576
fs.inotify.max_user_instances = 1048576
fs.inotify.max_user_watches = 1048576

9) Настроить доверенные хосты в /etc/pip.conf

[global]
trusted-host = pypi.python.org pypi.org files.pythonhosted.org git.openstack.org

10) Запускаем скрипт для sudoers служебных пользователей

for service in 'nova' 'neutron' 'cinder' 'glance' 'ceilometer'; do
      echo -e "Defaults:${service} !requiretty\n${service} ALL = (root) NOPASSWD: /usr/local/bin/${service}-rootwrap /etc/${service}/rootwrap.conf *" > ${DIST_DIR}/etc/sudoers.d/${service}_sudoers
chmod 440 ${DIST_DIR}/etc/sudoers.d/${service}_sudoers
done

11) Настройка часового пояса

dpkg-reconfigure tzdata

12) Скрипт osada был настроен на версию lxc 2.x, а на Debian 10 по-умолчанию идет lxc 3.x. В связи с этим конфигурация контейнеров меняется следующим образом:

#!/bin/bash
for cc in $(ls -1 /var/lib/lxc); do
    echo $cc
    sed -i 's/lxc.start.auto = 1/lxc.start.auto = 0/g' /var/lib/lxc/$cc/config
    sed -i 's/lxc.network/lxc.net.0/g' /var/lib/lxc/$cc/config
    sed -i 's/lxc.rootfs = \//lxc.rootfs.path = dir:\//g' /var/lib/lxc/$cc/config
    sed -i 's/lxc.rootfs.backend = dir/\n/g' /var/lib/lxc/$cc/config
    sed -i 's/lxc.tty /lxc.tty.max /g' /var/lib/lxc/$cc/config
    sed -i 's/lxc.utsname /lxc.uts.name /g' /var/lib/lxc/$cc/config
done 

13) В логе /var/log/messages на хостах проявляются ошибки монтирования

lxc apparmor="DENIED" operation="mount" error=-13

Чтобы это исправить, надо в файл /etc/apparmor.d/lxc/lxc-default-cgns надо добавить

mount options=(rw, nosuid, noexec, remount, relatime, ro, bind),

Затем:

systemctl restart apparmor

Cinder

14) Чтобы правильно монтировались NFS shares надо проверить на хосте в трех местах:

tail -n4 /var/lib/lxc/CNDR-0003/config
#!!#lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file 0 0
lxc.apparmor.profile = unconfined
lxc.cgroup.devices.allow = b 7:* rwm
lxc.cgroup.devices.allow = c 10:229 rwm
cat /etc/apparmor.d/lxc/lxc-default-cgns
...
mount fstype=nfs*,
mount options=(rw, nosuid, noexec, remount, relatime, ro, bind),
...
cat /etc/exports 
/ev3/volumes            172.17.98.0/24(rw,sync,fsid=0,no_root_squash,crossmnt,no_subtree_check,no_acl)
/ev3/backups            172.17.98.0/24(rw,sync,fsid=0,no_root_squash,crossmnt,no_subtree_check,no_acl)
/var/lib/glance/images  172.17.98.0/24(rw,sync,fsid=0,no_root_squash,crossmnt,no_subtree_check,no_acl)

15) Добавил NFS-шары на все ноды: /etc/exports

/ev3/volumes           172.17.98.0/24(rw,sync,no_subtree_check)
/ev3/backups           172.17.98.0/24(rw,sync,no_subtree_check)
/var/lib/glance/images 172.17.98.0/24(rw,sync,no_subtree_check)

16) На хостах в /etc/cinder/shares не должно быть ничего!

Nova

17) Нет сигнала о вызове присоединения диска в cinder-api.log
Решение: Добавить в секцию [cinder] файла /etc/nova/nova.conf на контейнерах:

volume_api_class=nova.volume.cinder.API

Источники