Check! Azure Container Service (ACS) で新着の Kubernetes を試す

こんにちは、 @dz_ こと大平かづみです。

Prologue - はじめに
====

[Azure Container Service](https://azure.microsoft.com/ja-jp/services/container-service/ "Azure Container Service | Microsoft Azure") (ACS) のコンテナ基盤に、 [Kubernetes]() が仲間入りしました！

- 参考: [Azure Container Service: the cloud’s most open option for containers | Blog | Microsoft Azure](https://azure.microsoft.com/en-us/blog/azure-container-service-the-cloud-s-most-open-option-for-containers/ "Azure Container Service: the cloud’s most open option for containers | Blog | Microsoft Azure")

早速試してみます (b’v`★)

とはいえ、 Kubernetes は初めて触るので、その点はご容赦くださいませ^^;

作業環境
====
環境
----
- Azure Container Service
- クライアント
    - Windows 10
    - Bash on Windows (≒ Ubuntu 14.04)

備考
----
- Azure のアカウントがある前提で進めます。
- Azure Container Service は、接続に SSH を使います。ここでは ssh-agent (Bash on Windows) を使って進めます。環境に合わせて適宜読み替えてください。
    - ACS を作成するときに、SSH 公開鍵を登録する
    - SSH でマスターノードに接続する

Azure Container Service (ACS) で Kubernetes 環境を作ってみる
====
それではさっそく、画面に倣って進みます。

リソースの新規作成画面から、 Azure Container Service を選択し、作成します。

![20161112_kubernetes-on-acs_009.png](https://qiita-image-store.s3.amazonaws.com/0/3812/e2eadd6b-2415-d5a0-0919-c6d41d5235f6.png)

それぞれ項目に入力し、次へ進みます。

| 項目 | 値 |
|-----|----|
| User name | 任意のユーザー名。マスターノードへの SSH接続時に使用する。 |
| SSH public key | SSH 公開鍵の文字列 (`id_rsa.pub` の内容 (`ssh-rsa XXXXX...`))。マスターノードへの SSH接続時に使用する。 |
| サブスクリプション | 使用するサブスクリプション |
| リソースグループ | リソースグループ名 |
| 場所 | リソースの配置場所 |

Orchestrator configuration では、 Kubernetes を選択します。すると、

![20161112_kubernetes-on-acs_010.png](https://qiita-image-store.s3.amazonaws.com/0/3812/ffd7406c-2a20-7e1e-fc1c-c4ab4ab92cc3.png)

おや？ 今までの DC/OS や Swarm 選択時にはなかった項目が表示されました。（下図参照） Service Principal というものが必要とのこと。

- Service Principal Client ID 
- Service Principal Client Secret

[Service Principals | Microsoft Azure Container Service Engine](https://github.com/Azure/acs-engine/blob/master/docs/serviceprincipal.md "Service Principals | Microsoft Azure Container Service Engine") を確認すると、 Service Principal は [Azure CLI 2.0 (Preview)](https://github.com/Azure/azure-cli "Azure CLI 2.0 Preview") 、旧 Azure CLI 、Azure PowerShell 、旧ポータルから作成できるようです。

なお、私は、最初 Azure CLI 2.0 で試みて Service Principal を発行することはできたのですが、ログインして確認する (`az login --service-principal`) でうまく認証が通らず、正しく作成できたのか判断できなかったので、旧 Azure CLI にて作り直しました。

Service Principal を入力して進みましょう。Container Service settings を入力し次に進みます。なお、 Agent count はコンテナが配置されるエージェントノードの個数です。これとは別に、マスターノードが作成されます。

| 項目 | 値 |
|-----|----|
| Agent count | エージェントノードの個数 |
| Agent virtual machine site | エージェントノードのマシンサイズ |
| DNS prefix for container service | 各ノードのインスタンス名のプレフィックス |

![20161112_kubernetes-on-acs_011.png](https://qiita-image-store.s3.amazonaws.com/0/3812/804d8329-4bfe-5925-cd70-e487fa661f1d.png)

それぞれ内容を確認して、作成します。

![20161112_kubernetes-on-acs_012.png](https://qiita-image-store.s3.amazonaws.com/0/3812/5957a258-2678-bd90-959a-a2a6eba030fa.png)

しばらくするとデプロイが完了します。

![20161112_kubernetes-on-acs_013.png](https://qiita-image-store.s3.amazonaws.com/0/3812/01dc16e1-e744-0c67-7f0a-c57241a22d5d.png)

デプロイ完了！(｡･ω･)ﾉ

Kubernetes on ACS に触ってみる
====
さて、ACSが準備できたら、接続して Kubernetes に触れてみます！このウォークスルーを参考に進めます。

- [Microsoft Azure Container Service Engine - Kubernetes Walkthrough](https://github.com/Azure/acs-engine/blob/master/docs/kubernetes.md "Microsoft Azure Container Service Engine - Kubernetes Walkthrough")

今回は Bash on Windows (Ubuntu 14.04) から接続します。まず、登録した ssh公開鍵に対応するキーを登録しておきます。

```bash
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
```

次に、ポータルの ACS のリソースグループで、前回のデプロイを開き、SSHMATER0 の値をコピーします。これは、マスターノードへの接続用コマンドです。

![20161112_kubernetes-on-acs_014.png](https://qiita-image-store.s3.amazonaws.com/0/3812/38ce366d-2e32-3895-42fd-5e978a095ac0.png)

ただし、このコマンドのまま実行すると以下のエラーでつながらないです。

```bash
$ ssh user@xxxmgmt.japaneast.cloudapp.azure.com -A -p 2200

ssh: connect to host xxxmgmt.japaneast.cloudapp.azure.com port 2200: Resource temporarily unavailable
```

このコマンドでは 2200 ポートを指定していますが、ネットワーク セキュリティ グループを確認してみると、 22 と 443 しか開いていないようです。なので、ポート指定をせずに接続しました。

```bash
# Kubernetes のマスターノードに SSH 接続する
$ ssh user@xxxmgmt.japaneast.cloudapp.azure.com -A

Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-28-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

130 packages can be updated.
52 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
```

つながった！

どれどれ、 `kubectl` コマンドを使ってみると、

```bash
# Kubernetes のノード情報を表示する
$ kubectl get nodes

NAME                    STATUS                     AGE
k8s-agent-55298537-0    Ready                      3h
k8s-agent-55298537-1    Ready                      3h
k8s-master-55298537-0   Ready,SchedulingDisabled   3h
```

うむ、ノードも無事に認識しているようですね。おけっ！ (b’v`★)

Epilogue - おわりに
====
Kubernetes 初心者でも、クラスタ作るところまでは問題ないですね！

続きは、さらに Kubernetes をもうちょっと勉強してから試してみます～


ちなみに、私が Bash on Windows に Azure CLI 2.0 を入れようとして奮闘した情報はこちら！

- [Check! Azure CLI 2.0 Preview を Bash on Windows にインストールする（のトラブルシューティング）](http://qiita.com/dz_/items/78558d9f1e245ad7f103 "Check! Azure CLI 2.0 Preview を Bash on Windows にインストールする（のトラブルシューティング）")