今さらだけど、IKS と Rancher を連携させたら、あまりの便利さにビックリ！

IBM Cloud Blog に Rancher から IKS (IBM Cloud Kubernetes service) を利用する方法が掲載されていました。 Rancher は、とっても人気なツールで、ファンが多いのに、ブログどおりに試してみても、どうも情報が足りない。 せっかくの良い記事なのに、困ったなぁ... USの書いた人に指摘のメールを送って見ようかな？  でも、どこがダメって具体的に指摘しないと、外人は動かないしね。ちょっと、試してからクレイムしようかと...

* [RancherでIKSにアプリケーションをデプロイする方法 2018年7月](https://www.ibm.com/blogs/bluemix/2018/07/building-apps-ibm-container-service-kubernetes-rancher-2-0/)
* [RancherでIKS上コンテナからICOSに接続する方法 2018年8月](https://www.ibm.com/blogs/bluemix/2018/08/connecting-ibm-cloud-object-store-kubernetes/)

そこで確認したことをまとめたのが、この記事です。たしか Rancher の日本のエバンジェリストさんが、Bluemix 時代に、Rancherと当時のICCSの連携を試して、コンテナの勉強会で発表されていたから、バージョンが変わっても、必ず使えるハズだしね。

この記事は、既に IKS の k8sクラスタが稼働している状態から、Rancherと連携させるものです。以下に既存の IKS の k8sクラスタと連携して、Rancher から IKS の k8sクラスタを管理できるようにするまでの手順を書き残して行きます。


## Rancher と IKS の連携

Rancher サーバーは、Master Node と連携する必要があります。 k8sマスターノードは IBM 管理となっているので、ユーザーのVLAN上に存在しません。 そのために、Rancherサーバーは Publicネットワーク上に構築しなければなりません。 そこで、Rancher 用に仮想サーバーを起動します。

![スクリーンショット 2019-03-21 21.22.29.png](https://qiita-image-store.s3.amazonaws.com/0/42829/f6534dd4-5e50-297b-8e35-0dff97d50e11.png)


## Rancher サーバーの起動

Rancherサーバーの起動には、二つの方法があります。今回は2番目の Terraform を利用する方法をとります。

* 手作業で仮想サーバーを起動して環境構築する
* Terraform を使って Rancher を起動する

この手順は、[Terraform と Ansible を連携させてIBM Cloudの仮想サーバーを構築する手順](https://qiita.com/MahoTakara/items/27191c19202a167a6344) に書いておきましたので、この手順に沿って進めれば、環境を起動することができます。

起動の最後のステップで、次のコマンドを実行して、Rancherのコンテナ を起動します。

~~~console
$ docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
~~~

この起動方法は、GitHub https://github.com/rancher/rancher/tree/master に詳細に書かれていますから、参考にして実行します。


## Rancherにログイン

起動してRancherのプロセスが起動した頃を見計らって、`https://仮想サーバーのIPアドレス/` でアクセスすると、次の画面が表示されます。パスワード設定をして、ログインします。

![スクリーンショット 2019-03-21 23.15.20.png](https://qiita-image-store.s3.amazonaws.com/0/42829/bf9fc29f-28c7-d5ab-8369-208d3ee234fd.png)

クラスタ追加のアイコンから、IMPORTを選びます。他のクラウドのk8sサービスのように、IBM Cloud専用のアイコンが表示されるようになって欲しいものです。Rancher上で管理するクラスタ名をセットして、「作成」ボタンをクリックします。

![スクリーンショット 2019-03-21 23.15.29.png](https://qiita-image-store.s3.amazonaws.com/0/42829/9fbf3880-dff0-86eb-2c89-6ad6c486a484.png)

応答画面が出ますから、完了ボタンのすぐ上のコマンドラインをコピーします。 ただし、これを実行するには、kubectlコマンドが実行できるようになっていない勧められませんから、kubectlコマンドのセットアップが終わるまで、この画面は置いておきます。

![スクリーンショット 2019-03-21 23.15.38.png](https://qiita-image-store.s3.amazonaws.com/0/42829/ca1a959f-de32-2382-6b95-d56d2125b711.png)


## kubectl コマンドで

kubectl コマンドが利用できるように設定します。 ibmcloud コマンド (bxコマンド）を利用して、操作を進めます。タイプ量は減らしたいので、bxコマンドを使います。 次からの操作は、bx login の認証が通って、bxコマンドが実行できる必要があります。

IKSのリージョンをセットします。

~~~console
vagrant@workstation:~/vsi-1$ bx ks region-set
~~~

Rancherと連携したいクラスタをリストの中から選びます。

~~~console
vagrant@workstation:~/vsi-1$ bx ks clusters
~~~

クラスタ名を指定して、認証情報を取得します。

~~~console
vagrant@workstation:~/vsi-1$ bx ks cluster-config CLUSTER_NAME
~~~

認証情報のパスを環境変数にセットして、kubectl コマンドがマスターノードと連携できるようにします。

~~~console
vagrant@workstation:~/vsi-1$ export KUBECONFIG=/home/vagrant/.bluemix/plugins/container-service/clusters/iks1/kube-config-tok04-iks1.yml
~~~

kubectl コマンドが動作することを確認します。

~~~console
vagrant@workstation:~/vsi-1$ kubectl get node
NAME            STATUS   ROLES    AGE   VERSION
10.132.253.17   Ready    <none>   24d   v1.12.5+IKS
10.192.9.105    Ready    <none>   24d   v1.12.5+IKS
10.192.9.86     Ready    <none>   22d   v1.12.5+IKS
10.193.10.50    Ready    <none>   24d   v1.12.5+IKS
~~~

前述のRancher の IMPORTの応答画面に表示されたコマンドをコピペで貼り付けて実行します。

~~~console
vagrant@workstation:~/vsi-1$ curl --insecure -sfL https://***.***.**.*/v3/import/lk4nx8bj9hjdmfpcfsq5lxzbgjljbxwdbzsfsrdx7l86w7pmxtf22t.yaml | kubectl apply -f -
namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-e457290 created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.extensions/cattle-cluster-agent created
daemonset.extensions/cattle-node-agent created
~~~

OKボタンをクリックすると、次の画面が表示されているハズです。しばらくすると、初期化が完了して、「Active」状態になります。

![スクリーンショット 2019-03-21 23.15.45.png](https://qiita-image-store.s3.amazonaws.com/0/42829/25321b69-6c17-614d-1109-b039bccf771e.png)

クラスタ名をクリックすると、ダッシュボードの様な画面が表示され、リソースやコンポーネントの動作状態が確認できます。
![スクリーンショット 2019-03-21 23.15.53.png](https://qiita-image-store.s3.amazonaws.com/0/42829/2fb3b04d-f13c-760e-be58-35a31f2b7549.png)

クラスタ名とネームスペース名を選択すると、コントローラーオブジェクトのリスト、または、ポッドのリストが表示されいます。コントローラをクリックすると、その管理下のポッドが表示されます。
![スクリーンショット 2019-03-21 23.16.01.png](https://qiita-image-store.s3.amazonaws.com/0/42829/b65eaa98-d4bb-5529-3a7f-710ce8aa6c52.png)

昼間では、画面の背景は白になり、ログイン画面も緑鮮やかな画面になります。
![スクリーンショット 2019-03-21 23.18.44.png](https://qiita-image-store.s3.amazonaws.com/0/42829/c6f7fedc-92d5-59db-0fef-a294b809d0bd.png)

あとは、Rancherの操作になるので、ここで完了としますが、Rancherは、色々なクラウドでもRancher一つで管理できるというのは、便利ですね。企業用途では、DMZにRancherサーバーを置かないと、オンプレとパブリッククラウドの両方が管理できませんが、これは便利なツールだと思います。

ターミナルでコマンドを利用するのが嫌になったら、Rancher を使うという選択肢もありますね。