Contents
- 1 Что такое управление конфигурациями?
- 2 Что такое Кукольный?
- 3 Какие есть версии Puppet?
- 4 Что может кукла?
- 5 Puppet DSL и парадигмы программирования
- 6 Модели развертывания инструментов управления конфигурацией
- 7 Как работает Кукла?
- 8 Кукольные блоки
- 9 Типы кукольных ресурсов
- 10 Что такое кукольные классы?
- 11 Декларация класса
- 12 Демо-установка NTP
Что такое управление конфигурациями?
Управление конфигурацией — это процесс поддержания программного обеспечения и компьютерных систем (например, серверов, хранилищ, сетей) в известном, желаемом и согласованном состоянии. Он также позволяет получить доступ к точной исторической записи состояния системы для целей управления проектами и аудита.
Системные администраторы в основном выполняют повторяющиеся задачи, такие как установка серверов, их настройка и т. д. Эти специалисты могут автоматизировать эту задачу, написав сценарии.
Однако это сложная работа, когда они работают с массивной инфраструктурой. Инструмент управления конфигурацией, такой как Puppet, был введен для решения таких проблем.
- Что такое управление конфигурациями?
- Что такое Кукольный?
- Какие есть версии Puppet?
- Что может кукла?
- Puppet DSL и парадигмы программирования
- Модели развертывания инструментов управления конфигурацией
- Как работает Кукла?
- Кукольные блоки
- Типы кукольных ресурсов
- Что такое кукольные классы?
- Декларация класса
- Демо-установка NTP
Что такое Кукольный?
Puppet — это инструмент управления системой для централизации и автоматизации процесса управления конфигурацией. Puppet также используется в качестве инструмента для развертывания программного обеспечения. Это программное обеспечение для управления конфигурацией с открытым исходным кодом, широко используемое для настройки серверов, управления, развертывания и оркестровки различных приложений и служб во всей инфраструктуре организации.
Puppet специально разработан для управления конфигурацией систем Linux и Windows. Он написан на Ruby и использует свой уникальный доменный язык ( DSL ) для описания конфигурации системы.
Какие есть версии Puppet?
Кукла представлена в двух версиях:
- Puppet с открытым исходным кодом : это базовая версия инструмента управления конфигурацией Puppet, также известного как Puppet с открытым исходным кодом. Он доступен непосредственно с веб-сайта Puppet и распространяется под лицензией системы Apache 2.0.
- Puppet Enterprise : коммерческая версия, которая предлагает такие функции, как отчеты о соответствии, оркестровка, управление доступом на основе ролей, графический интерфейс, API и инструменты командной строки для эффективного управления узлами.
Что может кукла?
Например, у вас есть инфраструктура примерно из 100 серверов. Ваша роль системного администратора заключается в обеспечении того, чтобы все эти серверы всегда были обновлены и работали с полной функциональностью.

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

Кукла выполняет следующие функции:
- Puppet позволяет вам определять отдельные конфигурации для каждого хоста.
- Инструмент позволяет вам постоянно контролировать серверы, чтобы подтвердить, существует ли требуемая конфигурация или нет, и она не изменена. Если конфигурация изменена, инструмент Puppet вернется к предварительно определенной конфигурации на хосте.
- Он также обеспечивает контроль над всей настроенной системой, поэтому централизованное изменение выполняется автоматически.
- Он также используется в качестве инструмента развертывания, поскольку он автоматически развертывает программное обеспечение в системе. Он реализует инфраструктуру в виде кода, поскольку политики и конфигурации записываются в виде кода.
Puppet DSL и парадигмы программирования
Прежде чем мы изучим Puppet DSL, давайте разберемся с парадигмами программирования:
Парадигма программирования — это стиль, который вы используете в компьютерном программировании.
Четыре типа парадигм:
- Императив.
- декларативный.
- Функциональный (который считается подмножеством этой декларативной парадигмы)
- Объектно-ориентированный.
Мы сосредоточимся на императиве и декларативе.
Императивные парадигмы:
Эта парадигма программирования выражает логику вычислений (что делать) и описывает поток управления (как делать).
Пример:
Предположим, вы идете в свой офис, вы заказываете такси и начинаете давать водителю пошаговые инструкции, пока не доберетесь до офиса. Указание того, что делать и как делать, является императивным стилем.
Декларативные парадигмы:
Эта парадигма программирования выражает логику вычислений (что делать) без описания потока управления (как делать).
Пример:
Предположим, вы едете в свой офис, вы заказываете такси Uber и указываете конечный пункт назначения (офис). Указание того, что делать, а не как делать, является декларативным стилем.
Парадигма | Что делать | Как сделать |
---|---|---|
Императив | Да | Да |
декларативный | Да | Нет |
Puppet использует декларативную парадигму программирования.
Puppet использует декларативный подход к программированию.
Пример: Создайте пользователя в системе:
Это можно сделать с помощью шаблона императивного программирования с помощью сценария оболочки: здесь мы указываем, как создать пользователя и какие команды использовать в операционной системе.
Однако это можно сделать с помощью шаблона декларативного программирования с помощью всего нескольких строк кукольного кода, доменного языка Puppet (DSL) и при этом добиться того же результата.
Модели развертывания инструментов управления конфигурацией
Существует две модели развертывания инструментов управления конфигурацией :
- Модель развертывания на основе push: инициируется главным узлом.
- Модель развертывания по запросу: инициируется агентами.
Модель развертывания на основе push:
В этой модели развертывания главный сервер передает конфигурации и программное обеспечение отдельным агентам. После проверки безопасного соединения мастер удаленно запускает команды на агентах. Например, Ansible и Salt Stack.
Модель развертывания на основе извлечения.
В этой модели развертывания отдельные серверы связываются с главным сервером, проверяют и устанавливают безопасное соединение, загружают свои конфигурации и программное обеспечение, а затем настраивают себя соответствующим образом — например, Puppet и Chef.
Как работает Кукла?
Puppet основан на модели развертывания Pull, в которой узлы агента регулярно проверяют каждые 1800 секунд главный узел, чтобы узнать, не нужно ли что-либо обновить в агенте. Если что-то нужно обновить, агент извлекает необходимые кукольные коды из мастера и выполняет необходимые действия.
Поясним это на примере:
Пример: Мастер – Настройка агента:
Хозяин:
Компьютер на базе Linux с установленным на нем программным обеспечением Puppet master. Он отвечает за поддержание конфигураций в виде кукольных кодов. Главным узлом может быть только Linux.
Агенты:
Целевые машины, управляемые марионеткой с установленным на них программным обеспечением агента марионетки.
Агент можно настроить для любой поддерживаемой операционной системы, такой как Linux, Windows, Solaris или Mac OS.
Связь между мастером и агентом устанавливается с помощью безопасных сертификатов.

