20140612_Docker上でCloudStackを動かしてみる!!

3,753 views

Published on

2014年6月12日に実施された第18回 CloudStackユーザ会@札幌の資料です(・∀・)

Published in: Technology

20140612_Docker上でCloudStackを動かしてみる!!

  1. 1. Docker上で CloudStackを動かしてみる!! 2014/6/12,14 第18回 CloudStackユーザ会in札幌 / OSC北海道2014
  2. 2. わたし 大削 緑/Midori Oge みろりん @star76popin ☆某SI会社 → 某通信事業者 → NTTコミュニケーションズで の開発を担当しています ☆こんな記事を書いてます オープンソースの「クラウド基盤ソフトウェア」を比較する【第1回】 機能を徹底比較! ∼Eucalyptus、CloudStack、OpenStack オープンソースの「クラウド基盤ソフトウェア」を比較する【第2回】 【徹底比較】Eucalyptus、CloudStack、OpenStackの仮想マシン性能 ☆いろんなユーザ会にいます @副会長
  3. 3. CloudStackの青本登場! CloudStack実践ガイド 1. CloudStackってなぁに? 2. CloudStackのしくみ 3. つくってみよう: CloudStackのインストール 4. つかってみよう: CloudStackの基本操作 ! 5. もっとつかってみよう1: APIでもっと便利 6. もっとつかってみよう2: 自分だけのテンプレートを作ろう 7. もっとつかってみよう3: Virtual Private Cloud(VPC)を使おう 8. あたらしい機能たち 9. I♡CloudStack 前 編 後 編 インプレスR&D社より 絶賛発売中
  4. 4. 今日のテーマ
  5. 5. ・GO言語でかかれている Dockerってなぁに? ・オープンソース ・コンテナ型(LXCベース) ・同一の環境を作りやすい ・差分管理型ファイルシステム(AUFS) ・構築を自動化できる(Dockerfile) 軽くて・お手軽
  6. 6. OS 速いの ハードウェア プ ロ セ ス プ ロ セ ス ハードウェア プ ロ セ ス プ ロ セ ス プ ロ セ ス プ ロ セ ス ハードウェア ホスト OS プ ロ セ ス プ ロ セ ス ハイパーバイザ 仮想化なし ハイパーバイザ型 仮想化(KVM) コンテナ型仮想化 プ ロ セ ス プ ロ セ ス プ ロ セ ス プ ロ セ ス コンテナ VM OS上で直に動作するプロセスと変わらない カーネル ゲスト OS ゲスト OS OS
  7. 7. サイズが小さい ハイパーバイザ型 仮想化(RAW形式) 作成 500MのPKGを インストール 5Gのイメージ 10G5G 別のVM/コンテナ を作成 10.5G 15.5G コンテナ型仮想化 5G5G 5.5G 5.5G (デフォルトのイメージ自体も、超最低限のPKGのみで作られている) 環境ごとにイメージを作らず、差分を保存
  8. 8. なぜDocker? ビルドとデプロイが簡単に! ツールでセットアップしたけど間違えてた!やべどやって戻そう… 色々いじれる環境が欲しいけど、VPS1台分しかお金ないや… あーまたビルドし直しだよマンドクセ… え? その手順で俺うまくいったぜ! … Immutableとかカッコよくね? ウソ!手元ではちゃんと動いてたんだってばよ! あー色々いじってたら汚くなっちゃった… イメージライブラリとかあって便利じゃね? LXCじゃなくて?
  9. 9. 試してみよう
  10. 10. CloudStackの基本コンポーネント ユーザ Management Server Secondary Storage Host Primary Storage VM VM http://hoge.cloudstack.net:8080/client ・GUIを提供 ・リソース管理 ・イベント管理 VMを起動(CPU・メモリ) VMのディスク領域 VMのイメージファイルや ISO、スナップショットを格納 DB
  11. 11. 今回試してみたこと Host VM VM Management Server VM コンテナ Host Management Server Secondary Storage Primary Storage CloudStack CloudStack CloudStackのVMの上にコンテナを立てて コンテナの中にCloudStackを作る! DB Secondary Storage Primary Storage
  12. 12. (1)Dockerのインストール $ uname -a ! カーネルのアップデート(以下はkernel3.8未満の場合のみ実施) $ sudo apt-get update $ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring $ sudo reboot 今回は、Ubuntu12.04-4 Desktop版を使用 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 ! Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret- keyring /tmp/tmp.DSfHFTfBuw --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/ trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp:// keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 gpg: requesting key A88D21E9 from hkp server keyserver.ubuntu.com gpg: key A88D21E9: public key "Docker Release Tool (releasedocker) <docker@dotcloud.com>" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) 3.8未満の場合は置き換える Dockerリポジトリの鍵をキーチェーンに追加
  13. 13. $ sudo vi /etc/apt/sources.list.d/docker.list deb https://get.docker.io/ubuntu docker main ! $ sudo apt-get update Dockerリポジトリの登録 ← 記入 $ sudo apt-get install lxc-docker ! $ sudo docker version Client version: 1.0.0 Client API version: 1.12 Go version (client): go1.2.1 Git commit (client): 63fe64c Server version: 1.0.0 Server API version: 1.12 Go version (server): go1.2.1 Git commit (server): 63fe64c Dockerのインストール (1)Dockerのインストール
  14. 14. (2)セットアップ $ sudo docker run -t -i ubuntu:12.04 /bin/bash root@31d57febb148:/# ! ! ! ! イメージからコンテナを起動 ① ② ③ ① runでコンテナ起動 (シェルを起動するときは、-t tty割り当て、-i 対話モードをつける) ② Dockerリポジトリのubuntu12.04を使用 ③ シェルを起動 # echo 'root:<PASSWORD>' | chpasswd ! # cp /usr/share/zoneinfo/Japan /etc/localtime # date Thu Jun 10 22:12:45 JST 2014 ! # apt-get install vim コンテナでの初期設定 パスワード変更 ↑ コンテナに入った localtimeをUTCからJSTに変更 ーーーーーーーー ここからはコンテナの設定! ーーーーーーーーー
  15. 15. CloudStackリポジトリの設定 # vi /etc/apt/sources.list.d/cloudstack.list deb http://repo.star76.jp/ubuntu/ ./ ! (次の1行はCloudStackのリポジトリを使用する場合のみ実施) # wget -O - http://cloudstack.apt-get.eu/release.asc|apt-key add - ! # apt-get update 公式リポジトリのパッケージを使うと エラーが出るため、リポジトリを変更しています パッケージのインストール # apt-get install -y openssh-server mysql-server supervisor net-tools inetutils-ping supervisordの設定 # mkdir /var/run/sshd # mkdir -p /var/log/supervisor # mkdir -p /etc/supervisor/conf.d/ # vi /etc/supervisor/conf.d/supervisord.conf [supervisord] nodaemon=true ! [program:sshd] command=/usr/sbin/sshd -D ! [program:mysqld] command=/usr/bin/mysqld_safe (2)セットアップ
  16. 16. mysqlの設定 # vi /etc/mysql/my.cnf ! [mysqld] # bind-address = 127.0.0.1 ! bind-address = 0.0.0.0 innodb_rollback_on_timeout=1 innodb_lock_wait_timeout=600 max_connections=350 log-bin=mysql-bin binlog-format = 'ROW' [mysqld]セクションの “bind-address”の行をコメントアウト [mysqld]セクションに追記 bind-addressの値を変更して ホストから接続できるようにします コンテナから抜ける # exit (2)セットアップ 一度コンテナから抜けます
  17. 17. コンテナをイメージ化して起動 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 31d57febb148 ubuntu:12.04 /bin/bash 37 minutes ago Exited (0) About a minute ago boring_tesla ! ! $ sudo docker commit 31d57febb148 <REPOSITORY NAME>/<TAG NAME> 477270d630b2e7b0ae0017381f049205bf788d6d125986824f984cc2bde5cbb3 ! ! $ sudo docker run --privileged -d -p 22 -p 3306 -p 8080 -h management.hoge.local --name="management-server" <REPOSITORY NAME>/<TAG NAME> /usr/bin/supervisord ! d4575d79977eae86df3c7b1efcd4e389146c1fbe7395dbb5b2644fd1831c90ff ! ! ! ! ! ! (2)セットアップ コンテナの一覧を表示 ① ② ③ ① コンテナをイメージ化 ② コンテナID ③ イメージ名 新しくコンテナが起動 ④ ⑤ ⑥ ⑦ ⑧ ⑨ ④ コンテナに特権モードを付与 ⑤ 22,3306,8080ポートを開放 ⑥ ホスト名をfqdnで付与 ⑦ コンテナ名 ⑧ 起動するイメージ ⑨ 起動するデーモン
  18. 18. $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4575d79977e mirorin/test:latest /usr/bin/supervisord About a minute ago Up About a minute 0.0.0.0:49161->22/tcp, 0.0.0.0:49162->3306/tcp, 0.0.0.0:49163->8080/tcp management-server 31d57febb148 ubuntu:12.04 /bin/bash 50 minutes ago Exited (0) 13 minutes ago ! 起動したコンテナの情報を表示 (2)セットアップ コンテナのポートとのマッピングが表示される $ ssh root@<DOCKER0 IP> -p <PORT> コンテナにssh接続 “DOCKER 0 IP”は、ifconfigで確認
  19. 19. # mysql -uroot -p ! mysql> SHOW VARIABLES WHERE Variable_name='innodb_rollback_on_timeout' OR Variable_name='innodb_lock_wait_timeout' OR Variable_name='max_connections'; ! mysql> SELECT host,user FROM mysql.user; ! mysql> DELETE FROM mysql.user WHERE host='::1'; ! mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<PASSWORD>' WITH GRANT OPTION; ! mysql> FLUSH PRIVILEGES; mysql> quit; mysqlの設定 (2)セットアップ my.cnfの内容が反映されているか確認 rootユーザのパスワードを設定 ーーーーーーーー ここからはコンテナの設定! ーーーーーーーーー
  20. 20. # apt-get install cloudstack-management ! # wget http://launchpadlibrarian.net/88151258/tomcat6_6.0.33-1_all.deb # wget http://launchpadlibrarian.net/88151257/tomcat6-common_6.0.33-1_all.deb # wget http://launchpadlibrarian.net/88151260/libtomcat6-java_6.0.33-1_all.deb # dpkg -i tomcat6-common_6.0.33-1_all.deb # dpkg -i tomcat6_6.0.33-1_all.deb # dpkg -i libtomcat6-java_6.0.33-1_all.deb # dpkg -l | grep tomcat ! # cloudstack-setup-databases cloud:<PASSWORD>@localhost --deploy-as=root:<PASSWORD> ! # cloudstack-setup-management CloudStackのインストール (2)セットアップ Management Serverをインストール データベースのセットアップ Management Serverのセットアップ Tomcat6.0.35は既知の不具合があるため バージョンダウン
  21. 21. おおおおお…!
  22. 22. コンテナ どやっ
  23. 23. Dockerfile # CloudStack 4.3 Management Server installation # VERSION 0.1 ! FROM ubuntu:12.04 MAINTAINER star76 "mirorin@cloudstackers.net" ! # initial settings ENV DEBIAN_FRONTEND noninteractive RUN echo 'root:<PASSWORD>' | chpasswd RUN cp /usr/share/zoneinfo/Japan /etc/localtime ! # preparing repository ADD cloudstack.list /etc/apt/sources.list.d/ RUN apt-get update ! # settings for supervisord RUN apt-get install -y openssh-server mysql-server supervisor net-tools RUN mkdir /var/run/sshd/ RUN mkdir -p /var/log/supervisor/ RUN mkdir -p /etc/supervisor/conf.d/ ADD supervisord.conf /etc/supervisor/conf.d/ ! # mysql configuration ADD my.cnf /etc/mysql/ RUN (/usr/bin/mysqld_safe &); sleep 5; echo "DELETE FROM mysql.user WHERE host='::1';SET PASSWORD FOR root@localhost = PASSWORD('<PASSWORD>'); GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<PASSWORD>' WITH GRANT OPTION; FLUSH PRIVILEGES;" | mysql -uroot FROM <image:tag> ベースイメージを指定 RUN <command> コマンドを実行 ENV <key> <value> 環境変数をセット ADD <src> <dst> ファイルをコンテナにコピー
  24. 24. Dockerfile(続き) # CloudStack installation RUN apt-get install -y --force-yes cloudstack-management RUN wget http://launchpadlibrarian.net/88151258/tomcat6_6.0.33-1_all.deb RUN wget http://launchpadlibrarian.net/88151257/tomcat6-common_6.0.33-1_all.deb RUN wget http://launchpadlibrarian.net/88151260/libtomcat6-java_6.0.33-1_all.deb RUN dpkg -i tomcat6-common_6.0.33-1_all.deb RUN dpkg -i tomcat6_6.0.33-1_all.deb RUN dpkg -i libtomcat6-java_6.0.33-1_all.deb ! # port expose EXPOSE 22 EXPOSE 3306 ! # CMD execution CMD "/usr/bin/supervisord" https://github.com/mirorin/CloudStack_on_Docker EXPOSE <port> コンテナが公開するポート番号 CMD <実行するプログラム> プログラムの実行
  25. 25. Dockerfileの使い方 イメージでコンテナを起動してsshログイン CloudStackのセットアップ # cloudstack-setup-databases cloud:<PASSWORD>@localhost --deploy-as=root:<PASSWORD> # cloudstack-setup-management $ sudo docker build -t <REPOSITORY NAME>/<TAG NAME> . ビルドしてイメージ作成 $ sudo docker run --privileged -d -p 22 -p 3306 -p 8080 -h <SERVERNAME>.<DOMAIN> -- name="management-server" <REPOSITORY NAME>/<TAG NAME> /usr/bin/supervisord ! $ sudo docker ps -a ! # ssh root@<DOCKER 0 IP> -p<PORT>
  26. 26. 結論 オススメしません
  27. 27. シンプルに、 必要なプロセスだけを動作させる コンテナの使い方
  28. 28. CloudStack、使ってみてね

×