Rancher+Kubernetes+AWSでマイクロサービス基盤環境構築　〜シリーズ(2)　Kubernetesクラスタ構築〜

[前回](https://qiita.com/mikezhan/items/6f25c082b27af4564e0d)の記事で、Rancher Serverの構築を話しました。今回の記事では、Rancher UIでKubernetesクラスタを構築することを記述したいと思う。

# Rancherアカウント管理
Rancher Serverを立ち上げたあとで、Rancher UIを初めてアクセスする際に、アカウント管理を設定していないので、ログインとか一切なしで、パブリックにしたら非常に危険の状態だ。そのため、まずアカウント管理を追加する。

- 操作の前に、画面の右下のところに、言語を「日本語」にする。
- 画面上のバーの「管理者」→「アクセスコントロール」→「Local」をクリックする。
    - 弊社の環境はすでに立ち上げているので、この操作は再現できないため、画面キャプチャは[この記事](https://qiita.com/ryota_hnk/items/9d91d49d7f3646e7eaa9)を参考してください。
    - RancherのアカウントはGithub, OpenLDAP, Localなどの認証をサポートしている。
- アカウント追加完了したら、一度ログアウトしてから再ログインする。

# Rancher環境管理
## 1. Kubernetes環境
Kubernetesクラスタを立ち上げる前に、まず簡単にRancherの「環境」という概念を詳解させていただく。
Rancherによって「Rancher は複数の環境に対してリソースのグループ化をサポートします。 それぞれ、個別に複数サービスやインフラストラクチャのリソースを持ち、1人もしくは複数のユーザーやグループにより管理されます。
例えば、 それぞれの環境を隔離するために "dev", "test" もしくは "production" といった分離された環境を作成し、 "dev" に対しては組織の全員がアクセスできるが、 "production" に対しては小さなチームのみに制限するといったことが可能です。」の説明を参考になればと思う。
AWSで実行すれば、簡単に理解すれば、各環境は自分のEC2インスタンス資源を持っていて、お互いに影響がないようにしている。しかも、環境の公開範囲はアカウントと連携できるため、社内にアカウントの権限によって対応の環境しかアクセスできないことを実現できる。
画面の左上に「環境を管理」をクリックしたら、環境管理画面へ遷移できる。
![rancher-env.png](https://qiita-image-store.s3.amazonaws.com/0/150705/f739581e-44c6-fbb0-f38e-34d6b2fd9dbf.png)

## 2. Kubernetes環境テンプレート追加
環境を追加するために、まずテンプレートを用意しないといけない。テンプレートは環境の設定を管理している。
環境管理と同じ画面で、環境テンプレートを管理できる。
![rancher-temp.png](https://qiita-image-store.s3.amazonaws.com/0/150705/40e2b000-0151-0c03-5ae4-3f42f976664a.png)

- テンプレート追加
    - 環境管理画面で「テンプレート追加」をクリックする。
    - 「名前」と「詳細情報」を記入。※詳細情報には日本語を記入しないでください。日本語の場合は現時点でエラーが出てくる。
    - オーケストレーションにKubernetesにする。デフォルトはCattleとなっている。
    - 共有は「パブリック」にする。
![rancher-temp-add.png](https://qiita-image-store.s3.amazonaws.com/0/150705/352998da-19be-f341-927f-7279bde212bc.png)


- Kubernetes設定編集
    - オーケストレーションのエリアの底に「設定を編集」をクリックすると、Kubernetesの環境設定を変更することが可能だ。
    ![kubernetes-setting.png](https://qiita-image-store.s3.amazonaws.com/0/150705/1bf6919f-c25b-5550-2c8a-e2d3c81afa5c.png)

今回に記事でKubernetesクラスタを立ち上げるのを試す目的で、本番環境を構築ではないので、ここの設定はあまり変更する必要がない。
一つの設定オプションを覚えたら助かります。「Plane Isolation」のところは本番環境を構築する際に、変更するので、今後の記事で詳細説明する。
    ![kubernetes-setting1.png](https://qiita-image-store.s3.amazonaws.com/0/150705/506838ef-dd9a-d718-af42-a7d46a2d3cb1.png)

- Rancher Application追加
    - 先のKubernetesの設定画面を一番下のところで「キャセル」をクリックして前の画面に戻りましょう。
    - Kubernetesの環境を追加以外には、Rancherが用意してくれるアプリケーションを追加することも可能です。環境テンプレートでアプリケーションを追加すれば、このテンプレートに基づいた環境は自動的にアプリケーションを実装される。
    - デフォルトにいくつかのアプリケーションを追加される。例えば、ネットワーク管理やヘルスチャックなどの必須のアプリケーション
    - ![rancher-app.png](https://qiita-image-store.s3.amazonaws.com/0/150705/f86d5415-f5b3-ae66-9cc7-fb16b3b8a3e0.png)

## 3. Kubernetes環境追加
環境テンプレートを作成したあとで、環境管理画面で「環境を追加」をクリックすれば、環境テンプレートを選択することが可能だ。
![env-add.png](https://qiita-image-store.s3.amazonaws.com/0/150705/1a1edaa3-280f-520f-5a84-652f6e6e3dc1.png)

しかも、環境へアクセスをアカウントでコントロールすることも可能。
![rancher-env-add-access.png](https://qiita-image-store.s3.amazonaws.com/0/150705/31725fea-4437-e7a4-f1e2-c7663989c564.png)

# Kubernetesクラスタ構築
## 1. ホスト追加
Kubernetesの環境を作成したら、ホストを追加するだけでKubernetesクラスタをRancherが自動的に立ち上げてくれる。
ホストを追加する前に、クラスタの操作は何もできていない。
![rancher-setup-wait.png](https://qiita-image-store.s3.amazonaws.com/0/150705/baeec595-f941-b070-2fa8-91f3a3d49d5c.png)


- KubernetesクラスタはAWSに実行するから、ホストを追加する前に、EC2インスタンスへ操作できる権限を持つアクススキーを発行してください。
- 「インフラストラクチャ」→「ホスト」→「ホスト追加」→「Amazon EC2」
![rancher-add-host.png](https://qiita-image-store.s3.amazonaws.com/0/150705/3e3aea67-72f8-f597-adbb-bcec1b899fe9.png)


![rancher-security-group.png](https://qiita-image-store.s3.amazonaws.com/0/150705/f914f00b-89f5-b174-f1ef-e1dc2441a3ea.png)

![rancher-add-ec2.png](https://qiita-image-store.s3.amazonaws.com/0/150705/2ae76ebe-19b9-3fbe-4b1c-b33d4ea31f04.png)

- EC2を追加設定完了すると、Racher Serverが自動的にEC2インスタンスを立ち上げ、インスタンスにクラスタ構築をする用のDocker containerをインストールして実行させる。
![rancher-host-adding.png](https://qiita-image-store.s3.amazonaws.com/0/150705/760124b6-5b90-3d14-757f-9bacc2e2cc38.png)

- しかし、実際の作業中で、EC2インスタンスを一気に追加すると、エラーが出てくる場合は結構ある。そのため、個人的に、ホストを一個ずつ追加するのをおすすめ。
![rancher-add-host-error.png](https://qiita-image-store.s3.amazonaws.com/0/150705/0daa8a35-7664-1c76-75b8-c281d408c647.png)
- そういう場合は、ホストの右上のところにクリックして、まずホストを「非アクティブ」として、ホストを削除する。もう一度ホストを追加する。
- 結局、今回にEC2を追加は何回にも失敗しました。

- ホスト追加成功したら、２〜３分を待ったら、Kubernetesのクラスタを成功に立ち上げる。
![rancher-host.png](https://qiita-image-store.s3.amazonaws.com/0/150705/40b4eaf0-b5c0-4c94-1c28-558a0cd29a37.png)

- awsのEC２インスタンスを確認する。
![rancher-aws.png](https://qiita-image-store.s3.amazonaws.com/0/150705/9ba13fe2-887e-2c9b-c708-2073b3d7ed06.png)

- クラスタを立ち上げると、Kubernetesの画面で、Kubernetes　UI、Kubernetes CLIなどの機能が表示される。
![rancher-kubernetes-tools.png](https://qiita-image-store.s3.amazonaws.com/0/150705/acc8f171-bcbd-c266-fd52-9fad697f241b.png)

- Kubernetes UI。Kubernetesが提供しているUI管理ツールでは、クラスタの状況、デプロイ状況などの情報。
![rancher-kubernetes-ui1.png](https://qiita-image-store.s3.amazonaws.com/0/150705/76cd6557-1fba-38f3-650f-978c65c18d9d.png)


## 2. kubectl設定
kubectlコマンドツールでKubernetesクラスタを管理、アプリデプロイすることが可能で、非常に便利なツール。
RancherがKubernetesクラスタを立ち上げると、Rancher UIでkubectl実行する画面を提供している。しかし、クラスタの状態を取得などの簡単の機能だけ、アプリデプロイすることができない。そのため、ローカル環境で、kubectlコマンドツールをインスタールしてセットアップする必要がある。

- Kubernetes CLI画面
![rancher-kubernetes-cli.png](https://qiita-image-store.s3.amazonaws.com/0/150705/a64c834c-f42d-02e2-7754-4e729e3da868.png)

- Rancher UIでkubectlコマンドを実行する。
![rancher-kubectl.png](https://qiita-image-store.s3.amazonaws.com/0/150705/99353d92-9dfb-1f46-ef8c-01db7701ba8d.png)

- kubectlインストール(Linux環境)[参考資料](https://v1-8.docs.kubernetes.io/docs/tasks/tools/install-kubectl/)
    - ドウンロード
    
    ```
    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.4/bin/linux/amd64/kubectl
    ```

    - chmod +x ./kubectl
    - mv kubectl /usr/local/bin/kubectl
    - mkdir ~/.kube
    - cd ~/.kube
    - touch config
    - Rancher CLIの設定ファイル内容をconfigにコピーする
    ![rancher-kube-config.png](https://qiita-image-store.s3.amazonaws.com/0/150705/f9d8834f-2ec1-428d-3bfd-6ae8845c375a.png)
    - kubectlをインストール完了。「kubectl get all」を実行して確認する。
![kubectl-cmd.png](https://qiita-image-store.s3.amazonaws.com/0/150705/1f9d2960-be58-5d44-8c2d-540cc267c38b.png)
    - Rancherで複数のKubernetesクラスタを立ち上げると、ローカルでクラスタをkubectlコマンドクラスタを管理したい場合、「kubectl --config=*config_file*」を実行したら対応できる。
    - ここまで、kubectlの設定完了、ここからローカルでKubernetesクラスタを操作することが可能。

## 3. EC2インスタンス設定
EC2インスタンスをデバッグとか、実際のホストの環境をSSHで入ってみたい場合、Racherで提供した設定ファイルでアクセスすることが可能。

- ホスト画面でホストの右上のボタンを押すと、EC2の設定ファイルをダウンロードすることができる
![rancher-ssh.png](https://qiita-image-store.s3.amazonaws.com/0/150705/6ffd63ef-5e99-3cd7-5577-43c49ce199bd.png)

- EC2へSSHで接続するときに、ダウンロードしたファイルの中に「ファイル名/machines/k8s-node-test1/id_rsa」を利用すれば、アクセスできる。

# まとめ
今回はRancher UIからkubernetesクラスタを立ち上げ、管理ツール設定を紹介した。次回には、実際にKubernetesクラスタにDocker imageをデプロイすることを説明しながら、Rancherが提供している便利なアプリケーションも紹介する。