Учебное пособие по куклам для начинающих: что такое марионетка и как ее использовать?

Прежде чем мы изучим Puppet, давайте разберемся:

Что такое управление конфигурациями?

Управление конфигурацией — это процесс поддержания программного обеспечения и компьютерных систем (например, серверов, хранилищ, сетей) в известном, желаемом и согласованном состоянии. Это также обеспечивает доступ к точной исторической записи состояния системы для целей управления проектами и аудита.

Системные администраторы в основном выполняют повторяющиеся задачи, такие как установка серверов, настройка этих серверов и т. д. Эти специалисты могут автоматизировать эту задачу, написав сценарии.

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

Что такое Кукольный?

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

Puppet специально разработан для управления конфигурацией Linux и Windows системы. Он написан на Ruby и использует свой уникальный DOMain Specific Lязык (DSL) для описания конфигурации системы.

Какие есть версии Puppet?

Марионетка выпускается в двух версиях:

  • Марионетка с открытым исходным кодом: это базовая версия инструмента управления конфигурацией Puppet, также известного как Puppet с открытым исходным кодом. Он доступен непосредственно с веб-сайта Puppet и лицензируется по системе Apache 2.0.
  • Кукольный Предприятие: коммерческая версия, предлагающая такие функции, как отчеты о соответствии требованиям, оркестровка, управление доступом на основе ролей, графический интерфейс пользователя, API и инструменты командной строки для эффективного управления узлами.

Что может Марионетка?

Например, у вас есть инфраструктура, насчитывающая около 100 серверов. Ваша роль как системного администратора — следить за тем, чтобы все эти серверы всегда были в актуальном состоянии и работали с полной функциональностью.

Системный администратор, работающий на серверах вручную
Системный администратор работает на серверах вручную

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

Puppet автоматизирует управление сервером
Puppet автоматизирует управление сервером

Марионетка выполняет следующие функции:

  • Puppet позволяет вам определять отдельные конфигурации для каждого хоста.
  • Инструмент позволяет вам постоянно контролировать серверы, чтобы убедиться, существует ли необходимая конфигурация или нет, и она не изменяется. Если конфигурация будет изменена, инструмент Puppet вернется к предварительно определенной конфигурации на хосте.
  • Он также обеспечивает контроль над всей настроенной системой, поэтому централизованные изменения вносятся автоматически.
  • Он также используется в качестве инструмента развертывания, поскольку автоматически развертывает программное обеспечение в системе. Он реализует инфраструктура как код, поскольку политики и конфигурации записываются как код.

Puppet DSL и парадигмы программирования

Прежде чем мы изучим Puppet DSL, давайте разберемся с парадигмами программирования:

Парадигма программирования — это стиль, который вы используете в компьютерном программировании.

Четыре типа парадигм:

  • Императив.
  • декларативный.
  • Функциональный (который считается подмножеством этой декларативной парадигмы)
  • Объектно-ориентированный.

Мы сосредоточимся на императиве и декларативности.

Императивные парадигмы

Эта парадигма программирования выражает логику вычислений («Что делать») и описывает поток управления («Как делать»).

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

Предположим, вы идете в офис, заказываете такси и начинаете давать водителю пошаговые инструкции, пока не доберетесь до офиса. Указание того, что и как делать, является императивным стилем.

Декларативные парадигмы

Эта парадигма программирования выражает логику вычислений (что делать) без описания потока управления (как делать).

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

Предположим, вы идете в офис, заказываете такси Uber и указываете конечный пункт назначения (Офис). Указание того, что делать, а не как делать, является декларативным стилем.

Парадигма Что делать Как это сделать
императив Да Да
декларативный Да Нет

Puppet использует парадигму декларативного программирования.

Puppet использует декларативный подход к программированию.

Пример: Создайте пользователя в системе:

Это можно сделать с помощью шаблона императивного программирования с помощью сценария оболочки: здесь мы указываем, как создать пользователя и какие команды использовать в операционная система.

Декларативные парадигмы

Однако это можно сделать с использованием шаблона декларативного программирования всего с несколькими строками кода Puppet, доменно-ориентированного языка Puppet (DSL) и при этом добиться того же результата.

Декларативные парадигмы

Модели развертывания инструментов управления конфигурацией

Существует две модели развертывания инструменты управления конфигурацией :

  • Модель развертывания на основе push: инициируется главным узлом.
  • Модель развертывания на основе извлечения: инициируется агентами.

Модель развертывания на основе push-уведомлений

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

Модель развертывания на основе извлечения.

В этой модели развертывания отдельные серверы связываются с главным сервером, проверяют и устанавливают безопасное соединение, загружают свои конфигурации и программное обеспечение, а затем настраивают себя соответствующим образом — например, Puppet и Chef.

Как работает Марионетка?

Puppet основан на модели развертывания Pull, в которой узлы агентов регулярно проверяются после каждого 1800 секунды с главным узлом, чтобы узнать, нужно ли что-нибудь обновить в агенте. Если что-то необходимо обновить, агент извлекает необходимые марионеточные коды от мастера и выполняет необходимые действия.

Поясним это на примере:

Пример: Мастер – Настройка агента:

Мастер

Компьютер на базе Linux с установленным на нем программным обеспечением Puppet master. Он отвечает за поддержание конфигураций в виде марионеточных кодов. Главным узлом может быть только Linux.

Агенты

Целевые машины, управляемые марионеткой с установленным на них программным обеспечением агента марионетки.

Агент можно настроить в любой поддерживаемой операционной системе, например Linux или Windows or Solaris или Mac OS.

Связь между мастером и агентом устанавливается посредством безопасных сертификатов.

Связь с агентом Хозяина Марионеток
Связь с агентом Хозяина Марионеток

Связь между Мастером и Агентом

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

