オープンクラウド・キャンパス



Linux KVMとKickStartとPuppetと
GitHubで作るパーソナルクラウド




          Ver1.0 2012/12/16
       中井悦司 (Twitter @enakai00)
クラウドが実現するソフト開発・運用の変革と自動化

    自己紹介
     中井悦司(なかいえつじ)
       – Twitter @enakai00

     日々の仕事
       – Senior Solution Architect and
         Cloud Evangelist at Red Hat K.K.   好評発売中
         企業システムでオープンソースの活用を希望される
         お客様を全力でご支援させていただきます。


     昔とった杵柄
       – 素粒子論の研究(超弦理論とか)
       – 予備校講師(物理担当)
       – インフラエンジニア(Unix/Linux専門)




2                                                   Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

    最近やってること (1)
                                                             特にQuantum関係




    http://www.slideshare.net/enakai/how-quantum-configures-virtual-networks-under-the-hood

3                                                                                 Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

    最近やってること (2)

                                                        自動化ツールの研究




              http://www.slideshare.net/enakai/ss-15242229

4                                                              Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

    Aeolus Conductor           「Aeolus(アイオロス)でRHELonEC2を利用する」
                                               http://bit.ly/QzniL4


     複数クラウドに対応したイメージ作成/アプリケーション環境構築の自動化ツール




5                                                       Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

    「パーソナルクラウド」における自動化の実例
                                                                                                Github
     図の①〜③を1つの設定ファイルを元に自動実行するスクリプト
      を作成して、「パーソナルクラウド」として活用

    OS/アプリケーション                                                            アプリ設定情報
                                      OS構成情報
        パッケージ                                                          (Puppet Manifest)
                                      (KickStartファイル)


                         Kickstart                    ③ アプリ導入/設定
        YUM                                                Git/Puppet
       リポジトリ                  ② OS/アプリ導入
                                                                                           設定ファイルの
                                                                                           バージョン管理
                              VM                               ① VM作成
        Apache                                                                     VM構成情報
      HTTP Server                             KVM                                  (virt-installコマンドの
                                                                                   パラメータ群)

                      Red Hat Enterprise Linux 6           libvirt
                            x86_64サーバ

     詳細は「アプリケーション環境構築の自動化をまじめに考えてみる(1)〜(4)」を参照
6    http://bit.ly/SRfpwb http://bit.ly/O9xgAa http://bit.ly/Qij9Gx http://bit.ly/QB9POk      Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

    主な利用ツール (1)

     libvirt
       – Linux KVM, Xen, LXC などの仮想化環境をプログラムから操作するための標準ライブラ
         リ(C言語、Pythonなどから利用可能)。
       – VM、仮想ディスクイメージ、仮想ネットワークの作成・操作が可能。
       – ここでは、libvirtを利用したコマンドvirt-installを使って、VMの自動作成を行なってい
         る。


     virt-installのコマンドオプションの例
      # virt-install 
                --name ${vmname} 
                --vcpus ${vcpus} 
                --ram ${ram} 
                --disk path=${diskpath},size=${disksize},sparse=false 
                --network ${network} 
                --os-variant ${os-variant} 
                --location ${url} 
                --vnc




7                                                                         Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

    主な利用ツール (2)

     KickStart                  KickStartファイルの例
       – RHELのインストーラ(Anaconda)   url --url=${url}
        の一機能。GUIインストーラで入力す       lang ja_JP.UTF-8
        る項目を事前に書き込んだテキスト         keyboard jp106
                                 network --onboot yes --device eth0 --bootproto
        ファイル(KickStartファイル)を利    static --ip ${ip} --netmask ${netmask}
        用して、RHELのインストールを全自       --gateway ${gateway} --nameserver ${nameserver}
        動で行う。                    --hostname ${hostname}
                                 rootpw passw0rd
       – インストール後に指定のスクリプト        timezone --isUtc Asia/Tokyo
                                 bootloader --location=mbr
         (Postスクリプト)を実行すること
                                 zerombr
         ができる。                   clearpart --initlabel --drives=vda
       – ここでは、RHELを自動インストール      part /boot --fstype=ext4 --size=500
                                 part swap --size=1024
         した後に、Git/Puppetによるアプリ   part / --fstype=ext4 --grow --size=200
         ケーション導入・設定をキックしてい       reboot
                                 %packages
         る。
                                 @base
                                 @core
                                 @japanese-support
                                 %end
                                 %post --log=/root/anaconda-post.log
                                 set -x
                                 echo "${ip}    ${hostname}" >> /etc/hosts
                                 %end

