Как установить Puppet в автономном режиме на CentOS 7

Вступление

Цель этого руководства - как можно быстрее запустить Puppet в автономном режиме на CentOS 7.

Если вы хотите немного узнать о Puppet и о том, как он может быть вам полезен, продолжайте читать. Если вы уже убеждены и хотите начать установку Puppet, перейдите в раздел https://www.digitalocean.com/community/tutorials/how-to-install-puppet-in-standalone-mode-on-centos- 7 # условные обозначения, используемые в этом руководстве [Условные обозначения, используемые в этом руководстве] ниже.

Зачем использовать куклу?

Что за марионетка?

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

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

Если вы настраивали свои капли DigitalOcean вручную (т.е. подключив SSH к облачному серверу и введя ряд команд в командную оболочку Linux), Puppet может помочь вам встроить все знания этого процесса конфигурации в один файл конфигурации Puppet (или дерево каталогов), который можно вызвать для воссоздания узел с нуля, или перенастроить узел, если он поврежден.

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

Зачем использовать инструмент управления конфигурацией?

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

  • В manual установке вы SSH в узел и выполните ряд команд
    в командной оболочке для установки программного обеспечения.

  • В scripted Installation вы создаете сценарий (например, скрипт на Ruby или BASH)
    установить программное обеспечение и выполнить его.

  • В установке, основанной на управлении _конфигурацией, вы создаете конфигурацию
    инструмент управления задает желаемое состояние узла, а инструмент конфигурирования сравнивает состояние узла с желаемым состоянием и переводит узел в желаемое состояние.

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

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

Установка на основе управления конфигурациями является лучшим решением. Средство управления конфигурацией автоматизирует установку (как и сценарий установки), но его также можно использовать для восстановления программного обеспечения, если оно повреждено. Его также можно использовать для изменения желаемой конфигурации и перевода узла в новое желаемое состояние.

Почему именно кукольный?

По состоянию на август 2014 года на рынке появилось два основных инструмента настройки: Puppet и Chef. Быстрый поиск показывает, что оба они кажутся надежными зрелыми инструментами с лояльными читателями. Одним из ключевых отличий является то, что Puppet более декларативный, а Chef более процедурный, что делает Puppet более привлекательным для устранения повреждений. Вот несколько сравнительных статей.

Этот учебник не стремится сделать всестороннее сравнение.

Снежинки, домашние животные и крупный рогатый скот

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

  • Ваш узел - * снежинка *, если вы не знаете, как он оказался в состоянии
    он находится внутри и / или вы слишком нервны, чтобы внести какие-либо изменения в него или даже коснуться + его в случае его поломки. Если он сломается, у вас серьезные проблемы. Ваш узел + как тонкая снежинка.

  • Ваш узел - * домашнее животное *, если вы уверены, что можете исправить его, если он сломается,
    но мысль о настройке с нуля наполняет вас страхом. Когда ваш + питомец заболевает, вы берете его ветеринару, чтобы вылечить его.

  • Ваш узел является * головой крупного рогатого скота *, если его настройка была настолько автоматизирована, что если
    с узлом что-то идет не так, его проще перенастроить с нуля + с помощью инструмента автоматической настройки, чем пытаться его починить. Когда + один ваш скот заболел, вы не берете его к ветеринару; Вы стреляете в голову + и получаете новый.

Цель этой метафоры состоит в том, чтобы передать «крупный рогатый скот» в перспективе управления узлами. Большинство системных администраторов настолько привыкли рассматривать узлы как снежинки или домашних животных, что идея просто убить узел, когда он поврежден, кажется совершенно чужой. Тем не менее, все, что нужно, - это несколько секунд подумать, чтобы изменить свою точку зрения и понять, насколько мощна модель крупного рогатого скота.

  • Файловая система повреждена? Нет проблем, просто убейте узел и заново создайте его с помощью Puppet.

  • Неизвестная часть программного обеспечения вдруг перестала работать? Нет проблем, просто убейте узел и заново создайте его с помощью Puppet.

  • Хакер проник в вашу систему и установил руткит? Нет проблем, просто убейте узел и заново создайте его с помощью Puppet.

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

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

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

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

Кукольный путь

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

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

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

