Установка и использование Puppet на Centos7

Puppet-сервер – 192.168.1.42-puppet-server.kamaok.org.ua — Centos7
Puppet-клиент — 192.168.1.43-puppet-client.kamaok.org.ua — Centos7

 

Настройка временной зоны и времени на сервере и на клиенте

Установка имени хоста
На сервере

На клиенте

 

Установка Puppet-сервера

Установка Puppet-репозитария

 

Установка Puppet-клиента

Просмотр списка файлов,установленных пакетом puppet-server на сервере

Просмотр списка файлов,установленных пакетом puppet на клиенте

Запуск Puppet-сервера, добавление его в авто загрузку и проверка его состояния

Запустить и добавить в автозагрузку Puppet-сервер также можно с помощью команды

 

Файлы и клиента и сервера хранятся в каталоге /etc/puppet/
Основной конфигурационный файл
/etc/puppet/puppet.conf

Файл разделяется на секции

Символ # -используется для комментариев

Важные опции в настройках

Полный список настроек
https://docs.puppet.com/puppet/latest/configuration.html

Файлы fileserver.conf и auth.conf используются для настройки файлового сервера и аутентификации
Каталог manifests содержит в себе “манифесты”, которые являются файлами настройки для клиентов. Основной из них – файл site.pp, который будет считываться мастером всегда, и его настройки будут применяться ко всем клиентам (если другое не указано в самом манифесте)
Puppet использует собственный язык описания конечного состояния операционной системы, с помощью которого указывается то, к какому виду должны быть приведены компоненты ОС, чтобы она достигла желаемого состояния.

Применительно,как для сервера,так и для клиента:

Посмотреть все текущие настройки

Посмотреть текущие настройки для отдельного параметра

Например

 

Переменные — один из неотъемлемых компонентов любого языка программирования, и в языке Puppet они тоже есть. Переменные начинаются со знака $ и могут содержать любое число, строку или булево значение (true, false)
Одним из мощнейших свойств языка Puppet, связанным с переменными, является интеграция с инструментом получения информации о машине facter. Эта утилита возвращает всю информацию, специфичную для машины, в виде пар «ключ-значение», которые в Puppet превращаются в одноименные ВСТРОЕННЫЕ переменные. Вкупе с условными инструкциями языка Puppet они могут быть использованы для альтерации атрибутов ресурса в зависимости от свойств машины.
Если набрать в командной строке facter, то можно получить полный список доступных переменных

Проверка корректности настройки имени сервера и клиента для Puppet с помощью facter

На сервере

На клиенте

Проверка доступных на подпись/подписанных/отозванных сертификатов

 

Настройка клиента
Добавляем имя Puppet-сервера

Запустить и добавить в автозагрузку Puppet-клиент также можно с помощью команды

После запуска клиента на puppet-сервере должен появиться клиентский сертификат с ожиданием на подпись

Подпишим сертификат клиента(puppet-client.kamaok.org.ua)

Если необходимо удалить клиентский сертификат

Сервер сохраняет клиентские публичные сертификаты в $vardir/ssl/ca/

Клиент сохраняет свои сертификаты и публичный сертификат сервера в $vardir/ssl/

Если есть проблемы с сертификатами, то необходимо
— Очистить на клиенте клиентский сертификат
На клиенте выполняем

— Очистить на мастере старый клиентский сертификат

Если необходимо включить автоподписывание сертификатов клиентов
На сервере добавляем

Если необходимо отключить синхронизацию плагинов
На клиенте добавляем в секцию master

 

Puppet agent получает конфигурацию клиента от Puppet-сервера и применяет ее к локальному хосту,на котором он запущен.
Клиент может быть запущен как
1.Служба
2.Запускаться периодически по крону
3. Запускаться вручную

При запуске Puppet-агента по умолчанию запрашиваются изменения у сервера каждые 30 минут (1800 секунд)

Для изменения частоты запросов изменений с сервера на клиенте
можно изменить значение параметра runinterval в секции [agent]

Также можно вручную перезапустить клиента:

Или вручную опросить мастер с помощью команды

 

Анатомия Puppet запуска –Часть 1 – Компиляция catalog

Execute Puppet on the client

Анатомия Puppet запуска –Часть 2 – Применение catalog

