Azure Container Service で Kubernetes


## 概要

以下の公式チュートリアルが参考になりますが、Azure Cloud Shell での手順になっておりローカルマシンのTerminal上でやりたい場合は一手間必要だったり、権限系ではまったりしたので、手順をまとめます。

* [クイックスタート - Linux コンテナー用の Kubernetes クラスターをデプロイする]

この記事は [Azure Container Service] で [Kubernetes] クラスタを作って、ローカルにインストールした kubectl でマスタに接続するまで〜の手順です。

1. [Azure CLI]、[kubectl] コマンド をインストールする
2. Azureログインユーザーをサブスクリプションの所有者にする
3. [Azure Container Service] で [Kubernetes] クラスタを作る
4. [kubectl] で [Kubernetes] マスタに接続する


## Azure CLI、kubectl コマンドをインストールする

### For Windows

1. [Azure CLI Installer (MSI)] で [Azure CLI] をインストールする
2. **管理者権限で** Power Shell を開く
3. ``$ az acs kubernetes install-cli``

> [32bit版のkubectlはここからDownload](https://appscode.com/cli/get/kubectl/)

### For Mac

1. ``$ curl -L https://aka.ms/InstallAzureCli | bash``
    * ``$ brew install azure-cli`` でも可
2. ``$ az acs kubernetes install-cli``


## Azureログインユーザーをサブスクリプションの所有者にする

次手順で [Azure CLI] を使って [Kubernetes] クラスタを作っていきますが、Azureのログインユーザーが **サブスクリプションの所有者** でなけれはクラスタの作成に失敗します。

> ※ [Azure CLI] でクラスタを構築する際に、Application ID、Access Keyの発行とサブスクリプションへの権限登録を裏で行っており、これが権限に引っかかります

ログインユーザーが既にサブスクリプションの所有者 (例えばルートアカウント) である場合は次の手順は不要です。そうでない場合は **ルートアカウントで [Azure Portal] にログインしなおし**、以降の手順を実施して下さい。

> ![subscription-3.png](https://qiita-image-store.s3.amazonaws.com/0/60131/5ae8c405-b256-e3aa-26b2-0d01996dd8cb.png "subscription-3.png")

*[Subscriptions >> {Subscription名} >> Access control (IAM)](https://portal.azure.com/?l=ja.ja-jp#blade/Microsoft_Azure_Billing/SubscriptionsBlade)* で "+ADD" を押します。

> ![subscription-1.png](https://qiita-image-store.s3.amazonaws.com/0/60131/9d742b53-754a-9891-3309-9b0feb9ba9e8.png "subscription-1.png")

サブスクリプションの所有者にしたいユーザーを選択して保存します。

> ![subscription-2.png](https://qiita-image-store.s3.amazonaws.com/0/60131/ae978da2-cfaf-6e4e-c649-ac2d3fd22a7a.png "subscription-2.png")


## Azure Container Service で Kubernetes クラスタを作る

以下のコマンドで [Azure Portal] への認証をします。URLとトークンIDが表示されるのでブラウザで開きます。

```
$ az login

To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code {トークンID} to authenticate.
```

リソースグループを作ります。

```
$ az group create --name rgroupname --location westus
```

[Kubernetes] クラスタを作ります。SSHの公開鍵 ``~/.ssh/id_rsa.pub`` と秘密鍵 ``~/.ssh/id_rsa`` が自動で作られます。

```
$ az acs create --orchestrator-type kubernetes --resource-group rgroupname --name clustername --agent-vm-size Standard_DS1_v2 --agent-count 1 --generate-ssh-keys
```

> ここでエラーになる人は、前述の通りログインユーザーが「サブスクリプションの所有者」ではないと思います。


## kubectl で Kubernetes マスタに接続する

[Kubernetes] クラスタのマスタノードに接続します。

```
$ az acs kubernetes get-credentials --resource-group rgroupname --name clustername
```

うまくいけば↓でクラスタノードの一覧が見れます。

```
$ kubectl get nodes
```


## 参考

* [クイックスタート - Linux コンテナー用の Kubernetes クラスターをデプロイする]
* [リソースにアクセスできる Azure Active Directory アプリケーションとサービス プリンシパルをポータルで作成する]

[Azure Container Service]:https://azure.microsoft.com/ja-jp/services/container-service/
[Azure CLI]:https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest
[Kubernetes]:https://kubernetes.io/
[kubectl]:https://kubernetes.io/docs/user-guide/kubectl-overview/
[Azure CLI Installer (MSI)]:https://aka.ms/InstallAzureCliWindows
[クイックスタート - Linux コンテナー用の Kubernetes クラスターをデプロイする]:https://docs.microsoft.com/ja-jp/azure/container-service/kubernetes/container-service-kubernetes-walkthrough
[Azure Portal]:https://portal.azure.com/
[Container Service]:https://portal.azure.com/#blade/HubsExtension/Resources/resourceType/Microsoft.ContainerService%2FcontainerServices
[Putty]:http://www.putty.org/
[Teraterm]:https://ttssh2.osdn.jp/
[リソースにアクセスできる Azure Active Directory アプリケーションとサービス プリンシパルをポータルで作成する]:https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-create-service-principal-portal