Bash "playbooks" for Ceph + OpenNebula
Go to file
Vitaliy Filippov c6eeedda52 Add inventory 2023-08-29 13:56:20 +03:00
ceph-deploy Make mon_host a template 2023-08-29 13:56:20 +03:00
etc Remove hosts.add from here 2023-08-29 13:56:20 +03:00
README.md Add inventory 2023-08-29 13:56:20 +03:00
all_vars.sample Add inventory 2023-08-29 13:56:20 +03:00
ceph.sh Add inventory 2023-08-29 13:56:20 +03:00
general.sh Add inventory 2023-08-29 13:56:20 +03:00
inventory_host.sample Add inventory 2023-08-29 13:56:20 +03:00
load-config.sh Add inventory 2023-08-29 13:56:20 +03:00
network.sh Remove nm earlier 2023-08-29 13:56:20 +03:00
opennebula-ceph-cpds-clone.diff Use object-size=512K for RBD clones 2023-08-29 13:56:20 +03:00
opennebula-ceph-ec-revert.patch Add the cpds-clone patch 2020-02-04 21:31:07 +03:00
opennebula-keys.sh Add inventory 2023-08-29 13:56:20 +03:00
opennebula.sh Add inventory 2023-08-29 13:56:20 +03:00
run.sh Add inventory 2023-08-29 13:56:20 +03:00

README.md

"Плейбуки" на баше для конфигурации Ceph + OpenNebula

Почему на баше? Потому что с ансиблом бесит yaml программирование!

Хотя на баше, конечно, тоже не совсем красиво местами.

Логика та же: можно запускать многократно.

Переменные указываются в файле config/all_vars (предполагается, что он подключается из другого репозитория), пример - в all_vars.sample.

В config/inventory/ перечисляются хосты, на которых это выполняется. Имя каждого файла должно быть равно соответствующему hostname, внутри файла должны быть две переменные play_host="внешний ip" и int_ip="внутренний ip" (пример наполнения в inventory_host.sample).

Готово

  • Вынести в отдельный скрипт настройку ssh-ключей на нодах
  • ethtool -C eth10g rx-usecs 0
  • systemctl mask emergency.service, systemctl mask emergency.target
  • На все ноды поставить qemu 4.x из sid (там virtio-blk discard=unmap умеет)
  • Переименовать сеть в eth1gX + eth10gX (X=1,2), иначе имена сетевых интерфейсов едут при перестановке NVMe-шек
  • Настроить live миграцию при reschedule: 612300b191/src/scheduler/etc/sched.conf (L99)
  • Везде убрать DHCP
  • Удалять network-manager
  • Везде прописать все ноды в /etc/hosts
  • В known_hosts также добавлять внутренние IP
  • Добавить passwordless ssh от рута между всеми серверами (чисто для удобства, oneadmin и так есть)
  • Шаблонизировать mon_initial_members в ceph.conf
  • Добавить аналог inventory (перечень хостов с их переменными) и на него пересадить генерацию /etc/hosts

TODO

  • sensors & sensors-exporter
  • Убрать quiet из опций GRUB
  • Мониторинг и алерты - пока Prometheus+Grafana настроены вручную на 172.31.1.13 ("подоконник")
  • Написать отдельно скрипты для начальной настройки кластера (создание ceph-deploy, создание пулов в цефе, подключение датастора к opennebula). Оные выполняются только один раз на весь кластер, поэтому отдельно.
  • Сделать на всех хостах LACP из 2x 10GbE сетевых интерфейсов
  • Попробовать технологизировать "баш-плейбуки". Нужно не так много вещей, но некоторые могли бы быть действительно полезны, например:
    • Функция вида: Скопировать файл на хост и в зависимости от того, отличался ли он до этого, выполнить команду/команды
    • Аналог ansible lineinfile - проверить наличие строки/строк в файле и добавить, если их там нет. В вариантах "просто слить два файла построчно в любом порядке" и "заменить строчку, удовлетворяющую регэкспу"
    • Полечить отступы в heredoc (в баше вложенные heredoc ломаются с отступами)
    • Можно даже попробовать сделать всё это не на баше, но пока что баш выглядит проще всего, на то и шелл - команды дёргать
    • Придумать, на чём красивее шаблонизировать конфиги (НО ТОЛЬКО НЕ НА JINJA!!!) - пока что это вообще envsubst
    • И сделать, чтобы при подстановках проверялось, что никто не забыл установить подставляемые переменные
    • Кстати, ещё были бы полезны функции работы с массивами - вывести через запятую, отфильтровать... - это скорее всего вопрос либо к самому языку написания "плейбуков", либо к тому, что используется как шаблонизатор