Rancherを利用したIBM Cloud Kubernetes Serviceの活用

# IBM Cloud Kubernetes Service上に作成したKubernetesクラスタを、RancherにImportして、Helm CatalogからWordPressをDeployするところまでの手順を紹介します。
注：この資料はIBM NEXT札幌2018で講演した内容を再構成したものです。

## その前に、前提となる技術要素のご紹介を…

### コンテナ型仮想化とは
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/0cd53cdc-14f3-5c22-8841-89a0678ccddb.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/a0733799-12ce-e230-67f2-32e1a2b695e9.png)
従来のハイパーバイザー型仮想化が、個別のVirtual Machine内にOperating Systemを含むのに対し、コンテナ型仮想化では、共通のコンテナエンジン（この場合はDocker）で各アプリが動作するので、アプリ動作のためのオーバーヘッドやメモリ等のリソースは少なくてすみます。

### コンテナ間連携とオーケストレーション
- Docker Compose<br>
docker-compose.ymlというYAML形式のファイルに サービス等を定義して、コンテナ間連携を実現する。
- Docker Swarm<br>
 Swarmモード（Swarmkit）を使用したクラスタ管理や スケジューリングを実現する。
- Kubernetes<br>
 API ServerとController Managerを持つMasterを使用して、クラスタ管理やスケジューリングを実現する。

この中で現在では、Kubernetesが事実上の業界標準となりつつあります。

### Kubernetesのアーキテクチャ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/fa239839-7963-9bf3-0bff-2fea71cd2775.png)
Kubernetes Master（以下Master）のAPI Serverを経由して、Developer/Operatorからの入力をMasterのController Manager/Scheduler/etcdが処理し、Kubernetes Node（以下Node）上に実際のアプリやサービスのコンテナベースの動作環境となるPodを作成・動作させます。Node内にあるKube-Proxyを通して、アプリやサービスのUserがアクセスできる環境を提供します。

### Kubernetes導入時のハードル
- 関係する構成要素（リソース）が多い。
  - 理解するのに時間がかかる。
  - 問題が生じた時に追跡しにくい。
- コマンドラインによる作業がメインとなる。
  - 覚えるのに時間がかかる。
  - 直感的な操作が行いにくい。

## Rancherを利用したKubernetesクラスタの管理

### What’s Rancher?
- コンテナオーケストレーション機能を中心とした コンテナプラットフォームマネジメントシステム
- オープンソースプロダクトとして開発されている。
- ユーザー管理・アクセスコントロール・ストレージ管理・ネットワーク管理・セキュリティなどの機能もGUIを使用して設定可能。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/d3d3a6c0-bad4-5483-ec07-97b48f691d14.png)

RancherのMain Developerであり、Enterprise Supportを提供しているRancher Labs
は、米調査会社フォレスター・リサーチ社により、2018/10に企業向けコンテナプラットフォーム提供会社として、「Leaders」に位置づけられているような会社です。

https://rancher.com/blog/2018/2018-10-22-forrester-rancher-leader-enterprise-container-management/
同じ内容を解説してくださっていた日本語の記事もありました。
http://blogs.itmedia.co.jp/business20/2018/10/enterprise_container_platformdockerred_hatrancher_labsforrester.html
### Rancherの目指すもの
- クラウドフリー、ベンダーフリーであること
- WebブラウザやCLIツールによってわかりやすい インターフェースを提供すること
- 開発者と運用者に権限を分割して運用できるようにすること
- 開発者と運用者に対して分かりやすいシステムにすること
- コンテナ環境に対して、ネットワーク／負荷分散／サービス検知／サービス監視／マルチテナント機能を包括的に提供すること

### IBM CloudでのKubernetes クラスタの作成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/af41ba35-f59f-cc9e-fe79-31363a488719.png)
Rancher上からもIBM Cloud上にKubernetesクラスタを構築可能ですが、今回はIBM Cloud上でKubernetesクラスタを作成し、RancherにImportして使用します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/9d950964-b162-789d-fd15-f37278317e48.png)
Importを指定して、Rancher上でのクラスタ管理用の名前（Cluster Name）を入力すると、インポート用のコマンドが表示されますので、それをIBM CloudのKubernetesクラスタに対して実行 します。
今回は以下のようなコマンドでした（環境によって異なります）
`curl --insecure -sfL https://35.190.229.202/v3/import/7xh5rt2mbxg6cpmdvzllxrh4kf8rs2mpxkvqwqlmtxwdq5gmsxgvcn.yaml | kubectl apply -f - `
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/ddc6378c-a999-19b5-8acc-5e9a522a0131.png)
KubernetesクラスタがImportされると、リソースの使用状況等がGUIから監視・変更できるようになります。kubectl用のコンソールが用意されており、設定ファイルのYAMLファイルの取得等も可能です。
### Rancher Catalog（Helm）からKubernetesクラスタへのDeploy
<img width="1748" alt="Screen Shot 2018-11-10 at 9.07.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/114000/4d9aceeb-b89f-3f8f-f461-baabbca82583.png">
今回はHelmのカタログを使用しますので、事前にGlobalのCatalogsを選択して、CatalogのHelm Stableを有効化しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/0dbea94f-e89c-dba5-2510-755d6bef621b.png)
ImportしたKubernetesクラスタを選択し、上段のツールバーでCatalog Appsを選択します。
Launchボタンを押すと、App Catalog画面へ移行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/96cc2706-9281-e478-9feb-dc1d289ca83b.png)
今回はWordPressをHelm CatalogからDeployしてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/114000/36855b49-8615-7bc6-462e-86bb2e0ddc62.png)
必要なパラメータの設定画面が出ますので、ここでタイトルやパスワード等を入力・生成してLaunchボタンを押すと、WordPressがKubernetesクラスタ上に展開されます。

#### このようにGUIを使って非常に簡単にKubernetes環境を利用できます。Rancher自体は無料でフル機能が使用できますので、ぜひ使ってみてください！