RancherでKubernetes on AWS 


# 概要
Rancherを使ってAWS上のKubernetes環境をつくります。

# 構成イメージ
こんな環境をつくります。
![Untitled(3).png](https://qiita-image-store.s3.amazonaws.com/0/3246/4a5289ff-71fb-ee86-d800-e650afa6856d.png "Untitled(3).png")

Nodeは1台でも構いません。

---

# IAMユーザの作成、キーの発行
Rancher UIからEC2インスタンスを起動するため、IAMキーが必要になりますので、ユーザーを作成し、発行します。

AWSマネージメントコンソールのサービスから`IAM`を選択します。
 ![Kobito.XDYtdH.png](https://qiita-image-store.s3.amazonaws.com/0/3246/9832ac2a-5aa5-80fd-6e5f-a3588a2da9e4.png "Kobito.XDYtdH.png")

---

`ユーザー`を選択します。

![Kobito.I2lRhg.png](https://qiita-image-store.s3.amazonaws.com/0/3246/acc958e2-1da6-95d7-c9eb-ae4b2dd20a17.png "Kobito.I2lRhg.png")

---

`ユーザーを追加` を選択します。

![Kobito.0OpqP9.png](https://qiita-image-store.s3.amazonaws.com/0/3246/7d42c41c-0e28-bfd7-0cb3-7722b7b909cd.png "Kobito.0OpqP9.png")

---

任意の`ユーザー名`を入力し、アクセスの種類で`プログラムによるアクセス`にチェックを入れ、次に進みます。

![Kobito.8Fd0id.png](https://qiita-image-store.s3.amazonaws.com/0/3246/94069d22-e9e8-8323-444c-cb17421d880e.png "Kobito.8Fd0id.png")

---

`既存のポリシーを直接アタッチ`を選択し、ポリシー名`AmazonEC2FullAccess`にチェックを入れ、次に進みます。
![Kobito.DUlU26.png](https://qiita-image-store.s3.amazonaws.com/0/3246/32c78294-567d-f76a-a888-fdaa065956ab.png "Kobito.DUlU26.png")

---

`ユーザーの作成`をクリックします。

![Kobito.ZyCCkT.png](https://qiita-image-store.s3.amazonaws.com/0/3246/f5d24956-f8ab-dfea-8d7e-9e17e2a46f9a.png "Kobito.ZyCCkT.png")

---

`.csvのダウンロード`をクリックし、CSVファイルをローカルにダウンロードしておきます。
![Kobito.MEgOpV.png](https://qiita-image-store.s3.amazonaws.com/0/3246/0b0be19d-0b69-b27d-d91d-4b3fb1d538e6.png "Kobito.MEgOpV.png")

---

# Rancherの起動

マネージメントコンソールのサービス一覧から`EC2`を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/804e36d2-8dcf-7e15-7b14-681a49a19b7b.png)

---

`インスタンス` → `インスタンスの作成`を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/d59e2114-d572-7d85-11f8-bc3e88f32fe6.png)

---

`AWS Marketplace` を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/05629acb-997b-c44f-0a26-1e1654a987ac.png)

---

`Rancher on RancherOS`のイメージを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/dcfa91d6-88e6-e2dd-99a4-30246bf50918.png)

---

`Continue`をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/cffd25e4-c7d5-a363-3dd1-2eb6bd6467dd.png)

---

インスタンスタイプを選択します。選択できる最安のものは`t2.small`になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/115fff24-24e6-4456-8527-22326c5d8519.png)

選択後、`確認と作成`をクリックします。
デフォルトVPCへの構築を前提としていますので、必要であれば、VPCの選択等の設定を実施してください。

---

`作成`をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/3bd9db12-cc86-4e00-17c2-b2d14bedb03a.png)

---

必要に応じて、キーペアを選択します。
今回のハンズオンではSSHログインしませんので、キーペアなしでも構いません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/d14d2a82-fd3b-99bb-dcf0-9cde592a2f0b.png)

---

