Прежде чем мы изучим Puppet, давайте разберемся:
Что такое управление конфигурацией?
Управление конфигурацией — это процесс поддержания программного обеспечения и компьютерных систем (например, серверов, хранилищ, сетей) в известном, желаемом и согласованном состоянии. Это также позволяет получить доступ к точной исторической записи о состоянии системы для целей управления проектами и аудита.
Системные администраторы в основном выполняют повторяющиеся задачи, такие как установка серверов, настройка этих серверов и т. Д. Эти специалисты могут автоматизировать эту задачу, написав сценарии.
Тем не менее, это трудная работа, когда они работают над массивной инфраструктурой. Инструмент управления конфигурацией, такой как Puppet, был представлен для решения таких проблем.
- Что такое управление конфигурацией?
- Что такое кукольный?
- Какие версии Puppet?
- Что может сделать кукольный?
- Puppet DSL и парадигмы программирования
- Модели развертывания инструментов управления конфигурацией
- Как работает Puppet?
- Кукольные блоки
- Типы кукольных ресурсов
- Что такое кукольные классы?
- Декларация класса
- Демонстрация установки NTP
Что такое кукольный?
Puppet — это инструмент управления системами DevOps с открытым исходным кодом для централизации и автоматизации процесса управления конфигурацией.
Он используется для настройки, управления, развертывания и управления различными приложениями и службами во всей инфраструктуре организации.
Puppet специально разработан для управления конфигурацией систем Linux и Windows. Она написана на Ruby , и использует свой уникальный D omain S pecific L anguage (DSL) , чтобы описать конфигурацию системы.
Какие версии Puppet?
Puppet поставляется в двух версиях:
- Open Source Puppet : это базовая версия инструмента управления конфигурацией Puppet, также известного как Open Source 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.
Модель развертывания на основе извлечения.
In this deployment model, individual servers contact a master server, verify and establish a secure connection, download their configurations and software and then configure themselves accordingly — for example, Puppet and Chef.
How Puppet works?
Puppet is based on a Pull deployment model, where the agent nodes check in regularly after every 1800 seconds with the master node to see if anything needs to be updated in the agent. If anything needs to be updated the agent pulls the necessary puppet codes from the master and performs required actions.
Let’s explain it by an example:
Example: Master — Agent Setup:
The Master:
A Linux based machine with Puppet master software installed on it. It is responsible for maintaining configurations in the form of puppet codes. The master node can only be Linux.
The Agents:
The target machines managed by a puppet with the puppet agent software installed on them.
The agent can be configured on any supported operating system such as Linux or Windows or Solaris or Mac OS.
The communication between master and agent is established through secure certificates.
Communication between the Master and the Agent:
Step 1) Once the connectivity is established between the agent and the master, the Puppet agent sends the data about its state to the Puppet master server. These are called Facts: This information includes the hostname, kernel details, IP address, file name details, etc.…
Шаг 2) Puppet Master использует эти данные и составляет список с конфигурацией, которая будет применена к агенту. Этот список конфигурации, выполняемой на агенте, называется каталогом. Это может быть изменено, например, установка, обновление или удаление пакета, создание файловой системы, создание или удаление пользователя, перезагрузка сервера, изменения конфигурации IP и т. Д.
Шаг 3) Агент использует этот список конфигурации для применения любых необходимых изменений конфигурации на узле.
Если в конфигурации нет смещений, агент не выполняет никаких изменений конфигурации и оставляет узел для работы с той же конфигурацией.
Шаг 4) Как только это будет сделано, узел отчитывается перед марионеточным мастером, указывая, что конфигурация была применена и завершена.
Кукольные блоки
Puppet обеспечивает гибкость интеграции отчетов со сторонними инструментами с помощью API Puppet.
Четыре типа кукольных строительных блоков
- Ресурсы
- Классы
- манифест
- Модули
Кукольные Ресурсы:
Кукольные Ресурсы являются строительными блоками Puppet.
Ресурсы — это встроенные функции, которые выполняются на заднем конце для выполнения необходимых операций в Puppet.
Кукольные Классы:
Комбинация различных ресурсов может быть сгруппирована в единое целое, называемое классом.
Кукольный Манифест:
Manifest — это каталог, содержащий кукольные DSL-файлы. Эти файлы имеют расширение .pp. Расширение .pp означает кукольную программу. Код марионетки состоит из определений или объявлений классов марионеток.
Кукольные модули:
Модули — это набор файлов и каталогов, таких как Манифесты, Определения классов. Они являются повторно используемыми и разделяемыми единицами в Puppet.
Например, модуль MySQL для установки и настройки MySQL или модуль Jenkins для управления Jenkins и т. Д.
Типы кукольных ресурсов
Обычно система состоит из файлов, пользователей, служб, процессов, пакетов и т. Д. В Puppet это называется ресурсами. Ресурсы являются основными строительными блоками в
Кукольный. Все операции над марионеточными агентами выполняются с помощью марионеточных ресурсов.
Ресурсы Puppet — это готовые инструменты, которые используются для выполнения различных задач и операций на любой поддерживаемой платформе. Мы можем использовать один ресурс марионеток для выполнения определенной задачи, или мы можем использовать несколько ресурсов марионеток вместе для выполнения развертывания некоторых сложных конфигураций приложений.
Ресурсы могут быть разных типов. Puppet использует ресурсы и типы ресурсов для описания конфигурации системы.
Существует три вида типов ресурсов:
- Основные типы кукол или встроенные ресурсы.
- Кукольный определенные типы ресурсов.
- Кукольный пользовательский тип ресурсов.
Основные типы кукол или встроенные ресурсы:
Основные или встроенные типы ресурсов — это предварительно созданные типы ресурсов марионеток, поставляемые с программным обеспечением марионеток. Все основные или встроенные типы ресурсов Puppet написаны и поддерживаются командой Puppet.
Кукольный определенные типы ресурсов:
Определенные типы ресурсов — это облегченные типы ресурсов, написанные на декларативном языке Puppet с использованием комбинации существующих типов ресурсов.
Кукольный пользовательский тип ресурсов:
Пользовательские типы ресурсов — это полностью настраиваемые типы ресурсов, написанные на Ruby.
Давайте рассмотрим типы ресурсов кукол …
В терминале введите следующую команду, чтобы отобразить список соответствующих подкоманд Puppet:
Puppet --help
В нашем случае нас интересует подкоманда « ресурс », которую мы будем использовать для поиска информации о встроенных типах ресурсов кукол.
В терминале введите любую из следующих команд, чтобы отобразить список действий, связанных с подкомандой puppet « resource »:
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 ничего не выполнял, потому что демонстрационный класс был только что определен, но не объявлен .
Таким образом, пока вы не объявите класс puppet, код не будет применен.
Давайте объявим демонстрационный класс внутри того же кода, используя имя включаемого класса в конце кода:
# 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 status ntpd
Этот учебник предоставлен Aliaa Monier