8                                                                   Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

    主な利用ツール (3)
                             Puppetマニフェストの例
     Puppet
                             class pgsql {
      – OS/アプリケーションの構成管理       service { 'postgresql':
        ツール。「あるべき状態」を宣言的         name
                                 ensure
                                           => 'postgresql',
                                           => running,
        に記述した「マニフェスト」に従っ         enable    => true,
                                 subscribe => Package['postgresql-server'],
        て、アプリケーションの導入、設定       }
        ファイルの書き換えなどを自動実行       package { 'postgresql-server':
        する。                      name   => 'postgresql-server',
                                 ensure => installed,
      – 管理対象サーバが多数ある場合は、       }
        専用の「Puppetサーバ」からマニ     file { '/var/lib/pgsql/data/postgresql.conf':
        フェストの配布を行うクライアン          owner   => 'postgres',
                                 group   => 'postgres',
        ト・サーバモデルで使用する。           mode    => '0600',
                                 source => "$FACTER_manifest_dir/dist/postgresql.conf",
      – ここでは、Puppetサーバは使わず       notify => Service['postgresql'],
        に、Githubからマニフェストをダ     }
                                 require => Exec['initdb'],

        ウンロードして、直接に適用する形
                              exec { 'initdb':
        で利用している。                path      => '/sbin',
                                command   => 'service postgresql initdb',
                                logoutput => true,
                                creates   => '/var/lib/pgsql/data/PG_VERSION',
                                before    => Service['postgresql'],
                                require   => Package['postgresql-server'],
                                notify    => Exec['init_pw'],
                              }
                             ・・・

9                                                                       Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

 主な利用ツール (4)

  Git
      – プログラムソースコードの分散バージョン管理システム。元々はLinux Kernelの開発用に
        作成された。インターネット上にコードリポジトリを作成して無料で利用できるサービ
        ス「Github」の登場により、利用者が増加した。
      – ここでは、Puppetの設定ファイル(マニフェスト)をGithubにおいて、Kickstartの
        Postスクリプトから、指定バージョンのマニフェストのダウンロードと適用を実行して
        いる。

     Githubからマニフェストを取得して適用するスクリプトの例
     mkdir -p /tmp/gittmp
     cd /tmp/gittmp
     git clone $GitRepository
     cd $RepoName
     git checkout $ConfigTag
     export FACTER_manifest_dir="/tmp/gittmp/$RepoName"
     puppet main.pp




10                                                        Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

 (参考)Githubのスクリーンショット



                             リポジトリの公開URL




                            過去の変更履歴を
                              全て保存

      特定の時点のコードを
        タグ名で指定


11                                     Open Cloud Campus
クラウドが実現するソフト開発・運用の変革と自動化

 「パーソナルクラウド」自動化における考察

  便利な点
     – 設定ファイルの再利用性
       • テキストファイルにすべての設定が記録されているので、設定変更が簡単で、少しづ
         つ設定の異なる類似環境を何度でも再構築できる。
       • Puppetのマニフェストがバージョン管理されているので、バージョン番号を指定す
         るだけで、特定バージョンの設定が適用できる。            Github
  不便な点
     – 単一の物理サーバが前提
       • 複数の物理サーバへのデプロイはできない。     v1.0   v1.1
     – 複数VMの依存関係が扱えない
       • Puppetはサーバ間の依存関係を解決する機能がないので、「DBサーバとWebサーバ
         を連携させる」ような設定はできない。
       • 現状では、必要な際は、手続き型のスクリプトで連携処理を行なっている。(ので、
         Puppetの「宣言的記述」のメリットが半減してしまう。)


     ⇒ 本格的な自動化ツールでは、複数ノードへのデプロイと複数VMの依存関係の取り扱い 
      が必要。
12                                              Open Cloud Campus
オープンクラウド・キャンパス



クラウドの自動化とソフトウェア開発の
 未来を一緒に考えて行きましょう!




            中井悦司
       Twitter @enakai00

Personal Cloud Automation

  • 1.
  • 2.
    クラウドが実現するソフト開発・運用の変革と自動化 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 好評発売中 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 2 Open Cloud Campus
  • 3.
    クラウドが実現するソフト開発・運用の変革と自動化 最近やってること (1) 特にQuantum関係 http://www.slideshare.net/enakai/how-quantum-configures-virtual-networks-under-the-hood 3 Open Cloud Campus
  • 4.
    クラウドが実現するソフト開発・運用の変革と自動化 最近やってること (2) 自動化ツールの研究 http://www.slideshare.net/enakai/ss-15242229 4 Open Cloud Campus
  • 5.
    クラウドが実現するソフト開発・運用の変革と自動化 Aeolus Conductor 「Aeolus(アイオロス)でRHELonEC2を利用する」 http://bit.ly/QzniL4  複数クラウドに対応したイメージ作成/アプリケーション環境構築の自動化ツール 5 Open Cloud Campus
  • 6.
    クラウドが実現するソフト開発・運用の変革と自動化 「パーソナルクラウド」における自動化の実例 Github  図の①〜③を1つの設定ファイルを元に自動実行するスクリプト を作成して、「パーソナルクラウド」として活用 OS/アプリケーション アプリ設定情報 OS構成情報 パッケージ (Puppet Manifest) (KickStartファイル) Kickstart ③ アプリ導入/設定 YUM Git/Puppet リポジトリ ② OS/アプリ導入 設定ファイルの バージョン管理 VM ① VM作成 Apache VM構成情報 HTTP Server KVM (virt-installコマンドの パラメータ群) Red Hat Enterprise Linux 6 libvirt x86_64サーバ 詳細は「アプリケーション環境構築の自動化をまじめに考えてみる(1)〜(4)」を参照 6 http://bit.ly/SRfpwb http://bit.ly/O9xgAa http://bit.ly/Qij9Gx http://bit.ly/QB9POk Open Cloud Campus
  • 7.
    クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (1)  libvirt – Linux KVM, Xen, LXC などの仮想化環境をプログラムから操作するための標準ライブラ リ(C言語、Pythonなどから利用可能)。 – VM、仮想ディスクイメージ、仮想ネットワークの作成・操作が可能。 – ここでは、libvirtを利用したコマンドvirt-installを使って、VMの自動作成を行なってい る。 virt-installのコマンドオプションの例 # virt-install --name ${vmname} --vcpus ${vcpus} --ram ${ram} --disk path=${diskpath},size=${disksize},sparse=false --network ${network} --os-variant ${os-variant} --location ${url} --vnc 7 Open Cloud Campus
  • 8.
    クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (2)  KickStart KickStartファイルの例 – RHELのインストーラ(Anaconda) url --url=${url} の一機能。GUIインストーラで入力す lang ja_JP.UTF-8 る項目を事前に書き込んだテキスト keyboard jp106 network --onboot yes --device eth0 --bootproto ファイル(KickStartファイル)を利 static --ip ${ip} --netmask ${netmask} 用して、RHELのインストールを全自 --gateway ${gateway} --nameserver ${nameserver} 動で行う。 --hostname ${hostname} rootpw passw0rd – インストール後に指定のスクリプト timezone --isUtc Asia/Tokyo bootloader --location=mbr (Postスクリプト)を実行すること zerombr ができる。 clearpart --initlabel --drives=vda – ここでは、RHELを自動インストール part /boot --fstype=ext4 --size=500 part swap --size=1024 した後に、Git/Puppetによるアプリ part / --fstype=ext4 --grow --size=200 ケーション導入・設定をキックしてい reboot %packages る。 @base @core @japanese-support %end %post --log=/root/anaconda-post.log set -x echo "${ip} ${hostname}" >> /etc/hosts %end 8 Open Cloud Campus
  • 9.
    クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (3) Puppetマニフェストの例  Puppet class pgsql { – OS/アプリケーションの構成管理 service { 'postgresql': ツール。「あるべき状態」を宣言的 name ensure => 'postgresql', => running, に記述した「マニフェスト」に従っ enable => true, subscribe => Package['postgresql-server'], て、アプリケーションの導入、設定 } ファイルの書き換えなどを自動実行 package { 'postgresql-server': する。 name => 'postgresql-server', ensure => installed, – 管理対象サーバが多数ある場合は、 } 専用の「Puppetサーバ」からマニ file { '/var/lib/pgsql/data/postgresql.conf': フェストの配布を行うクライアン owner => 'postgres', group => 'postgres', ト・サーバモデルで使用する。 mode => '0600', source => "$FACTER_manifest_dir/dist/postgresql.conf", – ここでは、Puppetサーバは使わず notify => Service['postgresql'], に、Githubからマニフェストをダ } require => Exec['initdb'], ウンロードして、直接に適用する形 exec { 'initdb': で利用している。 path => '/sbin', command => 'service postgresql initdb', logoutput => true, creates => '/var/lib/pgsql/data/PG_VERSION', before => Service['postgresql'], require => Package['postgresql-server'], notify => Exec['init_pw'], } ・・・ 9 Open Cloud Campus
  • 10.
    クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (4)  Git – プログラムソースコードの分散バージョン管理システム。元々はLinux Kernelの開発用に 作成された。インターネット上にコードリポジトリを作成して無料で利用できるサービ ス「Github」の登場により、利用者が増加した。 – ここでは、Puppetの設定ファイル(マニフェスト)をGithubにおいて、Kickstartの Postスクリプトから、指定バージョンのマニフェストのダウンロードと適用を実行して いる。 Githubからマニフェストを取得して適用するスクリプトの例 mkdir -p /tmp/gittmp cd /tmp/gittmp git clone $GitRepository cd $RepoName git checkout $ConfigTag export FACTER_manifest_dir="/tmp/gittmp/$RepoName" puppet main.pp 10 Open Cloud Campus
  • 11.
    クラウドが実現するソフト開発・運用の変革と自動化 (参考)Githubのスクリーンショット リポジトリの公開URL 過去の変更履歴を 全て保存 特定の時点のコードを タグ名で指定 11 Open Cloud Campus
  • 12.
    クラウドが実現するソフト開発・運用の変革と自動化 「パーソナルクラウド」自動化における考察 便利な点 – 設定ファイルの再利用性 • テキストファイルにすべての設定が記録されているので、設定変更が簡単で、少しづ つ設定の異なる類似環境を何度でも再構築できる。 • Puppetのマニフェストがバージョン管理されているので、バージョン番号を指定す るだけで、特定バージョンの設定が適用できる。 Github  不便な点 – 単一の物理サーバが前提 • 複数の物理サーバへのデプロイはできない。 v1.0 v1.1 – 複数VMの依存関係が扱えない • Puppetはサーバ間の依存関係を解決する機能がないので、「DBサーバとWebサーバ を連携させる」ような設定はできない。 • 現状では、必要な際は、手続き型のスクリプトで連携処理を行なっている。(ので、 Puppetの「宣言的記述」のメリットが半減してしまう。) ⇒ 本格的な自動化ツールでは、複数ノードへのデプロイと複数VMの依存関係の取り扱い   が必要。 12 Open Cloud Campus
  • 13.