Связь между Мастером и Агентом
Агент отправляет факты мастеру

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

Связь между Мастером и Агентом
Мастер отправляет каталог Агенту

Шаг 3) Агент использует этот список конфигурации для применения любых необходимых изменений конфигурации на узле.

В случае отсутствия отклонений в конфигурации Агент не вносит никаких изменений в конфигурацию и оставляет узел работать с той же конфигурацией.

Связь между Мастером и Агентом
Агент применяет конфигурацию

Шаг 4) Как только это будет сделано, узел сообщает мастеру марионеток, указывая, что конфигурация была применена и завершена.

Кукольные блоки

Puppet обеспечивает гибкость для интеграции отчетов со сторонними инструментами с использованием API Puppet.

Четыре типа строительных блоков Марионетки:

  1. Ресурсы
  2. Классы
  3. Манифест
  4. Модули

Кукольные ресурсы

Ресурсы Puppet — это строительные блоки Puppet.

Ресурсы – это встроенные функции которые запускаются на серверной стороне для выполнения необходимых операций в марионетке.

Кукольные классы

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

Кукольный Манифест

Манифест — это каталог, содержащий файлы Puppet DSL. Эти файлы имеют расширение .pp. Расширение .pp означает марионеточную программу. Код марионетки состоит из определений или объявлений классов Puppet.

Кукольные модули

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

Так, например, MySQL модуль для установки и настройки MySQL или модуль Jenkins для управления Jenkins и т. д.

Кукольные модули
Кукольные модули

Типы ресурсов Puppet

В общем, система состоит из файлов, пользователей, сервисов, процессов, пакетов и т. д. В Puppet они называются ресурсами. Ресурсы являются фундаментальными строительными блоками в

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

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

Ресурсы могут иметь разные типы. Кукольное использование Ресурсы и типы ресурсов для описания конфигурации системы.

Существует три типа типов ресурсов:

  1. Ядро Puppet или встроенные типы ресурсов.
  2. Типы ресурсов, определенные Puppet.
  3. Пользовательские типы ресурсов Puppet.

Ядро Puppet или встроенные типы ресурсов

Основные или встроенные типы ресурсов — это предварительно созданные типы ресурсов Puppet, поставляемые с программным обеспечением Puppet. Все основные или встроенные типы ресурсов Puppet пишутся и поддерживаются командой Puppet.

Типы ресурсов, определенные Puppet

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

Пользовательские типы ресурсов Puppet

Пользовательские типы ресурсов — это полностью настраиваемые типы ресурсов, написанные на Ruby.

Давайте рассмотрим типы кукольных ресурсов…

В терминале введите следующую команду, чтобы отобразить список подкоманд, соответствующих Puppet:

Puppet --help

Типы пользовательских ресурсов Puppet

В нашем случае нас интересует подкоманда «ресурс», который мы будем использовать для поиска информации о встроенных типах ресурсов марионеток.

В терминале введите любую из следующих команд, чтобы отобразить список действия связанный с подкомандой марионетки «ресурс«:

Puppet help resource		
Puppet resource --help		

Типы пользовательских ресурсов Puppet

В этом случае мы имеем ресурс как подкоманда и –типы как действие.

Puppet имеет 49 встроенных основных типов ресурсов.

В терминале введите следующую команду, чтобы отобразить список доступных встроенных типов ресурсов марионетки:

puppet resource –types

Типы пользовательских ресурсов Puppet

Каждый тип поддерживает список Атрибуты. Эти атрибуты предоставляют подробное описание, которое Puppet использует для управления ресурсом.

Чтобы узнать все атрибуты, связанные с типом ресурса марионетки, используйте следующую команду:

puppet describe <resource type name>	

В параметрах будут перечислены все доступные атрибуты для этого типа ресурса.

марионетка описывает пакет

Типы пользовательских ресурсов Puppet

Новичку сложно понять и связать многие файлы неуправляемого кода марионетки. Здесь нам нужна некоторая группировка, чтобы связать операции. Цель состоит в том, чтобы решить одну проблему, например, все операции, необходимые для настройки 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",
    }
}

Пока что мы только определили класс, но нигде его не использовали. Это означает, что написанный нами код никогда не будет выполнен, если мы не объявим этот класс где-нибудь еще.

Объявление класса

Чтобы использовать определенный класс в коде, используйте включают ключевое слово.

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 уже присутствует на сервере. Давайте удалим существующий пакет NTP:

yum remove ntp

После удаления пакета убедитесь, что файл ntp.conf не существует:

ls -lrt /etc/ntp.conf

Демо-установка NTP

Убедитесь, что служба ntp не существует, выполнив следующую команду:

systemctl status ntp

Демо-установка 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

Убедитесь, что вы перешли на корень чтобы иметь возможность завершить тест без ошибок, выполнив команду:

su root

Тест — это следующий шаг в процессе создания кода. Выполните следующую команду, чтобы выполнить дымовой тест:

Puppet applies demontp.pp --noop

Последний шаг – пробег марионетку в реальном режиме и проверьте выходные данные.

puppet apply demontp.pp

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

Убедитесь, что вы перешли на корень чтобы иметь возможность завершить тест без ошибок, выполнив команду:

su root

Тестирование — это следующий шаг в процессе создания кода. Выполните следующую команду, чтобы выполнить дымовой тест:

Puppet apply demontp.pp --noop

Последний шаг – пробег марионетку в реальном режиме и проверьте выходные данные.

puppet apply demontp.pp

На этот раз код применяется, поскольку класс был определен, а затем объявлен.

Демо-установка NTP

Убедитесь, что ntp.conf теперь существует:

ls -lrt /etc/ntp.conf

Убедитесь, что служба ntp запущена, выполнив следующую команду:

systemctl status ntpd

Демо-установка NTP