Azure Kuberenetes Serviceを使う

# はじめに
諸事情でGKEで動かしていたアプリケーションをAKSに移行しなければなくなったので、やりかたをまとめました。
せっかくなのでACRとも連携させます。

環境：Windows 10 Pro, 64bit

# 環境準備
1. VS Codeインストール
    - 別にVS Codeでなくてもいいんだけど、ms製品のほうが相性がよさそうな気がして
    - [VS Code](https://code.visualstudio.com/)
2. VS Code 拡張機能のインストール
    - [ctrl] + [shift] + [x]でコンテナ開発用の便利な拡張機能をインストール
    - docker
        - <img width="980" alt="cap1.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/271751/35f73788-7f06-715d-53ad-e32904d75dc1.png">
    - kubernetes
        - <img width="1039" alt="cap2.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/271751/5b241e25-a5b5-f119-bb88-a0ee138f5bea.png">
3. Azure CLIコマンドのインストール(WSL Ubuntu)
    - Azureサービスをコマンドから実行するためのツールをインストール

```
$ sudo apt-get install apt-transport-https lsb-release software-properties-common -y
$ AZ_REPO=$(lsb_release -cs)
$ echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | \
    sudo tee /etc/apt/sources.list.d/azure-cli.list
$ curl -OL http://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb`
$ sudo apt update
$ sudo apt install azure-cli
```

参考:[WSLでAzure CLIを試してみる](参考:https://qiita.com/whale_shark/items/8e25551dc056ffafe80e)
4. kubectlコマンドのインストール(WSL Ubuntu)
    - バイナリをダウンロードして保存して環境変数に追加する

```
$ sudo apt-get update && sudo apt-get install -y apt-transport-https
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo touch /etc/apt/sources.list.d/kubernetes.list
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee --a /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubectl
```

- バージョン確認

```
$ kubectl version
```

# Azure Container Registryを使ったコンテナイメージのビルドと公開
- ACR名設定

```
$ ACR_NAME=sampleYuxzuxRepositry
```
- ACR名チェック
    - ACR名は世界でユニークじゃないといけないのでチェックする

```
$ az acr check-name -n $ACR_NAME
```

- リソースグループ名設定

```
$ ACR_RES_GROUP=$ACR_NAME
```
- リソースグループ作成

```
$ az group create --resource-group $ACR_RES_GROUP --location japaneast
```
- ACRレジストリ作成

```
$ az acr create --resource-group $ACR_RES_GROUP --name $ACR_NAME --sku Standard --location japaneast
```
- イメージのビルド

```
$ az acr build --registry $ACR_NAME --image yuxzux:v1.0 .
```
- イメージの確認

```
$ az acr repository show-tags -n $ACR_NAME --repository yuxzux
```
- ACR_IDを取得して環境変数に設定

```
$ ACR_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
```
- サービスプリンシパル名の設定

```
$ SP_NAME="sample-acr-service-principal"
```
- サービスプリンシパルの作成

```
$ SP_PASSWD=$(az ad sp create-for-rbac --name $SP_NAME --role Reader --scopes $ACR_ID --query password --output tsv)
```
- サービスプリンシパルのIDをAPP_IDに設定

```
$ APP_ID=$(az ad sp show --id http://$SP_NAME --query appId --output tsv)
```
- 確認

```
$ echo $APP_ID
$ echo $SP_PASSWD
```
# Azure Kubernetes Serviceを使ったクラスター作成
- クラスターの作成

```
$ AKS_CLUSTER_NAME=YuxzuxCluster
```
- クラスターを作成するリソースグループの設定

```
$ AKS_RES_GROUP=$AKS_CLUSTER_NAME
```
- リソースグループの作成

```
$ az group create --resource-group $AKS_RES_GROUP --location japaneast
```
- クラスターの作成(Cloud Shell)

```
$ az aks create \
    --name $AKS_CLUSTER_NAME \
    --resource-group $AKS_RES_GROUP \
    --node-count 3 \
    --node-vm-size Standard_DS1_v2 \
    --generate-ssh-keys \
    --service-principal $APP_ID \
    --client-secret $SP_PASSWD
```
- 認証情報の取得

```
$ az aks get-credentials --admin --resource-group $AKS_RES_GROUP --name $AKS_CLUSTER_NAME
```

以上。kubectlコマンドでいろいろできます。