Файловый сервер
Тема дорожной карты · SaltStack
Файловый сервер — встроенный компонент мастера, который раздаёт миньонам файлы: SLS-состояния, Jinja-шаблоны, конфиги, скрипты и небольшие архивы. Отдельный NFS, HTTP-сервер или rsync не нужны, так как файлы передаются по шифрованному ZeroMQ-каналу (порт 4506), через который передаются и результаты команд. Миньон запрашивает файлы по URL вида salt://nginx/files/nginx.conf. Сервер модульный: за физическое хранение файлов отвечают бэкенды — roots (каталоги на диске мастера, настраиваются опцией file_roots), gitfs (git-репозитории), а также s3fs, hgfs, svnfs, minionfs. Бэкенды перечислены в опции fileserver_backend конфига мастера и опрашиваются по порядку: файл отдаёт первый бэкенд, у которого он найден. Всё дерево файлов разбито на окружения (saltenv), такие как base, dev, prod.
Как это работает
Когда миньон рендерит состояние с source: salt://nginx/files/nginx.conf, он отправляет мастеру запрос на получение файла по указанному пути и saltenv. Мастер проходит по списку fileserver_backend, находит файл и отдаёт его по частям вместе с хешем. Миньон кэширует полученные файлы в /var/cache/salt/minion/files/<saltenv>/ и при следующем запуске сравнивает хеши — неизменённые файлы не скачиваются повторно. Работать с сервером можно напрямую через execution-модуль cp: salt '*' cp.get_file salt://scripts/check.sh /usr/local/bin/check.sh копирует файл, а salt '*' cp.list_master показывает все доступные файлы. Для удалённых бэкендов (gitfs, s3fs) мастер держит собственный кэш и периодически его обновляет; форсировать обновление можно командой salt-run fileserver.update. Сами SLS-файлы, которые миньон компилирует при state.apply, приходят по этому же механизму — файловый сервер лежит в основе всей системы состояний.
Когда применять
Файловый сервер работает всегда, выбор сводится к бэкенду. roots — самый простой вариант: каталог /srv/salt на мастере, прозрачная отладка, подходит для одного мастера и небольшой команды. gitfs — когда конфигурация живёт в git, изменения проходят ревью через merge request, а ветки отображаются в окружения. Комбинация fileserver_backend: [roots, gitfs] позволяет держать основную базу в git, а локальные патчи — на диске мастера, причём roots первым в списке перекроет одноимённые файлы из git. Для раздачи мелких артефактов (скрипты, unit-файлы, конфиги) salt:// — идеальный канал; крупные бинарники (образы, дистрибутивы в сотни мегабайт) лучше класть во внешнее хранилище и качать состоянием file.managed с source: https://… — гонять гигабайты через мастер медленно и накладно для него самого.
Типичные ошибки
Частая ошибка — путать salt://-пути с путями файловой системы: salt://nginx/files/nginx.conf отсчитывается от корня окружения (например, /srv/salt/), а не от /. Вторая — настроить gitfs_remotes, но забыть добавить gitfs в fileserver_backend: бэкенд просто не опрашивается, и файлы «не находятся» без внятной ошибки. Третья — дублирование путей: если один и тот же файл лежит в нескольких корнях file_roots или в нескольких бэкендах, молча побеждает первый по порядку, и правки «не того» экземпляра ни на что не влияют. Наконец, файловый сервер — не место для секретов: любой принятый миньон может запросить любой файл любого окружения, разграничения доступа по миньонам здесь нет — чувствительные данные передают через pillar.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- merge /mɜːrdʒ/ один слог, «мёрдж», без русского «е» разбор: Рунглиш vs английский: когда что уместно
- remote /rɪˈmoʊt/ ударение на второй слог разбор: Что носители скажут иначе: айтишник, сеньор, проект
- result /rɪˈzʌlt/ ударение на второй слог разбор: Behavioral questions и метод STAR
- component /kəmˈpoʊnənt/ ударение на второй слог разбор: Немые буквы и ударение: cache, queue, suite, height
- review /rɪˈvjuː/ ударение на второй слог; «рЕвью» — рунглиш разбор: Глаголы: задеплоить, пофиксить, замержить, заапрувить
- command /kəˈmɑːnd/ ударение на второй слог разбор: Английский Linux и терминала
- git /ɡɪt/ «гит», твёрдое «г» разбор: Английский Git и code review