Puppet - это не просто инструмент настройки. Это дисциплина devops, которая упрощает установку, управление и ремонт узлов и устраняет большую часть нагрузки, связанной с управлением облаком узлов.

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

Для целей данного урока капелька называется:

mynode.example.com

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

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

В этом руководстве предполагается, что вы вошли в систему как пользователь root, поэтому вам не нужно ставить перед каждой командой префикс + sudo +. Если вы не вошли в систему как root, вы можете попробовать поставить префикс всех следующих команд с помощью + sudo + (но это не было проверено).

В этом уроке мы используем команду + cat + для создания и изменения файлов. При желании вы можете использовать + nano + или другой текстовый редактор.

Создать капельку

Если вы еще не создали Дроплет, к которому хотите применить Puppet, сделайте это сейчас. Вы можете создать любую каплю, если это CentOS 7 Droplet.

При указании имени хоста вашей новой капли в форме создания DigitalOcean Droplet обязательно укажите полное доменное имя (FQDN) в поле формы Имя хоста.

Hostname = mynode.example.com

Не указывайте просто «mynode».

(Вам не нужно настраивать DNS + example.com + для нового узла + mynode +, чтобы иметь возможность запускать Puppet, но в любом случае это хорошая идея, если вы планируете сохранить Droplet, поэтому это ваше напоминание!)

SSH в вашу каплю как корень

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

Если вы не настроили DNS для указания доменного имени на узле, вам нужно будет использовать вместо этого IP-адрес узла.

Установите Puppet

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

Установочное программное обеспечение Linux + yum + упрощает установку Puppet. Единственная сложность заключается в том, что Puppet по умолчанию отсутствует в списке репозитория CentOS yum, поэтому нам нужно сначала установить его, прежде чем мы сможем вызвать + yum +. (Если у вас CentOS 5 или CentOS 6, измените 7 на 5 или 6).

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm

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

yum repolist | grep puppet

который должен дать результат, выглядящий примерно так:

puppetlabs-deps/x86_64         Puppet Labs Dependencies El 7 - x86_64        10
puppetlabs-products/x86_64     Puppet Labs Products El 7 - x86_64            70

Теперь установите Puppet используя yum. Команда + yes + (переданная в команду + yum + с помощью |) избавляет вас от необходимости отвечать на ряд вопросов от yum. Команда вызывает большую активность и должна выдавать 180+ строк консольного вывода.

yes | yum -y install puppet

Проверьте, что Puppet установлен и работает с помощью следующей команды. Вывод должен быть простым номером версии, таким как + 3.6.2 +.

puppet --version

Установить имя хоста и полное доменное имя

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

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

facter | grep hostname
facter | grep fqdn

Сама по себе команда + facter + выведет список пар ключ / значение с данными о вашей капле. Здесь важны только две пары ключ / значение, поэтому мы используем + grep + для поиска соответствующего вывода, которое должно выглядеть следующим образом:

hostname=mynode
fqdn=mynode.example.com

Если части значений * mynode * неверны, вы можете исправить это, + введя следующую команду. Это изменит часть * mynode * значения + в обеих парах:

hostname mynode

Если значение домена в * fqdn * неверно, вы можете исправить это, добавив одну + строку в файл конфигурации системы + / etc / resolv.conf +. Сначала кратко рассмотрим его (полезно, если вы случайно повредили его и хотите воссоздать его, не воссоздав капельку):

cat /etc/resolv.conf

Теперь добавьте к нему:

cat >>/etc/resolv.conf
domain example.com
^D

(где * ^ D * означает ввод Control-D для завершения ввода команды + cat +.)

Подтвердите, что ваши изменения работали с:

facter | grep hostname
facter | grep fqdn

Вот напоминание о том, что должен содержать вывод:

hostname=mynode
fqdn=mynode.example.com

Создать файл конфигурации Puppet

Теперь, когда Puppet установлен и готов к работе, пришло время создать конфигурацию Puppet. В процессе установки CentOS / Puppet уже должен был быть создан каталог с именем + / etc / puppet + (если его нет, создайте его с помощью + mkdir / etc / puppet +). Давайте посмотрим там:

ls -la /etc/puppet

