image


Всем привет! В данной статье хочу поделиться с вами впечатлениями от настройки Puppet для конфигурации Windows-серверов.


В целом, задача заключалась в следующем: организовать процесс автоматической доставки и установки патчей для обновления удаленных серверов. Выбирали из известных менеджеров конфигураций, главное требование к которым — поддержка Windows на высоком уровне. Сразу скажу, что от Puppet решили отказаться из-за высокого порога вхождения, pull подхода и необходимости знания Ruby. Но уж очень хочется поделиться тем, что получилось.



Введение


Puppet обладает коммуникационной моделью (архитектурой) «мастер-агент», причем операционной системой мастера не может быть Windows. Для управления Windows-агентами, на целевых машинах должно быть установлено ПО, которое представляет собой .msi установщик.


Puppet оперирует хостнеймами и взаимодействие между мастером и агентами осуществляется по протоколу HTTPS, из чего следует, что присутствуют такие зависимости, как веб-сервер Apache (для мастера), а также не удастся избежать взаимодействия с сертификатами и их настройки.


Тестовая инфраструктура


  • Виртуальная машина с ОС Ubuntu 16.04 LTS для установки Puppet-мастера.
  • Целевые машины с ОС Windows, которыми, собственно, и нужно управлять.

Установка


Установка состоит из двух частей, по количеству архитектурных компонент.


Мастер


Установка мастера описана здесь. Единственное, что во время установки не завелось – после перегенерации SSL сертификатов Apache перестал запускаться.


