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

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

  1. Мало RAM (24-32G)
  2. На хосте установлена ОС 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
  1. Проверить, включена-ли в BIOS аппаратная виртуализация:
egrep '(vmx|svm)' /proc/cpuinfo

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

  1. Установить пакеты на всех гипервизорах
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
  1. Отключаем вывод hung
echo 0 > /proc/sys/kernel/hung_task_timeout_secs
  1. Добавляем sudo-права на ovt
cat > /etc/sudoers.d/ovt_sudoers << EOF
Defaults:ovt !requiretty
ovt ALL = (ALL) NOPASSWD:ALL
EOF
  1. Настройка vim
echo -e "set clipboard=unnamedplus\nsyntax on\nset encoding=utf-8\nset termencoding=utf-8" > /root/.vimrc
  1. Создаем шаблон объектного хранилища /etc/evstorage/evs.conf

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

  1. Добавим в /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
  1. Настроить доверенные хосты в /etc/pip.conf
[global]
trusted-host = pypi.python.org pypi.org files.pythonhosted.org git.openstack.org
  1. Запускаем скрипт для 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
    
  2. Настройка часового пояса

    dpkg-reconfigure tzdata
    
  3. Скрипт 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 
  1. В логе /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

    https://forum.proxmox.com/threads/lxc-apparmor-denied-operation-mount-error-13.36173/

Cinder

  1. Чтобы правильно монтировались 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)
  1. Добавил 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)
  1. На хостах в /etc/cinder/shares не должно быть ничего!

Nova

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

https://docs.openstack.org/cinder/pike/admin/ts-cinder-config.html

Источники

  1. Настройка NFS storage backend: https://docs.openstack.org/cinder/pike/admin/blockstorage-nfs-backend.html

aizaro@mail.ru