`インスタンスの表示`をクリックし、インスタンス一覧を表示します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/d0fb2cee-95c5-48ac-1add-2272e72ee841.png)

---

作成したインスタンスのIPv4パブリックIPを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/14c823ed-9563-ccac-87b2-59d2bb0ace52.png)

※ MarketplaceからRancherのAMIを起動すると、`Rancher on RancherOS-v1-1-0-AutogenByAWSMP-`というセキュリティグループが自動的に作成され、インスタンスに適用されます。SSHポートとTCP/8080がすべて許可される設定になっていますので、継続して利用する場合は、ソースの設定を適切に実施することを推奨します。TCP/8080はAPIの利用ポートにもなりますので、後ほど作成するノードからアクセスできるように構成する必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/dceee99b-a438-50a9-6f69-09896dd5c2c1.png)

---

ブラウザで先程のパブリックIPの8080番ポートにアクセスします。
http://xx.xx.xx.xx:8080
`Welcome to Rancher!`と表示されることを確認してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/87e35245-3073-2e1c-ef85-23189b08dcd7.png)

---

# Rancherのアクセス制限

デフォルトではRancherのUIに対して、アクセス制限がかかっていませんので、ユーザー名、パスワードによる認証を有効にします。
RancherUIの上段メニューから`Admin` → `Access Control`を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/7590f8bc-d46b-bee5-4852-9b68dc7f9906.png)

---

