Rancherって何ができるの？

Rancherって何ができるの？

kubernetes ubernetes rancher istio helm grafana 

Rancherってなんか色々できそうだけど、ちょっとだけイメージが湧きづらいですよね。
ではRancherの実際の画面を見ながら、なんとなくイメージをつかんでみましょう！

## Rancherってなに？
Kubernetes(K8s)を使いやすくするための、OSSのソフトウエアです！

Rancherでできることは多いですが、大きな特徴は**GUIによる視覚化**が徹底されている部分であると言えます！


そのうえで、以下の３つの特長を抑えておけば十分です！

1. 異なる環境のK8sクラスタの一元管理
2. K8sクラスタへのアプリの導入
3. Istio(サービスメッシュ)との連携

これらを**視覚的に扱うことができるOSS**であるという部分が、Rancherのアイデンティティではないかなと思います。



一つずつ見ていきましょう！

## 1. 異なる環境のK8sクラスタの一元管理
こちらがRancherの画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/8b88e994-21f7-bfa4-bc0d-029c81bd31a9.png)

ログインするとまずはこの画面が開きます。

Rancherには3種類のUIがあります。
・Grobal UI
・Cluster UI
・Project UI

Rancherには３つのUIがあって、それらを意識して操作することが理解の近道になります。

上記で表示されているのは**Grobal UI**という一番上の階層のUIです。

ここでは管理するクラスタを追加したり、Rancher全体の設定を行ったりすることができます。

試しにローカルにあるK8sクラスタをRancherの管理下に入れてみましょう。

上記の画面で「クラスターを追加」を選択して、Add Cluster画面から「Import an existing cluster」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/e547e6b0-d6ec-2141-8644-d506d2ac945c.png)

クラスタにアクセスできるユーザロールや、ラベル、アノテーションなどが指定できますが、ここではクラスター名のみ指定して、「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/bb398dc7-4102-7902-1d9a-877c9c5bc4f9.png)

ここに表示されたコマンドを、追加したい既存のK8sクラスタで実行するだけで、Rancherの管理下に入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/0ffde25e-1a13-f32f-75ca-c32df8273074.png)
今回は、Rancherデフォルトの自己証明書なので下の方のコマンドを実行します。

```
# curl --insecure -sfL https://lb.example.com/v3/import/9t549tjt24lflc48nj6cst8v4649958blj6ndffr4c2ndw5sspqrgm.yaml | kubectl apply -f -
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver configured
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master configured
namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-62b1ec5 created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.apps/cattle-cluster-agent created
daemonset.apps/cattle-node-agent created
#
```

するとRancherのGrobal UIに「guest」という名前のクラスタが追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/ad793d94-4958-3c7e-71e5-fe948fea66a1.png)
今回は既存のK8sクラスタを追加しましたが、**AWSなどのクラウドのプロバイダを利用して、K8sクラスタの作成も画面から実行**することができます。

ここで任意のクラスタをクリックすることで**Cluster UI**が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/c4245bba-3314-c815-9bd5-26d991dd7523.png)

ここからノード毎の情報が見られたり、クラスタ操作できるメンバの管理や、後述します[Istio]などの管理・監視ツールの有効化ができます。

Cluster UIの「プロジェクト/名前空間」タブを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/189ca5f7-35de-2916-34bb-dc1b2a588e50.png)
ここから任意のプロジェクトをクリックすることで「Project UI」を開くことが出来ます。

Rancherでいう**プロジェクトとは、K8sのnamespaceをまとめてグループのように扱う単位の事です。**
ここではK8sのシステムに関わるnamespaceが「system」プロジェクトに属しています。
ここでは「system」プロジェクトをクリックしてProject UIを開いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/e93a8b5c-c8c8-00d1-226a-e26778be47e6.png)
Project UIではプロジェクト内のリソースやポッドのログなど、細かい部分まで参照することが出来ます。

リソース→ワークロードを選択することで、ポッドやサービスなどの情報が参照できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/699b9ba5-1b4a-bab9-ed39-474ea4ff751f.png)
**ぱっと見、視覚的に非常に見やすくていいですね。**
ここからワークロートのYAMLをダウンロードしたり、YAMLをインポートしてリソースを追加したりすることができます。