При этом в лог-файле на Puppet-сервере регистрируются сообщения о подключении клиента к серверу

 

Как уже упоминалось, каталог manifests содержит в себе “манифесты”, которые являются файлами настройки для клиентов. Основной из них – файл site.pp, который будет считываться мастером всегда, и его настройки будут применяться ко всем клиентам (если другое не указано в самом манифесте)
Основной схемой для управления большим количеством конфигураций для разных клиентов является описание каждого из них в нодах (nodes).
С их помощью администратор может описать то, к каким машинам должны быть применены те или иные ресурсы и классы. Другими словами, это способ указать индивидуальную конфигурацию для каждой из машин, участвующих в сети Puppet
Содержимое ноды default будет применяться ко всем клиентам, описания для которых не было найдено
Помимо default в имени узла можно указывать сетевое имя машины (тогда все описанные в узле ресурсы будут сконфигурированы только на этой машине), либо произвольное имя (тогда этот узел может быть унаследован другим узлом).

Каждый блок, включающий в себя описание файлов, или действий, или программы, которую необходимо установить, в терминологии Puppet называется ресурсом
Ресурс идентифицируется именем (title), которое записывается в одиночных кавычках после открывающей фигурной скобки и сопровождается символом двоеточия. Далее с новой строки определяются атрибуты типа (attributes), причём некоторые атрибуты являются общими для всех типов, другие же присущи только данному конкретному типу ресурса. Каждый атрибут имеет значение (value), таким образом, записи атрибутов с соответствующими значениями имеют общую форму attribute => value.
Каждая строка определения атрибута заканчивается запятой, а закрывающая фигурная скобка сообщает о том, что описание ресурса завершено.

Описание всех существующих типов ресурсов
https://docs.puppet.com/puppet/latest/type.html
Например описание ресурса типа файл:

Описание ресурса – сервиса sshd (установка,запуск,проверка)

Создание первого манифеста — файла site.pp с таким содержимым:

Каждый тип ресурсов обладает собственным набором доступных для модификации атрибутов, плюс есть специальные мета-атрибуты, которые можно использовать в любом ресурсе. Одним из важных качеств ресурсов является возможность ссылки на них. Это можно использовать для формирования цепочек зависимостей
Ресурсы могут быть сгруппированы в коллекции ресурсов, называемые классами.
Классы могут наследовать друг друга и переопределять атрибуты.
Также классы, в свою очередь, могут входить в состав модулей

Просмотр всех доступных ресурсов

Краткое описание всех типов ресурсов

Полное описание определенного типа ресурса

Например, ресурса типа файл

Просмотр значения атрибутов существующего ресурса

Например, ресурса service с именем puppetmaster

Изменение атрибутов ресурса

Например, запуск службы  puppetmaster и добавление ее автозапуск

Создадим на сервере и на клиенте файл с отличными от указанных в манифесте(специальный файл конфигурирования ресурсов) владельцем/группой и правами
Например

На Puppet-сервере применим конфигурацию – выполним манифест

Проверяем,что владелец/группа/права совпадают с теми,что указаны в манифесте

Применяем манифест для клиента

При этом изменим права для на файл /root/test.txt для всех нод, описания которых не найдено и изменим владельца/группу на файл /root/test.txt для нашего клиента(ноды puppet-client)

Применяем манифест для сервера

Применяем манифест для клиента

 

Создадим Puppet-модуль с именем accounts для создания привилегированного пользователя и отключения удаленного входа root-пользователя по SSH

Важно: имя каталога внутри /etc/puppet/modules должно быть таким же,к ак и имя модуля

Создаем необходимую структуру каталогов

Назначение каталогов

Переходим в каталог manifest и создаем первый класс с именем accounts (имя класса должно совпадать с именем модуля) в файле init.pp
Файл init.pp – является главным файлом, определяющим модуль.
Он содержит описание класса, с таким же именем(accounts),как и имя модуля(accounts)

Один модуль может содержать несколько классов.
Для того, что бы определить дополнительные классы – их необходимо перечислить в отдельных файлах в каталоге/etc/puppet/modules/имя_модуля/manifests

Создаем новый класс groups для создания группы пользователя (имя группы myuser)
В имени класса обязательно указывается имя модуля(accounts),который содержит этот класс

Подключаем класс groups с созданием группы в основной класс модуля