Связь между Мастером и Агентом:
Шаг 1) После установления соединения между агентом и мастером агент Puppet отправляет данные о своем состоянии на главный сервер Puppet. Они называются фактами: эта информация включает в себя имя хоста, сведения о ядре, IP-адрес, сведения об имени файла и т. д.…

Шаг 2) Puppet Master использует эти данные и составляет список с конфигурацией, которая будет применена к агенту. Этот список настроек, которые необходимо выполнить для агента, называется каталогом. Это может быть изменено, например, установкой пакета, обновлением или удалением, созданием файловой системы, созданием или удалением пользователя, перезагрузкой сервера, изменением конфигурации IP и т. д.
Шаг 3) Агент использует этот список конфигурации для применения любых необходимых изменений конфигурации на узле.
Если в конфигурации нет отклонений, Агент не выполняет никаких изменений в конфигурации и оставляет узел работать с той же конфигурацией.

Шаг 4) Как только это будет сделано, узел отчитывается перед мастером марионеток, указывая, что конфигурация была применена и завершена.
Кукольные блоки
Puppet обеспечивает гибкость интеграции отчетов со сторонними инструментами с помощью Puppet API.
Четыре типа строительных блоков Puppet:
- Ресурсы
- Классы
- Манифест
- Модули
Кукольные ресурсы:
Ресурсы Puppet являются строительными блоками Puppet.
Ресурсы — это встроенные функции , которые запускаются в серверной части для выполнения необходимых операций в puppet.
Кукольные классы:
Комбинация различных ресурсов может быть сгруппирована в единый блок, называемый классом.
Кукольный манифест:
Манифест — это каталог, содержащий файлы puppet DSL. Эти файлы имеют расширение .pp. Расширение .pp означает кукольную программу. Кукольный код состоит из определений или объявлений классов Puppet.
Кукольные модули:
Модули представляют собой набор файлов и каталогов, таких как манифесты, определения классов. Это повторно используемые и совместно используемые единицы в Puppet.
Например, модуль MySQL для установки и настройки MySQL или модуль Jenkins для управления Jenkins и т. д.
Кукольные модули
Типы кукольных ресурсов
В общем, система состоит из файлов, пользователей, служб, процессов, пакетов и т. д. В Puppet это называется ресурсами. Ресурсы являются фундаментальными строительными блоками в
Марионетка. Все операции с марионеточными агентами выполняются с помощью марионеточных ресурсов.
Кукольные ресурсы — это готовые инструменты, которые используются для выполнения различных задач и операций на любой поддерживаемой платформе. Мы можем использовать один марионеточный ресурс для выполнения определенной задачи или мы можем использовать несколько марионеточных ресурсов вместе для развертывания некоторых сложных конфигураций приложений.
Ресурсы могут иметь разные типы. Puppet использует ресурсы и типы ресурсов для описания конфигурации системы.
Существует три вида типов ресурсов:
- Кукольное ядро или встроенные типы ресурсов.
- Типы ресурсов, определенные марионеткой.
- Кукольные пользовательские типы ресурсов.
Puppet core или встроенные типы ресурсов:
Основные или встроенные типы ресурсов — это предварительно созданные типы ресурсов puppet, поставляемые с программным обеспечением puppet. Все основные или встроенные типы ресурсов Puppet написаны и поддерживаются командой Puppet.
Типы ресурсов, определенные марионеткой:
Определенные типы ресурсов — это облегченные типы ресурсов, написанные на декларативном языке Puppet с использованием комбинации существующих типов ресурсов.
Пользовательские типы ресурсов Puppet:
Пользовательские типы ресурсов — это полностью настраиваемые типы ресурсов, написанные на Ruby.
Давайте рассмотрим типы ресурсов марионеток…
В терминале введите следующую команду, чтобы отобразить список соответствующих подкоманд Puppet:
Puppet --help
В нашем случае нас интересует подкоманда « ресурс », которую мы будем использовать для поиска информации о встроенных типах ресурсов марионетки.
В терминале введите любую из следующих команд, чтобы отобразить список действий , связанных с подкомандой puppet « ресурс »:
Puppet help resource Puppet resource --help
В этом случае у нас есть ресурс как подкоманда и –types как действие.
Puppet имеет 49 встроенных основных типов ресурсов.
В терминале введите следующую команду, чтобы отобразить список доступных встроенных типов ресурсов марионеток:
puppet resource –types
Каждый тип поддерживает список атрибутов . Эти атрибуты предоставляют подробное описание, которое Puppet использует для управления ресурсом.
Чтобы узнать все атрибуты, связанные с типом ресурса puppet, используйте следующую команду:
puppet describe <resource type name>
В параметрах будут перечислены все доступные атрибуты для этого типа ресурса.
марионетка описать пакет
Новичку сложно понять и связать множество неуправляемых файлов кода марионеток. Здесь нам нужна некоторая группировка, чтобы связать операции. Цель состоит в том, чтобы решить одну проблему, например, все операции, необходимые для настройки ssh на сервере или службы ntp, или полного веб-сервера, или сервера базы данных с нуля.
Что такое кукольные классы?
Классы марионеток — это набор ресурсов марионеток, объединенных в единое целое.
Puppet представила классы, чтобы сделать структуру многократно используемой и организованной.
Во-первых, нам нужно определить класс, используя синтаксис определения класса; классы должны быть уникальными и могут быть объявлены только один раз с одним и тем же именем:
class <class-name> { <Resource declarations> }
Пример:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
Пока мы только определили класс, но нигде его не использовали. Это означает, что этот код, который мы написали, никогда не будет выполнен, если мы не объявим этот класс в другом месте.
Декларация класса
Чтобы использовать определенный класс в коде, используйте ключевое слово include .
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
Давайте разберемся в этом на реальном кейс-сценарии.
Демо-установка NTP
Во-первых, убедитесь, что пакет NTP еще не присутствует на сервере, следующая команда ничего не вернет, если на сервере нет telnet:
rpm -qa | grep -i ntp
Как мы видим, пакет NTP уже присутствует на сервере. Удалим существующий пакет NTP:
yum remove ntp
После удаления пакета убедитесь, что файл ntp.conf не существует:
ls -lrt /etc/ntp.conf
Убедитесь, что служба ntp не существует, выполнив следующую команду:
systemctl status ntp
Создайте новый файл .pp, чтобы сохранить код. Из командной строки:
vi demontp.pp
Перейдите в режим вставки, нажав i на клавиатуре.
Введите следующий код, чтобы создать новый файл:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } }
После завершения редактирования: нажмите esc
Чтобы сохранить файл, нажмите :wq!
Следующим шагом является проверка кода на наличие синтаксических ошибок. Выполните следующую команду:
puppet parser validate demontp.pp Убедитесь, что вы переключились на
root
, чтобы завершить тест без ошибок, выполнив команду:
su root
Тест — это следующий шаг в процессе создания кода. Выполните следующую команду, чтобы выполнить дымовой тест:
Puppet applies demontp.pp --noop
Последний шаг — запустить марионетку в реальном режиме и проверить вывод.
puppet apply demontp.pp
Puppet ничего не выполнял, потому что демонстрационный класс был только что определен , но не объявлен .
Итак, пока вы не объявите класс марионетки, код не будет применен.
Давайте объявим демонстрационный класс внутри того же кода, используя имя класса include в конце кода:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } } # Class Declaration include ntpconfig
Снова проверьте , нет ли в коде синтаксических ошибок. Выполните следующую команду:
puppet parser validate demontp.pp
Убедитесь, что вы переключились на root , чтобы завершить тест без ошибок, выполнив команду:
su root
Тестирование — это следующий шаг в процессе создания кода. Выполните следующую команду, чтобы выполнить дымовой тест:
Puppet apply demontp.pp --noop
Последний шаг – запустить марионетку в реальном режиме и проверить вывод.
puppet apply demontp.pp
На этот раз код применяется, потому что класс был определен, а затем объявлен.
Убедитесь, что ntp.conf уже существует:
ls -lrt /etc/ntp.conf
Убедитесь, что служба ntp запущена, выполнив следующую команду:
статус systemctl ntpd