Как: Обновить Salt-Миньоны и Не Потерять Их

Если вы попробуете обновить salt-миньоны с salt-мастера, в большинстве случаев salt-мастер, скорее всего, потеряет связь с миньонами.

При потерянной связи вам придется самим заходить на каждый хост и рестартовать сервис salt-minion вручную, чтобы заставить миньонов снова общаться с мастером.

Проблема вызвана тем, что сервис salt-minion часто сам не перезапускается после обновления.

Дельный Совет: А вы знали что с помощью стэйта file.managed можно скачивать файлы по HTTP/HTTPS даже с неизвестным source_hash? Читать далее →

В этой статье я покажу как безопасно обновить salt-миньоны с salt-мастера без потери связи между ними.

Обновить Salt-Master

В первую очередь необходимо обновить salt-master.

Порядок обновления: В соответствии с документацией, в первую очередь всегда необходимо обновлять мастера, так как не гарантируется обратная совместимость для миньонов более новых версий чем их мастер.

Обновить salt-master на CentOS, RHEL и т.п.:

$ sudo yum update salt-master

Обновить salt-master на Debian, Ubuntu, Linux Mint и т.п.:

$ sudo apt-get update salt-master

Чтобы узнать версию salt-мастера, выполните:

$ salt-master --version

Обновить Salt-Minion

В данный момент не существует нормального способа обновления salt-миньонов с salt-мастера без потери связи между ними.

Но вы можете создать salt-state, который будет отправлять специальную шелл-команду на salt-миньон и выполнять ее в фоне.

Эта шелл-команда будет обновлять и перезапускать сервис salt-minion с помощью локально вызова salt-call.

После того, как сервис salt-minion будет перезапущен, связь с salt-мастером будет успешно восстановлена.

Дельный Совет: Каждый DevOps должен знать основы работы с Git. И вы можете освоить их прямо сейчас! Читать далее →

В то же время, данный salt-state предварительно проверяет наличие новой версии пакета salt-minion, чтобы избежать перезапуска сервиса salt-minion без надобности.

Создайте следующий salt-state на мастере и примените его к миньонам, чтобы безопасно обновить их:

Upgrade Salt-Minion:
  cmd.run:
    - name: |
        exec 0>&- # close stdin
        exec 1>&- # close stdout
        exec 2>&- # close stderr
        nohup /bin/sh -c 'salt-call --local pkg.install salt-minion && salt-call --local service.restart salt-minion' &
    - onlyif: "[[ $(salt-call --local pkg.upgrade_available salt-minion 2>&1) == *'True'* ]]" 

Чтобы узнать текущую версию ваших salt-миньонов с salt-мастера, выполните:

$ sudo salt '*' test.version