image![image](https://imagebin.ca/v/3NbWzYZ942C3)


После обращения к журналу событий становится понятно, в чем проблема – сертификата с таким именем, как в конфигурационном файле /etc/apache2/sites-enabled/puppetmaster.conf, не существует. Заходим, исправляем имя (в моем случае просто puppet), готово. Кстати, посмотреть на сертификат мастера можно здесь — /var/lib/puppet/ssl/certs.


Агенты


При установке Windows-агентов есть вероятность, что что-то пойдет не так. Самое главное правило – версия Puppet-мастера всегда должна быть сопоставима (или больше) версии Puppet-агента.
В самом начале процесса установки можно увидеть, что включает в себя установщик.


image


Конкретнее о многих из этих компонентов можно узнать из документации. Далее указываем адрес мастера и готово.


Как можно увидеть, завершилось ли все успехом? Заходим в Event Viewer и смотрим на сообщения, где источником является Puppet. Пример ранее упомянутой проблемы несовместимости версий мастера и агента приведен ниже.


image


Если все прошло нормально, заключительным этапом является подпись сертификата агента на мастере.


puppet cert list --all
cert sign <agent-hostname>

Пример Puppet-манифеста


# манифесты содержат набор инструкций для применения на целевых машинах
# класс определяет блок действий, которые необходимо применить

# создаем класс с описанием того, что файл должен существовать
# и иметь определенное содержимое
class action::windows {
    file { 'c:\\Temp\\foo.txt':
        ensure   => present,
        content  => 'This is some text in my file'
    }
}

# класс для обработки всех машин, кроме Windows
class action::default {
    notify{ "Operating system $::operatingsystem not supported": }
}

# анализируем факт osfamily
# и в зависимости от этого выполняем нужные действия
case $::osfamily {
    'windows': { include action::windows }
    default: { include action::default }
}

Чтобы применить манифесты на мастере: puppet apply <manifest-name>.
На агентах: puppet agent --test.


Заключение


Как я писал ранее, для поставленной задачи Puppet не был выбран главным образом из-за того, что использует pull подход к управлению, но, мое мнение — стабильность и возраст системы во многих ситуациях важнее. К тому же, для push подхода существует mcollective.


Полезные источники


  1. ssl background
  2. puppet agent/master communications
  3. puppet architecture overview
  4. puppet official modules
  5. installation
  6. tutorial presentation
  7. mcollective

Поделиться с друзьями
-->

Комментарии (21)


  1. Fanta
    31.05.2017 15:11

    Сразу скажу, что от Puppet решили отказаться из-за высокого порога вхождения, pull подхода и необходимости знания Ruby. Но уж очень хочется поделиться тем, что получилось.

    так кто победил ?


    1. trueneu
      31.05.2017 21:38

      Судя по описанным минусам, рискну предположить, что ansible.


      1. tikhoa
        01.06.2017 13:04

        У ansible не так тривиальна настройка для windows, что немного отталкивает.


    1. tikhoa
      31.05.2017 21:39

      Победил saltstack, хотя нужно смотреть что будет дальше.


      1. kt97679
        31.05.2017 23:06

        На всякий случай вот мои впечатления от солта: https://habrahabr.ru/post/315012/#comment_9905944


        1. tikhoa
          01.06.2017 13:01

          Именно этот комментарий мне и показывали в качестве контраргумента. Не бывает идеальной системы :)


      1. DonAlPAtino
        01.06.2017 10:56

        Вы уж напишите потом статью на тему saltstack и windows. Тоже хочется завести виндовую инфраструктуру на что-то нормальное. Но вся инфа обычно на тему «рулим линуксами», в виндовые админы кроме " а давай купим Sytem Center за лимон, а потом будет с ним мучиться" ничего предложить не могут.


  1. chemtech
    31.05.2017 19:26

    puppet cert list --all
    

    view all certificate requests, signed and unsigned

    puppet cert list
    

    review the unsigned requests


    1. tikhoa
      31.05.2017 21:40

      К чему это?


      1. chemtech
        01.06.2017 03:44

        Для просмотра неподписанных сертификатов лучше использовать

        puppet cert list
        

        Если использовать
        puppet cert list --all
        

        и у вас много много сертификатов, то можно долго искать нужный, т.к. отображаются и подписанные и неподписанные сертификаты


  1. Shtsh
    31.05.2017 21:12

    А почему вы не используете puppetserver? Это вызвано какими-то обстоятельствами или просто незнанием?

    что у агентов и мастера есть такие зависимости, как веб-сервер Apache

    простите, но это бред, особенно про агенты.

    Чтобы применить манифесты на мастере: puppet apply <manifest-name>

    Почему не использовать puppet agent на мастере? Это вызвано архитектурными соображениями или просто захотелось из отдельных файлов разворачивать?

    Кстати, возможно, вам будет лучше использовать автоматическое подписывание сертификатов клиентов. Так тоже можно.


    1. tikhoa
      31.05.2017 22:03

      Описанное в этой статье основано лишь на том, что представлено в документации и никак не соотносится с моими фантазиями. Да, как и писалось в самом начале, на Puppet был только брошен взгляд, поэтому глубокой экспертизы в нем нет.
      Касательно зависимости для агентов — согласен, мой косяк. Именно это подразумевалось для мастера.


      Почему не использовать puppet agent на мастере? Это вызвано архитектурными соображениями или просто захотелось из отдельных файлов разворачивать?

      Поправьте если не так, но нигде не описано, что так нельзя делать. Смысл был в том, чтобы управлять windows-серверами, где мастер в принципе не может быть установлен.


  1. utoplenick
    31.05.2017 21:42
    +1

    А о чем статья то? Какая версия паппета разворачивалась? Завелся ли mcollective на винде и если да то как? И что же не так просто как кажется?


    1. tikhoa
      31.05.2017 21:49

      Статья для тех, кому хочется быстрее начать и о том, какие проблемы встретились на этапе конфигурации.
      Относительно версии — 3.8.6, но статья не об этом, поэтому не указывал.
      Mcollective если честно так и не довелось попробовать.


      1. utoplenick
        01.06.2017 14:02

        По написаному много вопросов, вот сейчас конкретно в эту минуту на рабочей тачке с паппет сервером не наблюдаю у него в зависимостях апача, зачем вводить в заблуждение тех, как вы говорите, " кому хочется быстрее начать", проблем в базовой конфигурации с использованием простых манифестов вообще не наблюдается и порог вхождения минимальный, руби знать, кстати говоря совсем не обязательно. Вот когда конфигурация разрастается и хочется начать делать все по уму, использовать hiera и environmets вот тогда нужно посидеть и поучить матчасть. Вы извините, но по моему мнению ваш очерк скорее вводит в заблуждение нежели на что-то проливает свет.


        1. tikhoa
          01.06.2017 15:17

          Возможно, кто-то с Вами согласится, не спорю.


          на рабочей тачке с паппет сервером

          Puppet-сервер выходит за рамки описанного, варианты конфигурации уже совсем другое дело, почитать можно здесь, например.


          руби знать, кстати говоря совсем не обязательно

          Тут мое мнение аналогично: если думать на перспективу, с таким подходом далеко не уедешь.


          проблем в базовой конфигурации с использованием простых манифестов вообще не наблюдается

          В моем случае, как видите, они появились. Сначала проблема с сертификатами возникла, а затем я долго не мог понять, что же не работает: из сообщений не так очевидна несовметимость версий мастера и агентов. Вообще я не являюсь приверженцем конкретного CM инструмента (главное, чтобы задачи свои выполнял).


          По написаному много вопросов

          Я за любой фидбек — задавайте вопросы, вместе разберемся. Мне, как новичку в puppet, очень интересна данная тема.


          1. utoplenick
            01.06.2017 18:18

            Puppet-сервер выходит за рамки описанного, варианты конфигурации уже совсем другое дело, почитать можно здесь, например.

            Не путайте теплое с мягким, не буду говорить про 4-й паппет, не вникал еще в него, но раз уж вы сказали что разворачивали версию 3.8.6, то пакет puppet-server есть не что иное как мастер запущенный на встроенном веб-сервере webrick, мне на текущий момент при парке в 110 машин вполне хватает. И ни за какие рамки это не выходит, тупо ставится пакет из репы:
            yum install puppet-server
            

            после чего тупо запускатся демон:
            systemctl start puppetmaster.service
            

            и все работает.
            Где здесь порог вхождения? Несовместимость версий очевидна из банальной логики: если ты разворачиваешь все в первый раз бери все одной и той же версии.
            Какие у меня к вам могут быть вопросы как к новичку паппет? Я сейчас бьюсь с запуском mcollective под виндой, клюнул на заголовок статьи, думал что-то полезное прочесть, а тут такая лажа.
            Вот вы пишите в статье:
            В самом начале процесса установки можно увидеть, что включает в себя установщик.

            А на скриншоте явно написано что этио всего лишь список лицензий, и это не значит что все это будет установлено. Я вот например в виндовом установщике 3.8.6. mcollective не обнаружил, а погуглив узнал, что он включается только в поставку четвертого паппета и апгрейдить весь мой зоопарк ради десятка виндовых тачек ну не стоИт совсем. Что посоветуете?


            1. tikhoa
              01.06.2017 22:39

              Пожалуйста, переходите по ссылкам (и, естественно, не сразу закрывайте) во время чтения, и тогда такие обсуждения станут меньше.
              Когда напишете свою статью о mcollective, я по достоинству ее оценю. И, возможно, даже не буду писать, что все очевидно.


              1. utoplenick
                02.06.2017 09:15

                Если вы считаете, что написаное Вами тянет на статью, то мне Вас искренне жаль.


  1. Pariah
    01.06.2017 12:49

    При выборе систем конфигурации на PowerShell DSC не смотрели?


    1. tikhoa
      01.06.2017 12:51

      Даже и не знал о существовании такого. Спасибо за наводку!