Как настроить кукольную среду без мастера на Ubuntu 14.04

Вступление

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

В типичной среде Puppet пользователь записывает модули Puppet на свою рабочую станцию, передает модули на сервер управления версиями (например, Git), затем тянет эти модули к Хозяину Марионеток. Сервер, на котором работает клиент Puppet, периодически подключается к мастеру Puppet, чтобы узнать, изменилось ли что-либо, и применяет изменения, если таковые имеются.

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

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

Предпосылки

Если вы новичок в Puppet, то можете остановиться здесь, чтобы прочитать this статью о Puppet во-первых, так как этот урок предполагает практическое знание инструмента. Если вы новичок в Git, вы также можете проверить https://www.digitalocean.com/community/tutorial_series/introduction-to-git-installation-usage-and-branches и это введение в серию Git].

В этом руководстве мы будем работать с двумя каплями: один работает как сервер Git, а другой - к изменениям, которые мы будем применять через Puppet. Мы будем ссылаться на IP-адреса этих капель с помощью + your_git_server_ip + и + your_puppet_server_ip + соответственно.

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

Самый простой способ настроить Git Labs - использовать изображение одним щелчком мыши: на странице создания дроплета в разделе * Выберите изображение * перейдите на вкладку * Приложения *, затем нажмите * GitLab 7.10.0 CE 14.04 *. Вы также можете следовать thutorial, чтобы настроить Git Labs вручную.

Шаг 1 - Создание Git-репозитория

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

Сначала откройте пользовательский интерфейс Git Labs, перейдя по ссылке + http: // + в своем любимом браузере. Создайте аккаунт, заполнив данные справа в разделе * Новый пользователь? Создайте аккаунт * и нажмите зеленую кнопку * Зарегистрироваться *. Вы получите электронное письмо для активации учетной записи, а после активации своей учетной записи вы сможете войти на главную страницу.

Нажмите на зеленую кнопку * + New Project * на главной странице. Введите «кукольный» для * Путь проекта * и нажмите * Создать проект *. Введите «puppet» в поле «Путь к проекту» * и выберите «Public» для «Уровня видимости» *, затем нажмите зеленую кнопку «Создать проект» *.

Обязательно скопируйте URL-адрес SSH, который вы увидите в верхней части экрана проекта, так как он понадобится нам позже. Это будет выглядеть как + git @: / puppet.git +.

Шаг 2 - Добавление ключа SSH в Git Labs

На этом шаге мы создадим ключ SSH на сервере Puppet, а затем добавим этот ключ на сервер Git Labs.

Войдите на сервер Puppet как * root *. (Поскольку файлы Puppet будут принадлежать пользователю root, у нас должны быть права на настройку исходного репозитория Git в папке Puppet.)

Создайте ключ SSH для пользователя root. Не вводите ключевую фразу, потому что этот ключ будет использоваться сценариями, а не пользователем.

ssh-keygen -t rsa

Затем отобразите ваш открытый ключ с помощью следующей команды.

cat ~/.ssh/id_rsa.pub

Скопируйте этот ключ. Это будет выглядеть примерно так: + ssh-rsa long_alphanumeric_string root @ +.

Теперь на странице панели инструментов Git Labs нажмите значок * Параметры профиля * в верхней панели, второй справа. В левом меню нажмите * SSH Keys *, затем нажмите зеленую кнопку * Добавить SSH Key *. В поле * Title * добавьте описание ключа (например, «Root Puppet Key») и вставьте свой открытый ключ в поле * Key *. Наконец, нажмите * Добавить ключ *.

Шаг 3 - Установка Puppet и Git

На этом этапе мы установим Puppet и Git.

На сервере Puppet сначала загрузите пакет Puppet для Ubuntu 14.04.

wget http://apt.puppetlabs.com/puppetlabs-release-trusty.deb

Установите пакет.

dpkg -i /tmp/puppetlabs-release-trusty.deb

Обновите список пакетов вашей системы.

apt-get update

Наконец, установите Puppet и git.

apt-get install puppet git-core

На этом этапе вы должны настроить свою среду Git, следуя инструкциям в https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-14-04#how-to-set -up-git [этот урок].

Шаг 4 - Нажатие начальной конфигурации кукол

С установленными Puppet и Git мы готовы сделать наш первоначальный толчок в наш репозиторий Puppet.

Сначала перейдите в каталог + / etc / puppet +, где находятся файлы конфигурации.

cd /etc/puppet

Инициализируйте репозиторий git здесь.

git init

Добавить все в текущем каталоге.

git add .

Передайте эти изменения с описательным комментарием.

git commit -m ""

Добавьте проект Git, который мы создали ранее, в качестве источника, используя URL-адрес SSH, который вы скопировали на шаге 1.

git remote add origin git@:/puppet.git

И, наконец, подтолкнуть изменения.

git push -u origin master

Шаг 5 - Очистка конфигурации Puppet

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

Чтобы создать основу, нам нужно внести пару изменений. Сначала мы собираемся очистить файл + / etc / puppet / puppet.conf. Используя ваш любимый редактор (vim, nano и т. Д.), Отредактируйте + / etc / puppet / puppet.conf + со следующими изменениями.

