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

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

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

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

Общее

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

Copy
### Создаем пулы #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 аппаратная виртуализация:

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

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

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

Copy
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

Copy
echo 0 > /proc/sys/kernel/hung_task_timeout_secs

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

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

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

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

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

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

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

Copy
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

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

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

Copy
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) Настройка часового пояса

Copy
dpkg-reconfigure tzdata

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

Copy
#!/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 на хостах проявляются ошибки монтирования

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

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

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

Затем:

Copy
systemctl restart apparmor

Cinder

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

Copy
tail -n4 /var/lib/lxc/CNDR-0003/config
Copy
#!!#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
Copy
cat /etc/apparmor.d/lxc/lxc-default-cgns
Copy
... mount fstype=nfs*, mount options=(rw, nosuid, noexec, remount, relatime, ro, bind), ...
Copy
cat /etc/exports
Copy
/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

Copy
/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 на контейнерах:

Copy
volume_api_class=nova.volume.cinder.API

Источники