×
  • Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
 

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

on

  • 112 views

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

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

Statistics

Views

Total Views
112
Views on SlideShare
109
Embed Views
3

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 3

https://twitter.com 2

Accessibility

Categories

Upload Details

Uploaded via SlideShare as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Docker上で CloudStackを動かしてみる!! 2014/6/12,14 第18回 CloudStackユーザ会in札幌 / OSC北海道2014
    • わたし 大削 緑/Midori Oge みろりん @star76popin ☆某SI会社 → 某通信事業者 → NTTコミュニケーションズで の開発を担当しています ☆こんな記事を書いてます オープンソースの「クラウド基盤ソフトウェア」を比較する【第1回】 機能を徹底比較! ∼Eucalyptus、CloudStack、OpenStack オープンソースの「クラウド基盤ソフトウェア」を比較する【第2回】 【徹底比較】Eucalyptus、CloudStack、OpenStackの仮想マシン性能 ☆いろんなユーザ会にいます @副会長
    • 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社より 絶賛発売中
    • 今日のテーマ
    • ・GO言語でかかれている Dockerってなぁに? ・オープンソース ・コンテナ型(LXCベース) ・同一の環境を作りやすい ・差分管理型ファイルシステム(AUFS) ・構築を自動化できる(Dockerfile) 軽くて・お手軽
    • OS 速いの ハードウェア プ ロ セ ス プ ロ セ ス ハードウェア プ ロ セ ス プ ロ セ ス プ ロ セ ス プ ロ セ ス ハードウェア ホスト OS プ ロ セ ス プ ロ セ ス ハイパーバイザ 仮想化なし ハイパーバイザ型 仮想化(KVM) コンテナ型仮想化 プ ロ セ ス プ ロ セ ス プ ロ セ ス プ ロ セ ス コンテナ VM OS上で直に動作するプロセスと変わらない カーネル ゲスト OS ゲスト OS OS
    • サイズが小さい ハイパーバイザ型 仮想化(RAW形式) 作成 500MのPKGを インストール 5Gのイメージ 10G5G 別のVM/コンテナ を作成 10.5G 15.5G コンテナ型仮想化 5G5G 5.5G 5.5G (デフォルトのイメージ自体も、超最低限のPKGのみで作られている) 環境ごとにイメージを作らず、差分を保存
    • なぜDocker? ビルドとデプロイが簡単に! ツールでセットアップしたけど間違えてた!やべどやって戻そう… 色々いじれる環境が欲しいけど、VPS1台分しかお金ないや… あーまたビルドし直しだよマンドクセ… え? その手順で俺うまくいったぜ! … Immutableとかカッコよくね? ウソ!手元ではちゃんと動いてたんだってばよ! あー色々いじってたら汚くなっちゃった… イメージライブラリとかあって便利じゃね? LXCじゃなくて?
    • 試してみよう
    • CloudStackの基本コンポーネント ユーザ Management Server Secondary Storage Host Primary Storage VM VM http://hoge.cloudstack.net:8080/client ・GUIを提供 ・リソース管理 ・イベント管理 VMを起動(CPU・メモリ) VMのディスク領域 VMのイメージファイルや ISO、スナップショットを格納 DB
    • 今回試してみたこと Host VM VM Management Server VM コンテナ Host Management Server Secondary Storage Primary Storage CloudStack CloudStack CloudStackのVMの上にコンテナを立てて コンテナの中にCloudStackを作る! DB Secondary Storage Primary Storage
    • (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リポジトリの鍵をキーチェーンに追加
    • $ 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のインストール
    • (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に変更 ーーーーーーーー ここからはコンテナの設定! ーーーーーーーーー
    • 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)セットアップ
    • 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)セットアップ 一度コンテナから抜けます
    • コンテナをイメージ化して起動 $ 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で付与 ⑦ コンテナ名 ⑧ 起動するイメージ ⑨ 起動するデーモン
    • $ 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で確認
    • # 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ユーザのパスワードを設定 ーーーーーーーー ここからはコンテナの設定! ーーーーーーーーー
    • # 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は既知の不具合があるため バージョンダウン
    • おおおおお…!
    • コンテナ どやっ
    • 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> ファイルをコンテナにコピー
    • 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 <実行するプログラム> プログラムの実行
    • 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>
    • 結論 オススメしません
    • シンプルに、 必要なプロセスだけを動作させる コンテナの使い方
    • CloudStack、使ってみてね