В подкаталоге должно быть несколько файлов + .conf и модуль` +.

Соглашения об именах дерева каталогов конфигурации Puppet предписывают нам создать подкаталог + manifest + для хранения фактического файла конфигурации, который мы собираемся создать:

mkdir /etc/puppet/manifests

Теперь создайте файл конфигурации. Вам нужно будет заменить собственное доменное имя на + mynode.example.com +. Команда + cat используется, но вы можете использовать редактор` + nano` (или любой другой редактор), если хотите. (Начальные и конечные пустые строки игнорируются).

cat >/etc/puppet/manifests/projectname.pp

node "mynode.example.com" {

file { '/root/example_file.txt':
   ensure => "file",
   owner  => "root",
   group  => "root",
   mode   => "700",
   content => "Congratulations!
Puppet has created this file.
",}

} # End node mynode.example.com
^D

(* ^ D * означает ввод Control-D для завершения ввода команды + cat +.)

Файл конфигурации указывает конфигурацию узла + mynode.example.com +. (Вы можете добавить больше блоков конструкции, таких как + node" nodename "{…​} +, в этот файл, и он все равно будет работать на узле + mynode.example.com +).

Внутри конструкции + node + находится инструкция для настройки определенного файла с именем + / root / example_file.txt +. Конструкция + file + инструктирует Puppet обеспечить наличие файла с таким именем, что файл является файлом, а не каталогом, что он имеет указанное правообладание, что он имеет указанный режим защиты и что он имеет указанный контент.

Инструкция + file + - это не просто команда для создания файла, если он не существует. Скорее, это спецификация того, как файл должен быть настроен. Puppet проверяет файл и выводит его в указанное состояние, независимо от того, в каком состоянии он находится. Если файл не существует, Puppet создает его. Если он существует, но какой-либо из указанных аспектов является неправильным (включая содержимое файла), Puppet исправит отклонение и переведет файл в указанное состояние. Таким образом, хотя Puppet может показаться, что он выполняет роль установочного скрипта при первом его запуске, при первом и последующих запусках, он действительно сравнивает существующее состояние с желаемым состоянием и вносит изменения, чтобы перевести файловую систему в желаемое состояние. ,

Вызвать куклу

Теперь, когда вы установили Puppet и создали файл конфигурации, вы можете вызвать Puppet. (Игнорировать любые ошибки ipaddress).

puppet apply /etc/puppet/manifests/projectname.pp

Puppet должен создать файл + / root / example_file.txt +, принадлежащий + root +, в группе + root + и с разрешениями + -rwx ------ +. Проверьте это с:

ls -la /root

Проверьте содержимое файла с помощью:

cat /root/example_file.txt

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

Снова вызвать куклу

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

puppet apply /etc/puppet/manifests/projectname.pp

Повредить файл и снова вызвать куклу

Теперь давайте нанесем некоторый ущерб сконфигурированному файлу, изменив его защиту + с помощью команды + chmod +.

chmod o+r /root/example_file.txt

Проверьте повреждение с помощью следующей команды. Вы должны увидеть + -rwx --- r - + + защита для + example_file.txt + вместо + -rwx ------ + защита:

ls -la /root

Теперь снова вызовите Puppet:

puppet apply /etc/puppet/manifests/projectname.pp

Puppet должен восстановить защиту файла. Проверьте это с помощью:

ls -la /root

Больше повреждений и ремонта

Теперь давайте снова повредим файл, изменив его содержимое:

cat >/root/example_file.txt
This is a damaged file!
^D

Подтвердите ущерб, используя:

cat /root/example_file.txt

Вызовите Puppet снова. Следует восстановить файл:

puppet apply /etc/puppet/manifests/projectname.pp

Убедитесь, что файл был восстановлен с помощью:

cat /root/example_file.txt

Что дальше?

Это всего лишь пример «Hello World», с которого можно начать. Приведенный выше файл конфигурации является лишь крошечным примером того, что может сделать Puppet. Чтобы почувствовать, что впереди, взгляните на эту страницу:

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

Заключение

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

Рекомендации

Компания, стоящая за Puppet, называется Puppet Labs, Inc. и можно найти здесь:

Инструкции по установке кукол можно найти по адресу:

Вы можете получить представление о том, что Puppet способен настроить, просмотрев эту страницу:

Сообщество пользователей Puppet создало тысячи модулей Puppet, которые можно + использовать для настройки широкого спектра программного обеспечения:

Related