LoginSignup
1
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-14

構成管理ツール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マニフェストをそのまま実行しても動かない場合があります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0