LINUX.ORG.RU

Запуск docker-контейнера через puppet

 , ,


0

1

Добрый день

Имеется 2 машины под управление Astra Linux SE 1.7, на одной установлен puppet server, на другой puppet agent и docker Необходимо, с помощью манифеста puppet, запустить в контейнере созданный образ. Через docker run контейнер запускается без проблем.

Текст манифеста puppet:

class docker_container {
 
include docker

docker::image { 'nginx':
  ensure => 'present',
  image_tag => 'alse',
  require => Class['docker'],
}

### Запустить контейнер
docker::run { 'nginx':
  image => 'nginx:alse',
  ports => ['8080:80'],
  require => Docker::Image['nginx'],
}
}

Другие задачи манифест выполняет корректно. Дополнительный модуль docker для puppet сервера установлен

При выполнении манифеста ошибок не возникает:

Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for dockerp.astra.local
Info: Applying configuration version '1730273821'
Notice: Applied catalog in 0.03 seconds

Думал, что проблема может быть в Astra Linux, по этому поднял 2 машины на debian 12, но проблема осталась, видимо я что-то делаю не так

Подскажите, что изменить, чтоб манифест запускал контейнер?

P.S. в /etc/hosts внесены необходимые изменения, на клиенте puppet в /etc/puppetlabs/puppet/puppet.conf указан сервер puppet:

server = puppetserver.astra.local
show_diff = true

Ответ на: комментарий от ugoday

Если я правильно понял, то представленный манифест равнозначен команде docker run -p 8080:80 nginx:alse А руками эта команда запускает контейнер и он работает до его завершения

Возможно вы и правы, но я не знаю как это проверить

JohnatanGalt
() автор топика
Ответ на: комментарий от JohnatanGalt

Возможно в манифесте есть параметр, аналогичный докерову -d. А так, общий совет: если непонятно, увеличивать verbosity, устанавливать debug-опцию и т.п. Больше информации поможет понять что происходит.

ugoday ★★★★★
()
Ответ на: комментарий от JohnatanGalt

Что-то я поиском не вижу ни одного упоминания слов docker или nginx в логе.

А этот

Текст манифеста puppet: class docker_container {

Он отдельным файлом где-то лежит? Если да, то его надо вызвать/подключить в файле провизии узла. Само оно не выполнится.

Как не подскажу, у меня всё в hiera/yaml описано, я уже забыл как без неё

ps. файл на сайте облака был урезан, в скачанном слова docker встречаются, но после Applying configuration нет никаких упоминаний ресурса, т.е. на стороне сервера данный ресурс не объявлен

Должно быть что-то вроде (после Applying configuration при debug запуске)

Debug: Executing: '/usr/bin/systemctl is-active docker'
Debug: Executing: '/usr/bin/systemctl is-enabled docker'
Debug: Exec[/usr/local/bin/update_docker_image.sh postgres:10](provider=posix): Executing check 'docker images -q postgres:10 | grep .'
Debug: Executing: 'docker images -q postgres:10 | grep .'

И так далее с упоминанием проверок и имён ресурсов

Flotsky ★★
()
Последнее исправление: Flotsky (всего исправлений: 1)
Ответ на: комментарий от JohnatanGalt

Наверное следует освежить в памяти к примеру https://habr.com/ru/companies/avito/articles/507346/

class docker_container { ресурсы необходимо или include или явно вызвать в файле, описывающем провизию узла. По ссылке есть примеры.

Чтобы ответить на конкретно ваш вопрос, то надо смотреть на список и внутренности файлов в вашем environments/production/manifests.
Конкретно файлы описывающие провизию самого узла и файл с class docker_container

Flotsky ★★
()
Ответ на: комментарий от Flotsky

Это буквально все, что указано в манифесте:

class docker_container {
 
include docker

docker::image { 'nginx':
  ensure => 'present',
  image_tag => 'alse',
  require => Class['docker'],
}

### Запустить контейнер
docker::run { 'nginx':
  image => 'nginx:alse',
  ports => ['8080:80'],
  require => Docker::Image['nginx'],
}
}

Делал по примеру

JohnatanGalt
() автор топика
Ответ на: комментарий от JohnatanGalt

Ок, этот манифест он где находится относительно puppetserver:/etc/puppetlabs/code/environments/production/manifests

И существует ли puppetserver:/etc/puppetlabs/code/environments/production/manifests/site.pp и что у него внутри? (или где там описан манифест конкретного клиента)

Flotsky ★★
()
Ответ на: комментарий от JohnatanGalt

А как puppet должен додуматься, что в файле examples.pp находится нужная ему конфигурация?
По умолчанию puppet будет смотреть в файл site.pp

Вот большой кусок документации, от которого следует оттолкнуться https://www.puppet.com/docs/puppet/8/using-puppet-code
Или вот пример для начинающих https://nixhub.ru/posts/puppet-for-beginners/ (можно читать от блока «Структура каталогов сервера»)

Собственно можно начать с переименовывания examples.pp в site.pp, потом думать почему это применяется к каждому узлу и как сделать каждому своё…

Flotsky ★★
()
Последнее исправление: Flotsky (всего исправлений: 1)