Давайте начнем с внесения нескольких изменений в файл + / etc / puppet / puppet.conf для вашей конкретной настройки. Откройте файл, используя nano или ваш любимый текстовый редактор.

sudo nano /etc/puppet/puppet.conf

Файл будет выглядеть так:

Оригинал /etc/puppet/puppet.conf

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

Во-первых, удалите все из строки + [master] + вниз, так как мы не запускаем мастер Puppet. Также удалите последнюю строку в разделе + [main] +, которая начинается с + templatedir +, поскольку это устарело. Наконец, измените строку, которая читает + factpath = $ vardir / lib / facter + на + factpath = $ confdir / facter +. + $ confdir + эквивалентно + / etc / puppet / +, т.е. наш кукольный репозиторий.

Вот как должен выглядеть ваш + puppet.conf, как только вы закончите с вышеуказанными изменениями.

Модифицированный /etc/puppet/puppet.conf

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$confdir/facter

Шаг 6 - Добавление модуля кукол

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

Наш первый модуль, который мы назовем cron-puppet, развернет Puppet через Git. Он установит Git-хук, который запустит Puppet после успешного слияния (например, git pull), и он будет устанавливать задание cron для выполнения + git pull + каждые 30 минут.

Сначала перейдите в каталог модулей Puppet.

cd /etc/puppet/modules

Затем создайте каталог + cron-puppet +, содержащий каталоги + manifest + и + files +.

sudo mkdir -p cron-puppet/manifests cron-puppet/files

Создайте и откройте файл с именем + init.pp + в каталоге + manifest +.

sudo nano cron-puppet/manifests/init.pp

Скопируйте следующий код в + init.pp +. Это то, что говорит Puppet, чтобы вытащить из Git каждые полчаса.

init.pp

class cron-puppet {
   file { 'post-hook':
       ensure  => file,
       path    => '/etc/puppet/.git/hooks/post-merge',
       source  => 'puppet:///modules/cron-puppet/post-merge',
       mode    => 0755,
       owner   => root,
       group   => root,
   }
   cron { 'puppet-apply':
       ensure  => present,
       command => "cd /etc/puppet ; /usr/bin/git pull",
       user    => root,
       minute  => '*/30',
       require => File['post-hook'],
   }
}

Сохраните и закройте файл, затем откройте другой файл с именем + post-merger в каталоге` + files in`.

sudo nano cron-puppet/files/post-merge

Скопируйте следующий скрипт bash в + post-merge +. Этот bash-скрипт будет запускаться после успешного слияния Git и регистрирует результаты выполнения.

после слияния

#!/bin/bash -e
## Run Puppet locally using puppet apply
/usr/bin/puppet apply /etc/puppet/manifests/site.pp

## Log status of the Puppet run
if [ $? -eq 0 ]
then
   /usr/bin/logger -i "Puppet has run successfully" -t "puppet-run"
   exit 0
else
   /usr/bin/logger -i "Puppet has ran into an error, please run Puppet manually" -t "puppet-run"
   exit 1
fi

Сохраните и закройте этот файл

Наконец, мы должны сказать Puppet запустить этот модуль, создав глобальный манифест, который канонически находится в + / etc / puppet / manifts / site.pp +.

sudo nano /etc/puppet/manifests/site.pp

Вставьте следующее в + site.pp +. Это создает классификацию узлов под названием «по умолчанию». Все, что включено в узел «по умолчанию», будет запускаться на каждом сервере. Здесь мы говорим запустить модуль + cron-puppet +.

site.pp

node default {
   include cron-puppet
}

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

sudo puppet apply /etc/puppet/manifests/site.pp

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

...

Notice: Finished catalog run in 0.18 seconds

Наконец, давайте передадим наши изменения в репозиторий Git. Сначала войдите в систему как пользователь root, потому что это пользователь с доступом к хранилищу по ключу SSH.

Затем перейдите в каталог + / etc / puppet +.

cd /etc/puppet

Добавьте все в этом каталоге в коммит.

git add .

Зафиксируйте изменения с помощью описательного сообщения.

git commit -m ""

Наконец, нажмите изменения.

git push -u origin master

Заключение

Чтобы добавить больше серверов, просто следуйте шагу 3 выше, чтобы установить Puppet и Git на новый сервер, затем клонируйте репозиторий Git в + / etc / puppet + и примените манифест + site.pp +.

Вы даже можете автоматизировать эту установку, используя user data при создании капли. Убедитесь, что вы используете ключ SSH при создании дроплета и добавили этот ключ SSH на свой сервер GitLab. Затем просто установите флажок * Enable User Data * на экране создания капли и введите следующий сценарий bash, заменив переменные, выделенные красным цветом, на ваши собственные.

#!/bin/bash -e

## Install Git and Puppet
wget -O /tmp/puppetlabs.deb http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -cs`.deb
dpkg -i /tmp/puppetlabs.deb
apt-get update
apt-get -y install git-core puppet

# Clone the 'puppet' repo
cd /etc
mv puppet/ puppet-bak
git clone http:////puppet.git /etc/puppet

# Run Puppet initially to set up the auto-deploy mechanism
puppet apply /etc/puppet/manifests/site.pp

Это все! Теперь у вас есть система Puppet без мастера, и вы можете раскрутить любое количество дополнительных серверов, даже не заходя на них.

Related