r10k

1 minute read

r10k - инструмент для деплоя модулей и управления enviroments puppet’a, такими как production, testing, development и прочими.

Для использования r10k понадобится:

  • Настроить контроль кода при помощи системы контроля версий, например git
  • Установить r10k
  • Настроить r10k
  • Создать Puppetfile
  • Деплоить при помощи r10k

Установка:

/opt/puppetlabs/puppet/bin/gem install r10k

Настройка:

Создайте конфигурационный файл /etc/puppetlabs/r10k/r10k.yaml и заполните его согласно примеру:

# The location to use for storing cached Git repos
:cachedir: '/var/cache/r10k'

# A list of git repositories to create
:sources:
  # This will clone the git repository and instantiate an environment per
  # branch in /etc/puppetlabs/code/environments
  :my-org:
    remote: 'git@gitlab.com:mentoring/puppet.git'
    basedir: '/etc/puppetlabs/code/environments'

Как работает r10k:

Управление окружением:

r10k согласно конфигу знает где расположен репозиторий и локальная директория с кодом на сервере. На основе системы контроля версий r10k создает необходимые окружения и устанавливает модули. Фактически каждое окружение есть ничто иное как ветка в гите (environment = branch).

Управление модулями при помощи Puppetfile:

Управление Модулями происходит в конфигурационном файле Puppetfile расположенном в корне вашего environments, например тут: /etc/puppetlabs/code/environments/production, особенно тут если вы используете 4ую версию puppet.

Содержимое файла вполне шаблонно:

forge 'forge.puppetlabs.com'

mod 'puppet-nginx'
mod 'puppetlabs-apt'
mod 'puppetlabs-concat'
mod 'puppetlabs-firewall'
mod 'puppetlabs-inifile'
mod 'puppetlabs-motd'
mod 'puppetlabs-postgresql'
mod 'puppetlabs-puppetdb'
mod 'puppetlabs-registry'
mod 'puppetlabs-stdlib'

В файле можно определять откуда будут установлены модули, например из Puppet Forge, из git репозиториев. При использовании Puppetfile больше не придется устанавливать модули при помощи утилиты puppet module install. Также при деплое все модули установленные ранее будут удалены и установлены согласно содержимому файла.

Узнать больше об управлении puppetfile можно в документации.

Деплой:

/opt/puppetlabs/puppet/bin/r10k deploy environment -pv

при успешном деплое видим следующее:

INFO	 -> Deploying environment /etc/puppetlabs/code/environments/production
INFO	 -> Environment production is now at 371ea4e8b6db63a1bd01096a650d5ce087f79919
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/nginx
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/apt
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/concat
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/firewall
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/inifile
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/motd
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/postgresql
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/puppetdb
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/registry
INFO	 -> Deploying Puppetfile content /etc/puppetlabs/code/environments/production/modules/stdlib