• Регистрация

1,074 вопросов

1,433 ответов

1,281 комментариев

8,741 пользователей

Добро пожаловать на Ubuntu Ответы, где вы можете задать вопросы и получить ответы от других пользователей сервиса.

Использование Puppet для быстрой подготовки сервера

+1 голос

Puppet — это клиент-серверное ПО, которое позволяет централизовано управлять программами на серверах, конфигурацией программ, устанавливать и настраивать программы на однотипных серверах, объединив их в группы по какому-то признаку (например, хранилища, web-сервера и т.д.) и т.п.

В этой заметке будет рассмотрено пример манифеста Puppet для установки определенного ПО (или набора ПО) единоразово при подготовке сервера к эксплуатации. Манифест создается и тестируется для определенной ОС, или линейки ОС. Рассмотрим манифест установки MongoDB с репозитория разработчиков этого ПО. ОС — Ubuntu 12.04.

Для начала установим сам Puppet. Поскольку мы стремимся к минимальному набору шагов для подготовки сервера к работе, создадим скрипт установки актуальной версии Puppet из репозитория Puppetlabs:

#!/bin/bash
wget https://apt.puppetlabs.com/puppetlabs-release-precise.deb
dpkg -i puppetlabs-release-precise.deb
apt-get update
apt-get install puppet puppetmaster -y
puppet module install ithempel/ppa

 

В данном примере также устанавливается модуль работы Puppet с PPA, который используется в манифесте для установки MongoDB именно из репозитория разработчиков, а не стандартного репозитория для Ubuntu 12.04.

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

chmod +x puppet-install.sh
./puppet-install.sh

Дождемся завершения установки и созданим небольшой манифест для установки MongoDB.

# Обновляем список ПО из репозиториев
exec { "apt_update":
command => "/usr/bin/apt-get update",
}
# Выполняем установку python-software-properties для работы с PPA
package { "python-software-properties":
ensure => "installed"
}
# Импортируем необходимый ключ для работы с источником от разработчиков
ppa::key { '7F0CEB10':
ensure => present,
before => Exec['apt_update_2'],
}
# Вносим информацию в sources.list
exec { "mongo_sources_list":
command => "/bin/echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' > /etc/apt/sources.list.d/mongodb.list",
before => Exec['apt_update_2'],
}
# Повторно обновляем список ПО из репозиториев
exec { "apt_update_2":
command => "/usr/bin/apt-get update",
}
# Устанавливаем необходимый пакет
package { "mongodb-10gen":
ensure => "present",
require => Exec['apt_update_2'],
}

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

Таким образом можно создать набор манифестов и использовать нужные манифесты для определенной группы серверов. Отдельный вопрос — клиент-серверное взаимодействие в Puppet. Чтобы локально применить манифест необходимо выполнить команду:
/usr/bin/puppet apply mongo.pp --verbose
где mongo.pp — манифест.

Удобным способом применения манифестов на локальной системе является скрипт:

#!/bin/bash
i=1
while [ $i -le $# ]; do
eval soft=\${$i}
/usr/bin/puppet apply $soft --verbose
i=$(($i + 1))
done

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

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

Для хранения, изменения и использования скриптов и манифестов удобно использовать репозитории, например, git.

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

Вопрос Mar 20, 2016 от sir_mcnellan Ветеран (8,680 баллов) в категории Серверные системы
   

Пожалуйста войдите или зарегистрируйтесь для ответа на этот вопрос.

...