14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rancherを触ってみる

Last updated at Posted at 2017-09-19

環境

  • 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性能が出せるか気になる。
14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?