RancherのOpenStack Driverを試す
少し前に試したけど記録していなかったのでその記録。Rancherは2015年に RancherOSの起動時の仕組みを調べて以降あまり追っていなかったのだけど、最近話題なのとコンテナオーケストレーション周りをキャッチアップしないとな、ということで触ることにした。
構成
こんな感じの構成になる予定。OpenStackのAPIを叩くため、専用のネットワークに繋げている。
Rancher Serverの構築と準備
まずはRancherServerを構築する。今回は、OpenStack上にインスタンス(rancher-server)を1台作成し、その上のDockerに起動する。イメージは素朴にubuntu-16.04を選択し、 https://docs.docker.com/engine/installation/linux/ubuntu/ に従って、Dockerをインストールする。インストールが終わったら、rancherを起動。
$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
ふむふむ。
ubuntu@rancher-server:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac7dadb5930a rancher/server "/usr/bin/entry /u..." 31 seconds ago Up 29 seconds 3306/tcp, 0.0.0.0:8080->8080/tcp pedantic_hopper
rancher-serverにはFloatingIPを付与してあるので、http://floating-ip:8080/ でアクセスできる。なお、8080番ポートをSGで許可しておく必要がある。
画面が見えた。次は、ユーザを作成する。ADMIN=>AccessControllから作成できる。ユーザを作ったらKubernets用のEnvironmentを作成する。Default=>ManageEnvironmentから追加できる。EnvironmentTemplateにはKubernetesを選択し、AccessControlでは先ほど作成したユーザがownerになるようにする。作成したら、それをデフォルトにして、Environmentの準備は完了。
Kubernetes用のホスト登録
さて、次はKubernetesを動かすためのホストを追加していく。OpenStackのインスタンスをホストにしたいので、MachineDriverを有効にする。ADMIN=>MachineDriversからOpenStackをActivateしよう。
次はホストの追加を行う。画面からポチポチ作っても良いが、コマンドラインからやろう。画面右下からCLIをダウンロードできる。CLIからrancher-serverを使うため、URLとアクセス用のキーを登録する。キーはAPI=>Keysから生成できます。
$ rancher config create-staging-bastion-2 ✭ ![◼](https://s.w.org/images/core/emoji/13.1.0/72x72/25fc.png)URL []: http://floating-ip:8080/
Access Key []: XXXXXXXXXXXXXXXXXXXXX
Secret Key []: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Environments:
[1] Default(1a5)
[2] k8s-test(1a7)
Select: 2
INFO[0014] Saving config to /Users/r_takaishi/.rancher/cli.json
さて、ホストの追加だが…こんな感じでできる。イメージにはUbuntuを使ってみる。
rancher --env k8s-test host create --name k8s-1 --driver openstack \
--openstack-auth-url http://openstack-internal-endpoint:35357/v2.0 \
--openstack-username r_takaishi \
--openstack-tenant-name my-tenant \
--openstack-availability-zone my-a \
--openstack-password XXXXXX \
--openstack-region RegionOne \
--openstack-flavor-name m1.large \
--openstack-image-name ubuntu-14.04 \
--openstack-net-name rancher-internal \
--openstack-keypair-name rancher \
--openstack-ssh-user ubuntu \
--openstack-private-key-file /opt/rancher.pem \
--openstack-sec-groups default,rancher \
--openstack-floatingip-pool rancher-external
注意点としては、private-key-fileはrancher-serverが見える場所でないといけない、という所だ。今回はrancher-serverをコンテナで起動したので、コンテナ内に配置する。
root@ac7dadb5930a:/# ls /opt/rancher.pem
/opt/rancher.pem
また、rancher agentが使用するAPI用のURLを変更しておく。http://floating-ip:8080/ になっているが、これだとrancher agentがURLをうまく認識しなかった。SGまわりかもしれないが、今回はrancher-internalネットワーク内のアドレスを指定してやる。
pemの配置とURLを変更したら、コマンドを実行する。
Rancher側にホストが追加され、インスタンスの作成やDockerのインストールが始まった!
しばらく待つと…起動した!
KUBENETES=>Dashboardからk8sのダッシュボードも開くことができるし、KUBENETES=>CLIからkubectl用のコンフィグもダウンロードできる。
ホストを増やす
しかし、これだとホストが1台だけで面白みがないので、台数を増やしてみる。ついでに、ubuntuからrancherOSに変えてみよう。イメージとssh-userを変更して、2台ほど追加する。
$ rancher --env k8s-test host create --name k8s-2 --driver openstack \
--openstack-auth-url http://openstack-internal-endpoint:35357/v2.0 \
--openstack-username r_takaishi \
--openstack-tenant-name my-tenant \
--openstack-availability-zone my-a \
--openstack-password XXXXXX \
--openstack-flavor-name m1.large \
--openstack-region RegionOne \
--openstack-image-name rancher-v0.8.0 \
--openstack-net-name rancher-internal \
--openstack-keypair-name rancher \
--openstack-ssh-user rancher \
--openstack-private-key-file /opt/rancher.pem \
--openstack-sec-groups default,rancher \
--openstack-floatingip-pool rancher-external
すると…3台にちゃんと増えた。
ダッシュボードを見ても、ちゃんと増えてますね。
どこまでKubetnetes側を触れるのか分かっていないけど、かなり手軽に試すことができるなあ。
ホストを消してみる
ここで、せっかくなのでおもむろにk8s-1を消してみて、どうなるのか試すことにした。Rancher側でホストを削除すると、OpenStack側でもインスタンスが消える。
少し時間がかかったが、消したホストでのみ動いていたものが別のホストで起動したようだ。ダッシュボードも見えるようになった!
まとめ
RancherServerをOpenStack上に用意し、OpenStack MachineDriverを使ってホストとしてOpenStackのインスタンスを使ってみた。気になる所としては、以下の3つがある。
- Floating IPをつけないとインターネットに繋がっていないように見える
- FIPをつけないとホストの構築がうまくいかないようだ。Rancherの問題なのか、OpenStack側の問題なのかの調査が必要そう。
- OpenStackのAPIを使うためのパスワードが各ホストのView in APIから見えている
- APIを使うための認証情報は見えないようにした方が安全じゃないかな…
- ホストを消す時にキーペアが消えることがある
- 条件がよくわかっていないけどこれも割と困るのでは。