環境
- Rancher Server兼Dockerホスト: Ubuntu 16.04 LTS(bento/ubuntu-16.04(v201708.22.0))
- Rancher v1.6.7
- Cattle v0.183.5
- User Interface v1.6.17
- Rancher CLI v0.6.3
- Rancher Compose v0.12.5
Rancherとは?
Dockerコンテナを管理するためのインフラサービス(ストレージ、ネットワーク、ロードバランサ、DNS、セキュリティ機能など)を提供するソフトウェア
更に、各種CI/CDツールやコンテナオーケストレーションツールと連携する事で、統合的なコンテナ管理環境を実現する。
本番環境レベルの運用管理を目指して開発されている。
Overview
- インフラサービス: インフラサービス自体のコンテナ化により、マルチクラウド、オンプレミス両方で使える
- コンテナオーケストレーション、スケジューリング: CattleもしくはDocker Swarm, Kubernetes, Methosなどを利用可
- アプリケーションカタログ: クラスター化されたコンテナをアプリケーションの「カタログ」として予め用意し、そこからデプロイ可能。パブリックなカタログを共有する事も出来るし、プライベートなカタログも作成可能。
- エンタープライズレベルの認証機能。Active Directory, LDAP, Github連携。ロールベースのアクセス制御(RBAC)
クイックスタート
インストール
必要なもの
- Dockerが動作可能なLinuxホスト
- Docker
※ プロキシ配下で動かす場合はDockerのProxy設定を入れる事。
https://docs.docker.com/engine/admin/systemd/#httphttps-proxy
ホスト追加
Host Registration URL
Rancher APIが提供される(=Rancher Serverが動いているサーバの)URL
Dockerホストから本URLのAPIを叩く必要があるため、全ホストから到達可能である必要あり。
つまりパブリッククラウド上のDockerホスト(AWS,Azure,etc.)をRancherで管理したければ、インターネットもしくは閉域網でRancher Serverへアクセス出来る環境を用意する必要あり。
カスタムの場合、最低限DockerホストのIPアドレスを指定すればdocker runコマンドが生成される。
それを対象のDockerホスト上で実行する事で、Rancher Agentのコンテナが起動し、自動的にRancher Serverと通信し始める。
Environment
Environment templateに従って生成されたinfrastructure servies群と、各種リソース(ホスト、コンテナなど)、ユーザ・グループ情報をまとめたもの。
利用用途として、開発環境と本番環境とでアクセス制限を分ける等。
Environment template
infrastructure servicesの組み合わせを指定するテンプレート
例えば、コンテナオーケストレーションツールとして、デフォルトのCattleではなく、Kubernetesに変更したり。
DNSサーバとして、外部のDNSサービスを指定したり。
コンテナ起動
RancherのGUIから追加可能。この場合、自動的に10.42.*.*のオーバーレイネットワーク上にデプロイされる。
※オーバーレイネットワークで利用するネットワークアドレスは、Environment TemplateのNetworkingで指定可能。
また、DockerホストでCLIから追加したコンテナをRancherが自動検知してくれる。
Docker CLIで追加した場合、特に指定が無ければ、コンテナが使うIPアドレスはDocker daemon側で割り当てる。
Rancherのオーバーレイネットワーク上にデプロイしたければ、io.rancher.container.network=true
ラベルを追加してコンテナ起動する。
Stack
コンテナのグループ。アプリケーション/システム単位でまとめる。
複数階層のコンテナを用いたアプリケーション
例えば、LB+Web+DBのシンプル構成
GUIから一つずつ作成する場合、
DBサーバ、Webサーバ間の接続は、コンテナ作成時にService Linkを指定する事で実現。
LBはinfrastructure servicesの中に含まれるため、サービスとは別に作成する。LB作成時に紐づけたいサービス(今回はWebサーバ)、ポート等を指定すれば、同じStack内にコンテナとしてデプロイされる。
CLIの場合、docker-compseおよびrancher-composeファイルを用いて定義できる。
rancher-composeはRancherに必要な属性を追加するもの。docker-composeと同じYAML形式。
作成済みスタックから各ファイルを生成する場合、Stack画面の[...] -> Export Config
リモートホストからRancherをCLI操作する場合、各OS用のCLIバイナリとAPIキーが必要。
バイナリはRancher ServerのGUIからダウンロード可能。Win/Mac/Linux版あり。
APIキーはRancher ServerのGUIから、API -> Keysで作成
その他疑問
Q. LBのIPアドレスは指定できるのか?
A. 【TODO】ドキュメント漁って見るも良くわからず。後で調べる。。。
ロードバランサ作成時のオプションには無さそう。。
https://rancher.com/docs/rancher/v1.6/en/cattle/adding-load-balancers/
Rancherでデプロイしたコンテナは自動的にmanagedネットワークへ接続される。
https://rancher.com/docs/rancher/v1.6/en/rancher-services/networking/
Dockerのネットワーク
http://docs.docker.jp/engine/userguide/networking/dockernetworks.html
Q. Service Linkを後で変更できるのか?
A. Service画面のEditで編集可能。
Q. DBサーバのコンテナを作り直すときはどうする?
A. DBサーバのコンテナをアップグレードすればOK。
Cattleの場合、コンテナイメージ更新後、Service画面から対象サービスを選んでUpgrade
指定したイメージの最新版をpullして、新しいコンテナを生成、古いコンテナと入れ替えてくれる。
https://rancher.com/docs/rancher/v1.6/en/cattle/upgrading/
Q. DBデータを永続化したいんだけど?
A. Volume機能でコンテナからアクセス可能な共有ボリュームを作成し、マウントすればOK
https://rancher.com/docs/rancher/v1.6/en/cattle/volumes/
Q. Webサーバのコンテナを追加/削除するときは?
A. EditからScaleを変更
Catalogからコンテナをデプロイ
Catalogとは?
Rancherで利用可能なアプリケーションのテンプレート。複数サービスで構成された複雑なStackを簡単にデプロイできる。
Rancher公式認定のRancher certified catalog、コミュニティ発のcommunity-catalogがある。
また、各自のRancher環境独自のprivate catalogを作成し、使用する事も可能。
デプロイ方法
Stacks -> User -> [Add from Catalog]
後はお好きなCatalogを選択
今回は(何故か?)日本ではチュートリアルによく使われるWordpressのCatalogを使ってみる。
といっても、テンプレートにパラメータを入れてLaunch。デプロイ完了を待てばOK
※ 今回の環境だとデプロイした各種サービスが起動できず。。さすがにbento1個に全部載せるのは辛いか。。。
template version: v0.2-bitmaniの場合、
- 公開ポート番号
- MariaDBユーザ名、パスワード
- WordPress用のDB名
- WordPressユーザ名、パスワード
- Volume driver
最後の「Volume driver」はRancher独自のもの。
Rancher上で動作するコンテナから永続化可能なボリューム(ホストローカル、ないし、共有可能な外部ストレージ上に作成)を扱う際に利用するドライバー
http://rancher.com/docs/rancher/v1.6/en/cattle/volumes/
※ Rancherのストレージ関連は、ynottさんが分かりやすくまとめて下さっていました。ありがとうございます!
http://qiita.com/ynott/items/ca4b440f0d81741447ff
所感
- 牧場主になる思想は好感触。家畜化、大事。
- RancherはDevと連携する前提のOpsツールという位置づけ(だと思ってる)
- CI/CDツールとの連携は必須。
- 前提として、Devの現場がコンテナでの開発に慣れているor慣れる必要あり。
- 今回の環境でWordpressのCatalogからデプロイしたら、コンテナが起動できないまま止まった。Dockerホストのリソース利用状況を確認する方法を考える必要あり。
- RancherでのHostリソース情報は、GUIを開いてないと確認できないし、大まかな全体量しか分からないため、別途監視サーバを立てるべきか?
- 今回、Volumeは作成しなかったが、実際にVolume作った場合、どれくらいのI/O性能が出せるか気になる。