Rancherサーバーの起動からコンテナ作成まで #docker #rancher
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
はじめに
昨今コンテナ仮想化、特にDockerの勢いはますます大きくなりつつあります。Dockerの持つ簡便で高速なデプロイや、HashiCorp製品をはじめとしたDevOpsツールとの親和性の高さ、イメージの構築・配布・共有に関する可視性・追跡性の高さなどに魅力を感じている方が多いことから、Dockerを開発者のツールとしてだけではなく、組織で共有するインフラとして採用していく流れが主流になりつつあります。その際にあらわれてくる諸々の課題を解決するツールの発展が今急速に進んでいます。
今回から数回に渡って、RancherというDocker管理ソフトウェアをご紹介します。Rancherは従来開発者の手元のPCや単一のホストで実験的に利用されることの多かったDockerコンテナを、本格的な実運用インフラのレベルまで向上させることを目標としたソフトウェアです。
第一回となる今回は、Rancherの概要から、Rancherマネージャの起動、Docker実行ホストの追加、コンテナ作成について実際の画面などをあげてご紹介します。
Rancher とは
Rancher はオープンソースプロジェクトの1つで,従来開発者の手元のPCや、単一のホストで実験的に利用されることの多かったDockerコンテナを、本格的な実運用インフラのレベルまで向上させることを目標としたソフトウェアです。そのためRancherには従来のDockerにはなかった以下の機能が実装されています。
- Web管理UI
- コンテナ及び実行ホストのデプロイ
- コンテナおよび実行ホストのリソース監視、ロギング
- GitHubアカウントと連携したアクセス制限機能(将来的にはLDAPおよびActiveDirectoryに対応予定)
- Docker HubおよびプライベートDockerリポジトリとの連携
- ユーザごとのリソース分割
- 他の自動化ツールと連携できるREST API
- 複数のクラウドプラットフォームとの連携
- クラウド間をまたいで疎通するオーバーレイ・ネットワーク
- ネットワークロードバランサー
将来的には、コンテナ間で利用可能なSoftware Defined Storageの実装も予定されています。つまりRancherを使うことで、従来OpenStackなどで行われてきたプライベートIaaS環境をDockerベースで構築することが可能になります。
Rancherはオープンソースで開発されており、ソースコードはGithubで公開されています。最初のコミットは昨年の11月(2014/11/08) で、今年に入ってからも週1回のペースでリリースされており、開発が活発に進んでいます。
Rancherの開発メンバーは元Apache CloudStackの開発メンバーであり、Rancherは今までのプライベートIaaSソフトウェアの開発ノウハウが反映されたソフトウェアになっていくと思われます。
Rancherの公式ホームページはhttp://rancher.com/ 、公式GitHubリポジトリは https://github.com/rancherio/rancher です。
動作環境
実際にRacherを動作させるためには、ホスト(物理マシンでも仮想マシンでも可)が最低2台必要です。1台はRancherクラスタ全体を管理するマネージャ、その他は実際にコンテナを動作させるための実行ホストとなります。
それぞれのホストの動作要件は以下のとおりです。
- マネージャ:Ubuntu 14.04以降、もしくはCoreOS 494以降。かつDocker 1.4.1以降が動作すること
- 実行ホスト:Docker 1.4.1以降
今回はRancherマネージャ用と実行ホスト用として、SoftLayer上にそれぞれインスタンスを用意しました。2台ともOS はUbuntu14.04.1 LTSです。(お手元のPCや、他のパブリッククラウドでもUbuntuもしくはCoreOSが動作すれば構成することは可能です)
Rancherマネージャを構築する
まず1台目のVMでRancherマネージャを構築します。
Ubuntu 14.04 を最小構成でインストールし、パッケージを最新にします。
$ sudo apt-get update
wgetコマンドがない場合には追加でインストールします
$ sudo apt-get install wget
最新のDockerパッケージをインストールします
$ wget -qO- https://get.docker.com/ | sh
Dockerが正しくインストールされているか確認する場合には以下のコマンドを実行してください
$ sudo docker run hello-world
Dockerが正しく動作している場合は、Rancherマネージャコンテナを実行します
$ sudo docker run -d -p 8080:8080 rancher/server
マネージャコンテナは実行時初期化に少し(5分程度)時間がかかります。少し後に、Webブラウザで http://<ホストのIPアドレス>:8080/ を開きます。以下のような画面が表示されます。
このままではURLを知っていれば誰でも管理GUIにアクセスできる状態ですので、アクセス制限を設定します。
画面上部のピンク色のリンク(Access Control is not configured Settings)をクリックします。ステップ・バイ・ステップの設定手順が表示されます
ステップ1の、"Click here"のリンクをクリックします。GitHubのOAuth連携設定画面が開きます。画面上部の[Register New Application]ボタンを押します。
管理GUIのガイドの内容に従ってそれぞれ項目を埋めます。特に”Homepage URL”, “Authorization callback URL”は正しい値を入れるようにしてください。
ガイドの内容が以下のような場合、
GitHub側に入力する内容は以下のようになります。入力したら[Register Application]ボタンを押して設定を有効にしてください
GitHub側から"Client ID"および"Client Secret"が払い出されます。
払い出された"Client ID"および"Client Secret"それぞれ管理GUIの入力欄に入れます。入力後の管理GUIの内容は以下のようになります。
最後に、[Authenticate with GitHub]ボタンを押します。
新たにウィンドウが開き、RancherからのアクセスをGitHub側で承認するかどうかの確認画面が表示されます。[Authorize application]ボタンを押して許可します。許可するとダイアログウィンドウは自動的に閉じます。
認証が完了すると、”Access Control is enabled”という表示になり、管理GUIへのログイン制限設定が完了します
コンテナ実行ホストを構成する
続けて実際のコンテナを実行するホストを構成します。
Ubuntu 14.04 を最小構成でインストールし、パッケージを最新にします。
$ sudo apt-get update
wgetコマンドがない場合には追加でインストールします
$ sudo apt-get install wget
最新のDockerパッケージをインストールします
$ wget -qO- https://get.docker.com/ | sh
Dockerが正しくインストールされているか確認する場合には以下のコマンドを実行してください
$ sudo docker run hello-world
Web管理GUI で"Add Host" をクリックします。
PROVIDERで"Custom"を選択すると、画面が以下のように変化します。
画面内の手順3に書かれたコマンドを、
sshログインした仮想マシンのシェルプロンプトにペーストし、実行します
本例では以下のようなコマンドになっています
sudo docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock rancher/agent:v0.5.2 http://192.168.122.66:8080/v1/scripts/A50D2CD7C8D5F4AEC126:1429264800000:jzZJPQjtP8yjFqWS5p6dVbsJfo
上記コマンドを実行すると、自動的にDocker Hubから実行ホストで動作するエージェント用コンテナをダウンロードし、実行します
$ sudo docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock rancher/agent:v0.5.2 http://192.168.122.66:8080/v1/scripts/A50D2CD7C8D5F4AEC126:1429264800000:jzZJPQjtP8yjFqWS5p6dVbsJfo
Unable to find image 'rancher/agent:v0.5.2' locally
Pulling repository rancher/agent
9687c2da5bdc: Download complete
(中略)
4de9b361ce2b: Download complete
Status: Downloaded newer image for rancher/agent:v0.5.2
1de0ca42982031698908c89116ec0e1222b03baf7255f6d835a6b753ba3a5e90
実行後管理GUIの”Add Host”画面の[Close]ボタンを押すと、元の画面に戻ります。2、3分ほど後に、管理画面にコンテナ実行用ホストとしての仮想マシンが出現します
コンテナの作成
ここまででRancherのマネージャと、コンテナ実行用ホストの2台が稼働しています。最後にnginx のコンテナを作成します。
ホスト(画像ではyarai-rancher02)の下にある"+ Add Container" をクリックします。
コンテナ作成のための画面が出てきました。
色々設定項目がありますが、今回はコンテナの名前と元となるイメージだけを設定します。
"Name" にコンテナの名前、"Source Image" に元となるイメージを入力します。
ここでは、両方共"nginx" と入力しました。
入力したら下部にある緑色の "Create" というボタンをクリックします。
元のHosts の画面に戻ります。
先ほどコンテナの作成を指示したコンテナには、コンテナ作成の進捗が表示されます。
nginx 以外にも、"Network Agent" というコンテナも同時に作成されます。
このコンテナはRancher が提供するオーバレイネットワークのエージェントであり、コンテナ実行ホストに初めてコンテナを作成した時に同時に作成されます。
今回,これらのコンテナの作成には1分30秒程かかりました。
2つのコンテナの作成が完了したら,以下のような画面になります.
次に、ブラウザからnginx のページが見れるようにポートバインディングの設定をします。
nginx コンテナの横にあるをクリックします。
出てきたプルダウンメニューから、"Edit" をクリックします。
コンテナの設定画面が出てきました。
今回は,"Port Bindings" の部分を入力します。
"→ 80" の左にあるテキストボックスにコンテナの 80 番ポートにバインドするホストのポートを入力します。
今回は 8888 ポートを指定しました。
入力したら、下部にある緑色の "Save" ボタンをクリックします。
ブラウザで http://< Docker ホストのIP >:8888 にアクセスしてみます。
nginx のページが見れたら、コンテナがうまく作成され動作しています。
おわりに
今回はRancherの概要と、基本的な動作について解説致しました。従来の慣れ親しんだ、IaaS管理ソフトウェアに似ていると感じた方も多いと思います。
次回以降だんだんRancherの特長に踏み込んでいきます。まず複数のパブリッククラウドに実行ホスト、コンテナをデプロイする機能について解説いたします。