Access Controlの一覧から`Local` を選択し、ユーザー名、パスワードを入力し、｀Enable Loacl Auth`をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/7a60ea7c-3b6b-1932-f063-f5a641ca3155.png)

---

確認のため、一旦ログアウトします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/71989ff2-d5c1-7622-32c4-80e3ab56d4da.png)

---

先程指定したユーザー名、パスワードでログインできることを確認します。
必要であれば、言語を日本語に変更することも可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/b09c2be7-1a0f-e166-3866-adc3f0eb67e7.png)

---

# Kubernetesクラスタの作成

上段メニューの`環境を管理`を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/5127d714-93cf-937f-d0c3-f3a805cbbb82.png)

---

`環境を追加`をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/a9b7c821-feeb-6227-8f1e-2ab07611b22e.png)

---

`名前`を入力し、環境のテンプレートで`Kubernetes`を選択し、`作成`をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/a27e469a-5d8f-6c66-752c-e1f71324d8fc.png)

---

メニューの`環境`を作成した`Kubernetes`に切り替えます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/18435f6c-bea9-6c80-0dfd-d4de2eaf4870.png)

---

メニューの`インフラストラクチャ` → `ホスト`を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/2415eb20-f0e9-96f7-5064-f4c86e567cb6.png)

---

`ホストを追加`をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/da8a5c69-b551-d7e2-7aa8-6da3adedba24.png)

---

`サイトのアドレス`にチェックが入っていることを確認し、`保存`をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/59189003-408c-be06-4f2b-33cccaa44ed3.png)

---

`AMAZON EC2`を選択し、リージョンを指定、先に作ったIAMユーザのアクセスキー、秘密キーを入力し、次に進みます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/37e5e475-9c7f-6ac4-e097-aa22b591fe0e.png)

---

アベイラビリティゾーン、サブネットを指定し、次に進みます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/7d746ad5-d653-20b7-851d-6ea23c0c38ca.png)

---

セキュリティグループを選択します。 `rancher-machine`を選択し、次に進みます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/71666898-1010-8cbb-a2b4-5d8e4c44970c.png)

※ `rancher-machine` を選択することにより、必要なポートが許可されたセキュリティグループが生成されますが、SSHポート等がすべて許可される設定になっていますので、継続して利用する場合は、ソースの設定を適切に実施することを推奨します。SSHはRancherからアクセスできるように構成する必要があります。

---

`名前`を指定し、その他のオプションを選択し(そのままでも構いません)、`作成`をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/6cb5148d-6cf2-de9c-88cd-116255f8b2f8.png)

---

同様にもう一方のアベイラビリティゾーンにもホストを作成します。(１台のみでも構いません。)
ホストが正常に起動し、`rancher-agent-bootstrap`以外が緑の◯になっていることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/edb81c0a-797b-a463-7057-f811a3481442.png)

---

作成したホストにSSHでログインしたい場合は、ホスト右上のメニューボタンをクリックし、マシン設定を選択すると、ZIPファイルがダウンロードできます。SSHの秘密鍵が、展開したディレクトリの`machines/ホスト名/id_rsa`にありますので、このファイルを指定し、SSHログインが可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/3f801f12-1dd4-d7ca-2fd4-1e6962f0b234.png)

---

メニューの`KUBERNETES` → `インフラストラクチャスタック`を選択し、すべて緑になっていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/4939ba77-6ada-7335-bc2c-72a2165af164.png)

---

メニュー`KUBERNETES` → `ダッシュボード`を選択し、`Kubernetes UI`をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/f17c078b-5b39-5cb0-b01c-ce9c22f63663.png)

---

別ウインドウでKubernetes UIが起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/424671dd-772b-6dee-878f-b5fff886e657.png)

---

ノードに適用するセキュリティグループに設定を追加します。
AWSマネージメントコンソールからセキュリティグループ一覧を表示し、`rancher-machine`を選択、`インバウンド`タブを選択、`編集`をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/81384973-6ac8-a056-cd13-2c2b554f3ec5.png)

---

下記の２つのルールを追加します。

| タイプ|プロトコル|ポート範囲|ソース|
|:-----|:-----|:-----|:----|
|HTTP|TCP|80|任意の場所|
|カスタムTCP|TCP|30000-32767|任意の場所|

１行目はハンズオンの中で、Webサーバのコンテナを起動して、アクセスするためにHTTPを許可しています。
２行目はインスタンスのパブリックIPを送信元とした通信を許可するために設定します。(ポート番号の仕様はよく分かっていません。30000台が使われる？）
継続して利用する場合は、ソースの設定を適切に実施することを推奨します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/27c62ba0-6b85-373f-5847-634f1074e845.png)

---

# nginxコンテナの起動

Kubernetes UIから `作成`をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/c173bf74-e278-b972-8bcf-b6dfb97a2289.png)

---

以下のように入力し、`配備`をクリックします。

- アプリケーション名
    - nginx（任意）
- コンテナイメージ
    - nginx
- ポッド数
    - 1
- サービス
    - 外部
- ポート
    - 80
- ターゲットポート
    - 80
- プロトコル
    - TCP

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/4ab057b0-2f68-3dc2-456f-78c1779d5f0a.png)

---

左メニューの`ワークロード`を選択し、すべて正常に起動していることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/c4904e49-1f1e-7800-7a05-cf38c58c8ba6.png)

---

左メニューの`サービス`を選択し、正常に起動していることを確認し、外部エンドポイントのリンクをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/4f3cc78e-aad7-e757-fa92-c7ccc8c6e9d1.png)

---

nginxの画面が表示されることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/c925092f-8a70-5749-cf2e-b0713cac9300.png)

---

# その他Kubernetesチュートリアル

- GKEのサイト
    - https://cloud.google.com/kubernetes-engine/docs/tutorials?hl=ja
    - https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook?hl=ja
        - ステップ１からやればOK
- Kubernetes本家
  - https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
 

`kubectl`はRancher UIメニューの `KUBERNETES` → `CLI` から実行可能

---

# 削除
Rancher UIのメニューから`インフラストラクチャ` → `ホスト`を選択します。
表示されているホストの`非アクティブ化`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/70ae5363-8ed9-4e56-dc3c-c4836c677f9e.png)

---

表示が`INACTIVE`になったことを確認した後、メニューボタンから`削除`を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/82df49da-91df-d549-af9d-a5bb2499773a.png)

ホストがないことを確認します。

---

AWSマネージメントコンソールから以下を削除します。

- 作成したIAMユーザー
- Marketplaceから起動したEC2インスタンス
- セキュリティグループ
    - Rancher on RancherOS-v1-1-0-AutogenByAWSMP-
    - rancher-machine

---