Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Puppet×docker 夢の競演

66 views

Published on

第6回 Puppetユーザ会での発表資料です。
https://japanpuppetusergroup.connpass.com/

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Puppet×docker 夢の競演

  1. 1. Puppet×Docker 夢の競演(?) 菅原 亮 第6回 Puppetユーザ会 発表資料
  2. 2. 今回はPuppet Enterpriseが主役 Puppet Enterpriseって、 GUI便利だし10ノードまで無償だから、 もうちょっと使ってみようよという意味もあって、 今回はPuppet Enterpriseを全面に出します。
  3. 3. Dockerってなに? ・・・ここにいらっしゃるような皆さまには説明要らないですよね? 言わずと知れた代表的なコンテナアプリケーションのデプロイ自動化ソフトウェアです。 dockerコマンドを使っていろいろコマンドラインでコンテナを操作できます。 でもコマンドラインオプションが多過ぎていつも忘れてしまいます(僕だけ?) ・・・覚えてられません(汗 Puppetはそんな忘れっぽいアナタの強い味方です! docker run -it --rm --privileged=true --add-host puppet:192.168.182.3 --add-host vpe:192.168.182.3 -v /sys/fs/cgroup:/sys/fs/cgroup:ro sugaharar/centos7-systemd コンテナをちょっど強引に例えるなら、 1つのマシン上に特定アプリ専用の ちっさなVMみたいなものが いっぱい載るイメージです。
  4. 4. コンテナを起動する(コマンドライン編) Docker EnterpriseのWebコンソールを確認してから さっきのコマンドを実行してみましょう。 実行後、もう一度Docker EnterpriseのWebコンソールを確認してみましょう。 docker run -it --rm --privileged=true --add-host puppet:192.168.182.3 --add-host vpe:192.168.182.3 -v /sys/fs/cgroup:/sys/fs/cgroup:ro sugaharar/centos7-systemd
  5. 5. PuppetとDocker garethr/dockerモジュール https://forge.puppet.com/garethr/docker dockerコマンドでできる事はほぼマニフェストとして記述できます! Puppet ForgeでAPPROVEDになっています これがベースとなっていると思わしきPuppet社公式モジュールも新たに出ています。 puppetlabs/docker_platformモジュール https://forge.puppet.com/puppetlabs/docker_platform 今回はgarethr/dockerモジュールを使ってdockerをいろいろ弄ってみます!
  6. 6. コンテナを起動する(Puppet編) Docker EnterpriseのWebコンソールを確認してから以下のマニフェストを実行します。 docker::run { 'sugaharar': ensure => present, image => 'sugaharar/centos7-systemd', privileged => true, tty => true, hostname => 'sugaharar', ports => ['22',], } 削除はコチラ docker::run { 'sugaharar': ensure => absent, image => 'sugaharar/centos7-systemd', }
  7. 7. Puppet EnterpriseのGUIから制御する このように単にモジュールを呼び出すだけなら簡単ですけど、 それでは芸が無い(?)のでちょっとだけ便利にします。 1. 1回の呼び出しで複数のコンテナを起動/停止できる 2. コンテナ起動と同時にPuppetエージェント自動インストール&自動登録 3. コンテナ停止と同時にPuppetエージェントの登録解除
  8. 8. ハッシュを受け取るクラスを作って、イテレータでループさせます。 イテレータはPuppet v4系から使えるようになりました! class wrap_docker ( Hash $lst_container, ){ $lst_container.each |$container_name| { docker::run { $container_name[0]: ensure => $container_name[1], image => 'sugaharar/centos7-systemd', privileged => true, tty => true, hostname => $container_name[0], hostentries => [ 'vpe:192.168.2.2', ], ports => ['22',], } } } マニフェストを作る(その1)
  9. 9. コンテナ起動の時はPuppetエージェントインストールします。 docker::execクラスを使うと起動したコンテナで任意のコマンドを実行できます。 if $container_name[1] == 'present' { docker::exec { "puppet_agent_install_${container_name[0]}": detach => false, container => $container_name[0], command => '/bin/sh -c '/usr/bin/curl -k https://vpe:8140/packages/current/install.bash | /bin/bash -s'', tty => true, unless => '/bin/test -d /etc/puppetlabs', require => Docker::Run[$container_name[0]], } } マニフェストを作る(その2)
  10. 10. コンテナ停止の時はsshを使って直接ノードをpurgeしてしまいます。 elsif $container_name[1] == 'absent' { exec { "purge_container_node_${container_name[0]}": command => "/usr/bin/ssh vpe 'puppet node purge ${container_name[0]}'", onlyif => "/usr/bin/ssh vpe 'puppet cert list ${container_name[0]}'", } } マニフェストを作る(その3)
  11. 11. class wrap_docker ( Hash $lst_container, ){ $lst_container.each |$container_name| { docker::run { $container_name[0]: ensure => $container_name[1], image => 'sugaharar/centos7-systemd', privileged => true, tty => true, hostname => $container_name[0], hostentries => [ 'vpe:192.168.2.2', ], ports => ['22',], } if $container_name[1] == 'present' { docker::exec { "puppet_agent_install_${container_name[0]}": detach => false, container => $container_name[0], command => '/bin/sh -c '/usr/bin/curl -k https://vpe:8140/packages/current/install.bash | /bin/bash -s'', tty => true, unless => '/bin/test -d /etc/puppetlabs', require => Docker::Run[$container_name[0]], } } elsif $container_name[1] == 'absent' { exec { "purge_container_node_${container_name[0]}": command => "/usr/bin/ssh vpe 'puppet node purge ${container_name[0]}'", onlyif => "/usr/bin/ssh vpe 'puppet cert list ${container_name[0]}'", } } } } 完成したマニフェスト
  12. 12. 使ってみよう! Puppet Enterpriseから実際にコンテナの起動と停止をしてみましょう! コンテナ起動: {"www01": "present", "www02": "present"} コンテナ停止: {"www01": "absent", "www02": "absent"}
  13. 13. まとめ ・Puppet ForgeのDockerモジュールでDockerを簡単制御 ・Puppet EnterpriseのGUIとDockerの組み合わせは便利 ・いろいろ応用しよう!
  14. 14. ご清聴ありがとうございました

×