Edited at

docker-compose で Puppetのデモ環境を構築する

More than 1 year has passed since last update.

構成管理ツールPuppetのデモ環境を、docker-composeで構築します。

動作確認などは、環境が簡単につくりなおせるDockerが便利です。

MacならDocker for Mac、WindowsならDocker for Windowsをインストールしておきます(OSが未対応な場合、Docker Toolbox)。


構築準備


ファイル構成

フォルダ名はなんでもよいですが、とりあえずPuppetDemoという名前のフォルダに、下記のような構成で準備します。master/hieradara, master/manifests, master/modulesはコンテナに共有するフォルダーです。

PuppetDemo

|-- docker-compose.yml
|-- master
| |-- Dockerfile
| |-- hieradata
| |-- manifests
| `-- modules
`-- agent
`-- Dockerfile


docker-compose用の設定

docker-compose用の設定ファイルです。


docker-compose.yml

version: '2'

services:
master:
build: ./master
hostname: master
volumes:
- ./master/hieradata:/etc/puppetlabs/code/environments/production/hieradata
- ./master/manifests:/etc/puppetlabs/code/environments/production/manifests
- ./master/modules:/etc/puppetlabs/code/environments/production/modules
command: /opt/puppetlabs/bin/puppetserver foreground
agent:
build: ./agent
hostname: agent
links:
- master:master
volumes:
- ./master/hieradata:/etc/puppetlabs/code/environments/production/hieradata
- ./master/manifests:/etc/puppetlabs/code/environments/production/manifests
- ./master/modules:/etc/puppetlabs/code/environments/production/modules
stdin_open: true
tty: true
command: /bin/bash



  • masterがPuppetサーバ、agentがPuppetのクライアント側です。

  • master, agent間でPuppetの問い合わせができるように、hostname, links等を設定してます。

  • volumesでMac(Windows PC)上のファイルをmaster,agent側で共有させています。

  • agent側に入ってコマンドを入力できるように、stdin_open, ttyを設定。


Puppetサーバ用コンテナのDockerfile

Puppetサーバ用のコンテナのビルド設定です。


master/Dockerfile

FROM centos:7

RUN rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
RUN yum install -y puppet-agent
RUN groupadd puppet
RUN useradd -g puppet puppet
RUN yum install -y puppetserver
RUN sed -i -e "s/#max-active-instances: 1/max-active-instances: 1/g" /etc/puppetlabs/puppetserver/conf.d/puppetserver.conf
RUN sed -i -e "s/JAVA_ARGS=\"-Xms2g -Xmx2g -XX:MaxPermSize=256m\"/JAVA_ARGS=\"-Xms512m -Xmx512m -XX:MaxPermSize=256m\"/g" /etc/sysconfig/puppetserver
RUN echo "*" > /etc/puppetlabs/puppet/autosign.conf
CMD /opt/puppetlabs/bin/puppetserver foreground



  • puppet-agent, puppetserverインストール

  • puppetユーザ作成

  • デフォルトだとメモリが足らずに起動しないため、max-active-instancesとJAVA_ARGSを変更

  • どのクライアントからのリクエストでも許可するようautosign.confを変更


PuppetクライアントコンテナのDockerfile

Puppetクライアント用のコンテナのビルド設定です。


agent/Dockerfile

FROM centos:7

RUN rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
RUN yum install -y puppet-agent
RUN echo "[main]" >> /etc/puppetlabs/puppet/puppet.conf
RUN echo "server = master" >> /etc/puppetlabs/puppet/puppet.conf
CMD /opt/puppetlabs/bin/puppet agent -t



  • puppet-agent, puppetserverインストール

  • puppet agent実行時に、masterに問い合わせる用puppet.confに設定


使い方

ターミナル(コマンドプロンプト)を開いて、PuppetDemoフォルダに移動した状態からで。


docker-composeのコマンド

docker-composeのコマンドの紹介です。


ビルド

docker-compose build


起動

docker-compose up

バックグラウンドで起動したい場合

docker-compose up -d


状態確認

(dオプションなしで起動した場合、別ターミナルを開いてPuppetDemoフォルダに移動した状態で)

docker-compose ps

実行例、StateがUpであれば起動中。あと、Nameはコンテナ名で、別のコマンドで使ったりします。

       Name                      Command               State   Ports 

--------------------------------------------------------------------
puppetdemo_agent_1 /bin/bash Up
puppetdemo_master_1 /opt/puppetlabs/bin/puppet ... Up


停止

Ctrl + c

バックグラウンドで起動した場合

docker-compose stop


コンテナ削除

きれいなコンテナで作り直したい場合、一度削除してから起動しなおしてください。

docker-compose rm


コンテナの最新化

新しいcentosイメージ、puppetが出たときに、コンテナを最新化したい場合build時にオプションをつけます

docker-compose build --no-cache --pull


puppetを試す

ここからは、構築したデモ環境を起動した状態で。


クライアント側に入る

(dオプションなしで起動した場合、別ターミナルを開いてPuppetDemoフォルダに移動した状態で)

docker attach puppetdemo_agent_1

puppetdemo_agent_1の名前が違う場合は、docker-compose psで名前を確認。ちなみにmasterにattachすると出れなくなるので注意です(bashを動かしていないため、master側ではコマンドをたたけないです)。


クライアント側から出る

Ctrl + p

の後に、
Ctrl + q

※間違えてexitコマンドでぬけると、クライアント側のコンテナが止まるので、その場合はdocker-compose upをすれば起動します。


クライアント側でpuppet apply

クライアント側に入った状態で、puppetをローカル実行する場合

puppet apply マニフェストのパス -t 

例:

puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp -t 


クライアント側でpuppet agent

クライアント側に入った状態で、puppetをmaster側に問い合わせて実行する場合

puppet agent -t 


Puppetのマニフェスト編集

master/hieradara, master/manifests, master/modulesを、Mac(PC)とagentとmasterで共有しているので、Mac(PC)側のエディタ等で編集してください。

Mac(PC)のパス(共有元)

./master/hieradata

./master/manifests
./master/modules

agent, masterのパス(共有先)

/etc/puppetlabs/code/environments/production/hieradata

/etc/puppetlabs/code/environments/production/manifests
/etc/puppetlabs/code/environments/production/modules


puppet forge

puppet forgeで公開されているモジュールをダウンロードする場合は、クライアント側のpuppetdemo_agent_1に入った状態で。

puppet module install モジュール名

例:

puppet module install puppetlabs-apache --version 1.11.0

共有しているので、これでmasterコンテナと、Mac(PC)にもダウンロードされます。


クライアント側のコンテナの注意点

dockerコンテナは、VMと違う部分があるため、どこかのPuppetマニフェストをそのまま実行しても動かない場合があります。