Vitaliy Filippov c6eeedda52 | ||
---|---|---|
ceph-deploy | ||
etc | ||
README.md | ||
all_vars.sample | ||
ceph.sh | ||
general.sh | ||
inventory_host.sample | ||
load-config.sh | ||
network.sh | ||
opennebula-ceph-cpds-clone.diff | ||
opennebula-ceph-ec-revert.patch | ||
opennebula-keys.sh | ||
opennebula.sh | ||
run.sh |
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
- И сделать, чтобы при подстановках проверялось, что никто не забыл установить подставляемые переменные
- Кстати, ещё были бы полезны функции работы с массивами - вывести через запятую, отфильтровать... - это скорее всего вопрос либо к самому языку написания "плейбуков", либо к тому, что используется как шаблонизатор