Добавляем пользователя в sudo группу при этом имя группы будет выбрано в зависимости от используемого дистрибутива

Задаем пароль пользователя и получаем SHA1-хеш пароля
Хешированный пароль должен быть заключен в одинарные кавычки и помещен в основной манифест init.pp

Проверка синтаксиса кода манифеста

Если в выводе команды ничего нет, то синтаксис корректен.

Перейдем в каталог examples и создадим init.pp файл с вызовом нашего созданного модуля accounts

Тестируем модуль без применения изменений(—noop параметр предотвращает выполнение Puppet-ом фактического запуска модуля т.н. выполнение на сухую )

Добавим выполнения модуля accounts для Puppet-клиента (сервера puppet-client)

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

Проверяем на клиенте наличие пользователя и группы myuser, наличие его в группе wheel, домашний каталог пользователя, наличие заданного пароля.

 

Отключение удаленного входа root-пользователя по SSH
Копируем конф.файл SSH-сервера в каталог files модуля accounts и редактируем его, запрещая подключение по SSH пользователя root

Создаем новый класс ssh.pp
Параметр file заменяет дефолтный файл на сервере файлом, указанным в параметре source
(каталог files в параметре source опускается т.к. каталог files является дефолтным размещением файлов)

Перезапускаем SSH-службу в зависимости от дистрибутива операционной системы

Подключаем класс ssh в файл init.pp

Проверяем синтаксис манифеста с ssh

Запрашиваем с клиента выполение манифеста

Проверяем наличие изменений на клиенте

 

Проверяем принцип идемпотентности

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

 

Полезные команды Puppet-агента

Все конфигурационные параметры в файле /etc/puppet/puppet.conf могут быть переопределены с помощью опций командной строки

— включение одновременно нескольких опций (verbose-подробного вывода,onetime-запуск конфигурации только один раз, no-daemonize – не запускать в фоне и т.д.)

— выполнение определенной части конфигурации, а не всей конфигурации
Например, выполнение только класса с именем ssh

Проверка fingerprint сертификата

Проверяем fingerprint сертификата на клиенте

Проверяем fingerprint сертификата клиента на Puppet-мастере(сервере)

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

# Выполнение конфигурации без записи изменений на диск(выполнение на сухую)

Выполнение конфигурации в окружении, отличном от дефолтного

Ожидать подписи мастером сертификата клиента ( полезно при первом запуске клиента и отключенной опции автоподписывания сертификатов на мастере)

 

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

– содержание лог-файлов

– содержит данные, с которыми рабоатет Puppet (catalog, сертификаты, бекапы файлов и т.д.)

– расположение SSL-сертифкатов

(на мастере) – Основной(первый) манифест,который мастер выполняет при подключении клиента

( на мастере) – аналогично вышеуказанному, но при использовании конкретного окружения

(оба на мастере) – размещение модулей

(на мастере) – размещение модулей для конкретного окружения

 

Модули в Puppet

Широкая коллекция уже существующих модулей представлена здесь
https://forge.puppet.com/

Поиск необходимого модуля

Например, модуля mysql

Установка модуля mysql с Puppetlabs

Проверка синтаксиса манифеста и его выполнение

Провереяем, что установился MySQL, пароль MySQL пользователя root установлен в 123456789, параметр max_connections установлен в 1024

 

Просмотр установленных модулей

 

Проверка,что puppet-manifest соотвествует стилю Puppet

Автоматическое исправление найденных различий в стиле

 

Примеры описания некоторых ресурсов

Управление пакетами

Управление службами

Управление файлами

Управление пользователями

Выполнение команд

 

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

Selectors

Case

If elsif else

 

Операторы сравнения в Puppet
Puppet поддерживает некоторые общие операторы сравнения

А также оператор

Комбинация условий

 

Источники:
http://www.example42.com/tutorials/PuppetTutorial/
https://docs.puppet.com/puppet/
https://rtfm.co.ua/centos-ustanovka-i-nastrojka-puppet-servera-i-puppet-agenta
https://www.linode.com/docs/applications/puppet/install-and-configure-puppet
https://www.linode.com/docs/applications/puppet/create-puppet-module
http://www.ibm.com/developerworks/ru/library/l-puppet_01/
https://xakep.ru/2011/05/14/55238/

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика