Как: Обновить 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

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

  1. Спасибо, за статью. Помогло.

  2. Не работает, состояние применяется, но не обновляет

    [DEBUG   ] LazyLoaded highstate.output
    ukm5_1:
    ----------
              ID: update
        Function: 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' &                                                                               
                                                                                                                                                                                                  
          Result: True
         Comment: onlyif condition is false
         Started: 15:35:19.891055
        Duration: 4239.552 ms
         Changes:   
    
    Summary for ukm5_1                                                                                                                                                                            
    ------------                                                                                                                                                                                  
    Succeeded: 1
    Failed:    0
    ------------
    Total states run:     1                                                                                                                                                                       
    Total run time:   4.240 s
    
  3. Достаточно просто
    «`
    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 only_upgrade=True && salt-call —local service.restart salt-minion’ &
    «`

  4. Will the same works for windows as well?

  5. @kk12345 for sure not as the commands used are *nix commands.
    My idea is to remotely schedule a job a few seconds in the future here.

  6. I had to invert the `onlyif `bash conditional expression (`[[ $(salt-call —local…` to `![[ $(salt-call —local…`). When I ran the expression as written in Bash, it was returning 0 for success, but it appears that Salt was evaluating that return code 0 as False, making the `onlyif` statement False in turn. Negating the expression made it work like a charm.

Добавить комментарий