構成管理ツール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用の設定ファイルです。
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サーバ用のコンテナのビルド設定です。
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クライアント用のコンテナのビルド設定です。
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マニフェストをそのまま実行しても動かない場合があります。