AKS マルチコンテナによる gRPC 検証

#概要
　[前回](https://qiita.com/Aida1971/items/ee701bb5fd00e5443b81)に引き続き、今回は gRPC マルチコンテナを [Azure Kubernetes Service (AKS)](https://azure.microsoft.com/ja-jp/services/kubernetes-service/) 環境へデプロイしていきたいと思います。Azure Kubernetes Service (AKS) は、Kubernetes 環境を管理するフルマネージドな PaaS サービスで、コンテナ オーケストレーションの専門知識がなくても、コンテナ化したアプリケーションのデプロイと管理を簡単に行うことができます。

# Azure Kubernetes Service (AKS) のデプロイ

**１．Azure Portal で Kubernetes Service をデプロイ**

　[基本] [認証] [ネットワーク] と各ステップの設定を順次していきます。以下は [基本] 設定画面ですが、特に悩むこともなく必須項目を埋めて次に進みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/8317de79-8018-d4db-6582-b4e4621be6ed.png)
 
**２．最終検証とクラスタ作成**

　各設定は全て既定のまま進み、最終検証が完了したら [作成] を実行します。正常にデプロイが完了すると指定した Resource Group （今回は RG-AKS）中に次のリソース群が作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/9260bf3f-d213-1291-84db-e48448ae87e5.png)

# Kubernetes ダッシュボードへ接続

※ 現在こちらの手順は、以下の流れで置き換えられます。
https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-deploy-application#deploy-the-application

**１．デプロイした Kubernetes サービスの [概要] でダッシュボードを表示をクリック**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/99868001-f91e-0b23-e8fe-3f773af6eb37.png)

**２．Kubernetes ダッシュボードを開くステップを実施**

　このステップで kubectl コマンド等がインストールされます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/0721b540-38d6-4329-f3b4-711a68b4375c.png)

**補足**
　Azure にログインするアカウントが複数のサブスクリプションを持っている場合は、Kubernetes サービスをデプロイした該当サブスクリプションに事前に切り替えてから上記手順を実行する必要があります。

```bash:az.cmd
az login
az account set --subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

**３．Kubernetes ダッシュボードの表示**

　手順２-４で az aks browse コマンドを実行すると、ブラウザが起動され以下のようなダッシュボードが表示されます。このダッシュ―ボードは、AKS へコンテナイメージをデプロイ後にクラスタ状態の確認などで利用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/93d299ba-8b54-3d4a-ee11-53f175b30473.png)


# gRPC マルチコンテナを AKS へデプロイ

　ここでは[前回作成したgRPC Docker イメージ](https://qiita.com/Aida1971/items/ee701bb5fd00e5443b81#%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%BA%96%E5%82%99%E3%81%A8%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BD%9C%E6%88%90%E6%89%8B%E9%A0%86)を利用して AKS へのデプロイを実施していきます。

**１．デプロイ用マニフェストファイルの用意**

```yml:deploy.yml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
   name: go-deployment
spec:
   replicas: 2
   template:
     metadata:
       labels:
         app: goclient
     spec:
       containers:
       - name: goclient
         image: yuichii1971/goclient-local
         ports:
         - containerPort: 8080
       - name: goserver
         image: yuichii1971/goserver
         ports:
         - containerPort: 50051
---
apiVersion: v1
kind: Service
metadata:
  name: go
spec:
  type: LoadBalancer
  ports: 
  - port: 8080
  selector:
    app: goclient
```

**２．kubectl create コマンドでデプロイ実施**

```
> kubectl create -f deploy.yml
deployment.apps/go-deployment created
service/go created
```

**３．kubectl get service コマンドでデプロイ状況を確認**

```
> kubectl get service go --watch
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE
go        LoadBalancer   10.0.141.148   40.115.154.194   8080:31419/TCP   1m
```
　EXTERNAL-IP 欄は、最初"保留中"で表示されます。しばらくすると、EXTERNAL-IP 欄が「保留中」から「IP アドレス」 に変わったら、CTRL-C を使用して kubectl ウォッチ プロセスを停止します。 

**４．ブラウザでサイトへアクセスし応答を確認**

　上記の例では IP アドレス 40.115.154.194、ポート 8080 で外部公開されています。ブラウザで http://40.115.154.194:8080/ へアクセスする事でサイトからの応答を確認出来ます。/test など任意の仮想ディレクトリを指定する事で次のような応答が返ってきます。

Your url path is test<br> Greeting: Hello world

#最後に

　本記事の内容は、下記 Azure 自習書を参考にしています。併せてご確認頂く事でより詳細な手順が理解できるかと思います。
####[Azure Kubernetes Service (AKS) によるアプリケーション開発](http://download.microsoft.com/download/9/7/8/978ED1D1-A670-47A7-B478-5C0FEC542204/Hands-on-13-AzureKubernetesService(AKS)_SelfLearning.pdf)