ユーザにはGlobalユーザ、Clusterユーザ、Projectユーザがあり、それぞれの範囲で権限を割り当てることが出来ます。
その辺をしっかり設計すればマルチクラスタの管理を効率的に行えると思います。

## 2.K8sクラスタへのアプリの導入

K8sクラスタへのアプリの導入はHelm Chartのカタログを利用して比較的簡単に行うことが出来ます。
アプリを導入したいプロジェクトのProject UIの[Apps]タブを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/7579a410-2c3c-f6fb-c200-155495ac2259.png)
Apps画面が開いたら右上の「起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/d6cca70e-ea10-ff46-c57c-0509d17f7737.png)
導入されているカタログ画面が開きます。

一覧から「wordpress」をデプロイしてみましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/90e1dc0f-0432-2fb4-6f03-6dc7f3e52d12.png)
「wordpress」をクリックするとこんな画面が開きます。
ここで、各種パスワードを設定して、画面下の「起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/d03b7333-07d7-bde8-dd4d-97efa023cb53.png)

少し待つと「wordpress」がActiveになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/dc559fea-d194-fce6-624b-563475a31d47.png)
「80/http」をクリックすると、wordpressの画面が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/a404717e-1e0a-4598-e5d4-e329cfe64eb8.png)
HelmChartでのアプリケーションのデプロイは、設定値などの変更のためにvalues.ymlなどを読み解いてカスタマイズする必要がありましたが、
Rancherでは、**UIで設定するだけで、自動で設定ファイルを最適化してくれる**ため、非常に手間が少ないです。

カタログをRancherに読み込ませることで、自作のアプリももちろんデプロイ可能です。
ただし、こちらはカスタムカタログを作成するのが手間が多い印象なので、実装するには覚悟が必要かと思います。




## 3. Istio(サービスメッシュ)との連携
Rancherv2.3から Istioの利用が実装されました。

こちらは、**Cluster UIからIstioを有効化するだけでIstioだけでなく、Jaeger, Kiali, Prometheus, Grafanaが同時に利用できるようになる**というものです。
早速有効にしてみましょう。
まずはIstioを利用したいクラスタのCluster UIを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/10277410-b06c-4382-d880-f0b08e0312f3.png)

ツールから「Istio」をクリックすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/c79fdd06-d7f2-eaa8-707d-e595d1f1816a.png)
こんな場面が開きます。

Istioは有効じゃないよ！って言ってますね。

ここでは**Group Accessのラジオボタンを上に変更して、「有効」をクリックします。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/3e78d081-ab3b-9edd-f1b8-cbb1bfaca4a5.png)
　
10分ほど待つと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/00a8370f-6ad0-386d-4452-a4e2a46c42e5.png)
Istioが有効になりました！
ここから**各UIの右側のロゴをクリックすることで、UIにダイレクトにアクセスすることができます。**
■ Kiali
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/f4b7c4cc-d367-c18e-7979-012ee8601f7c.png)

■Jaeger
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/9312d240-f8e9-170d-a4bd-3db47fa61b8b.png)

■Grafana
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/79a8ee3e-dc79-4782-3820-15437cb7128c.png)


■Prometheus
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/627785/21c785ec-e2e0-c1f4-eca9-8c2ad3fd7df3.png)

これで、アプリケーションにサイドカーを同行させてのトレーシングやトラフィックのコントロールが出来るようになりました！
カタログでのアプリケーションのデプロイと組み合わせると、いろいろな検証ができて、**これらの概要をつかむための統合環境として優秀**だと思います。
## おわりに
GUIで単純な操作でK8sをコントロールできるRancherであるため、単純にやろうとするといろいろ簡単ですが、
Rancher自体でできることが非常に多く、画面も多様なため、細かく設定しようとするといきなり難易度が高くなる印象です。

**サービスメッシュ、メトリクスの概要をつかむためには非常に有用**だと思いますので、その辺を学習したい方は、ぜひ利用してみてください！

以下のリンクよりWindows10 + Vagrant + VirtualBOXでのRancherクラスタの構築手順を紹介しています！
是非ともご覧くださいませ。
・[HAなRancherをVirtualBoxで構築しよう](http://c.itdo.jp/technical-information/docker-kubernetes/ha-rancher/)

## 参考
Rancher公式ドキュメント https://rancher.com/docs/