AKS アプリケーションのデプロイ

前回の記事までは、AKS クラスターの作成を行い、AKS アプリケーションをデプロイする下準備をしました。今回の記事では、いよいよ AKS アプリケーションをデプロイ、実行してきます。
アプリケーションのデプロイの基本的な流れは、3段階です。
①マニュフェストファイルの作成
②クラスターでのリソース作成
③アプリケーションの動作確認
この手順に従ってアプリケーションをデプロイしていきます。

#マニュフェストファイルの作成
前回の記事までに Git したものをそのまま使用します、チュートリアルコードが Chap03 の中にあります。ただし、Azure Container Registry の値が異なりますので、自分が作成した正しい値に置き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/f9deefc4-2ce4-933a-1dfd-cd49ca2bb207.png)

ちなみに Azure CLI からでも、該当のディレクトリで、`code .` をすることでオンラインで編集することが可能です。とても便利ですね！！ マニュフェストファイルの中身は以下の様になっています。

```yaml
# A. 基本項目
apiVersion: apps/v1
kind: Deployment
metadata:
  name: photoview-deployment

# B. Deploymentのスペック
spec:
  replicas: 5   # レプリカ数
  selector:
    matchLabels:
      app: photo-view   # テンプレートの検索条件

  # C. Podのテンプレート
  template:
    metadata:
      labels:
        app: photo-view
        env: stage
    spec:
      containers:
      - image: XXXXXXXXXXXXXX.azurecr.io/photo-view:v1.0   # コンテナイメージの場所
        name: photoview-container   # コンテナ名
        ports:
        - containerPort: 80   # ポート番号
```

また、Kubernetes 上で動作させた Pod にクライアントからアクセスさせるためにサービスファイルも定義します。

```yaml
# A. 基本項目
apiVersion: v1
kind: Service
metadata:
  name: webserver

# B. Serviceのスペック
spec:
  type: LoadBalancer
  ports:   # ポート番号
    - port: 80
      targetPort: 80
      protocol: TCP
  
  # C. Podの条件(ラベル)
  selector:
    app: photo-view
```
この二つを作成することで、マニュフェストファイルの準備は完了しました。

#クラスターでのリソース作成
作成したマニュフェストファイルをデプロイする前に基本コマンドでクラスター内の Node の状態を確認します。

```
miyasaka@Azure:~/Understanding-K8s/chap03$ kubectl get node
NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-XXXXXXXX-vmss000000   Ready    agent   3h53m   v1.13.12
aks-nodepool1-XXXXXXXX-vmss000001   Ready    agent   3h53m   v1.13.12
aks-nodepool1-XXXXXXXX-vmss000002   Ready    agent   3h53m   v1.13.12
```

以下コマンドを実行して、作成したマニュフェストファイルをクラスターに送ります。

```
$kubectl apply -f tutorial-deployment.yaml
$kubectl apply -f tutorial-service.yaml
```
マニュフェストファイルを送ったあとで、get コマンドを実行すると以下の様に返ってきます。

```
yasaka@Azure:~/Understanding-K8s/chap03$ kubectl get pod
NAME                                    READY   STATUS             RESTARTS   AGE
photoview-deployment-XXXXXXXXXX-cdq9n   0/1     ErrImagePull       0          26m
photoview-deployment-XXXXXXXXXX-dgxt9   0/1     ImagePullBackOff   0          26m
photoview-deployment-XXXXXXXXXX-g2fpr   0/1     ImagePullBackOff   0          26m
photoview-deployment-XXXXXXXXXX-gf7t8   0/1     ImagePullBackOff   0          26m
photoview-deployment-XXXXXXXXXX-m9wzp   0/1     ErrImagePull       0          26m
```

#アプリケーションの動作確認
ここまででクラスターリソースが出来ているので、あとはクラスターにデプロイしたアプリケーションに割り振られたアドレスを確認します。
`$kubetcl get svc`

```
miyasaka@Azure:~/Understanding-K8s/chap03$ kubectl get svc
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
kubernetes   ClusterIP      10.0.0.1       <none>          443/TCP        12m
webserver    LoadBalancer   10.0.XXX.XXX   XX.XXX.XXX.XX   80:31869/TCP   4m30s
```

これで EXTERNAL-IP に割り振られたアドレスを確認することが出来ます。このアドレスにクライアント PC のブラウザからアクセスすることで、無事にサンプル web アプリケーションにアクセスすることが可能です。
※ `<Pending Status> ` が想像以上に長かったので気長に待ちましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/0c6aee6f-c971-c8be-6cb1-4507e97becd9.png)

これで無事最初のデプロイが完了しました！！

#参考
チュートリアル:Azure Kubernetes Service (AKS) でのアプリケーションの実行
https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-deploy-application