Azure Kubernetes Serviceの検証環境を（コスト低めにて）構成する方法

# 概要

本記事では一通りの機能の確認が可能かつ、料金を極力抑えたAzure Kubernetes Serviceの検証環境を構築する手順についてまとめます。

# 手順

下記3つの工程に分けて説明します。

1. [**手順1 Kubernetes クラスターの作成**](https://qiita.com/valpasucucci43/private/65a014720d84400c86c5#%E6%89%8B%E9%A0%861-kubernetes-%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90)
AKS クラスター自体の作成と基本設定を行います。クラスターは、アプリケーションをデプロイし、運用するための基盤です。
2. [**手順2 ユーザーノードプールの作成**](https://qiita.com/valpasucucci43/private/65a014720d84400c86c5#%E6%89%8B%E9%A0%862-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%8E%E3%83%BC%E3%83%89%E3%83%97%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)
システムノードとは別に、アプリケーション用のリソースを確保するユーザーノードプールを作成します。これにより、システムとアプリケーションの処理を分けることができ、管理が容易になります。
3. [**手順3 動作確認用アプリのデプロイ**](https://qiita.com/valpasucucci43/private/65a014720d84400c86c5#%E6%89%8B%E9%A0%863-%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D%E7%94%A8%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4)
実際にnginxをデプロイして動作確認を行います。これにより、クラスターが正しく機能しているかを確認します。

## 手順1 Kubernetes クラスターの作成

1. Azure ポータルにサインインし[Kubernetes サービス]を選択します
2. [作成] － [Kubernetes クラスター]の順にを選択します
3. [基本]タブにて、下記の設定を行います

   * [サブスクリプション]と[リソースグループ]を選択します（または新しいものを作成します）
   * [クラスターのプリセット構成]で[Dev/Test]を選択します
   * [Kubernetes クラスター名]を任意の名前似て設定します
   * [可用性ゾーン]を[なし]に設定します
   * その他の項目は既定値のままでかまいません
   
   設定が終わりましたら、[次へ]をクリックします

4. [ノードプール]が表示されましたら[ノードサイズ]の項目（Standard D4ds v5 になっているはずです）をクリックします

5. [ノード サイズ]欄で[サイズの選択]をクリックします
6. [D2s v3]を選択し[選択]をクリックします
   *D2s v3は低コストで動作可能なサイズで、検証環境として適しています*
7. [スケーリング方法]を手動を選択します

8. [最小ノード数]を 1 、[最大ノード数] を 3 に設定し、[更新]をクリックします
9. 
10. そのほかの事項は既定値で問題がないため[確認および作成]をクリックします
11. 検証がおわりましたら[作成]をクリックします

上記でデプロイが完了するのを待ちます。

なお、手順内で指定しているリソースグループには下記のリソースが作成されます。

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/b71b118a-0152-8040-6540-9679b34c0042.png)

また、項番3で指定したリソースグループとは別にノードリソースグループが作成されます。
ノードリソースグループは、MC_リソースグループ名_クラスター名_クラスターを作成したリージョン で命名されます。
詳しくは下記公開情報をご確認ください。

 [Azure Kubernetes Services (AKS) の主要な概念 - Azure Kubernetes Service | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/aks/core-aks-concepts#node-resource-group)

ノードリソースグループには下記のリソースが作成されます。

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/204e21c1-0ada-9215-6970-e170cbbecf6b.png)

## 手順2 ユーザーノードプールの作成

上記手順で作成されるノードプールは"システム ノードプール"です。多くの場合、アプリケーションデプロイ用に"ユーザーノードプール"を別途作成します。ユーザーノードプールを作成する理由は以下の通りです

   * 柔軟なリソース管理: アプリケーションの負荷に応じてスケールアウト・スケールインができ、リソースの管理がしやすくなります
   * コスト効率: アプリケーションの要求に応じたノードサイズを選択できるため、コストを最適化できます
   * 分離された環境: アプリケーションを特定のノードプールに配置することで、異なるタイプのワークロードを分離できます

1. Azure ポータルで Azure Kubernetes Service クラスターを開きます
2. [ノードプール]を選択します
3. [ノード プールの追加]を選択します
4. 以下の設定を行います

   * [ノード プール名]を任意の名前で設定します
   * [ モード]で[ユーザー]を選択します
   * [最小ノード数]を 1 に設定しま
   * [最大ノード数]を 3 に設定します
   * その他の項目は既定値のままでかまいません

5. [ノード サイズ]欄の[サイズの選択]を選択します
6. [B2s]を選び[選択]を選択します
   *B2sは低コストかつ軽量で、検証用途に適したサイズです*
7. [確認及び作成]を選択します
8. [作成]を選択します

以上でユーザー ノード プールの作成されます。
作成が完了した状態で[ノードプール]を確認すると下記のような状態となります。

![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/c44352ed-9bdc-773c-10c5-a571f04df037.png)

## 手順3 動作確認用アプリのデプロイ

ユーザーノードプールのノードに簡単なnginxをデプロイして動作確認を行います。

1. 下記内容を記述した yaml ファイルを作成します
   ~~~ 
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nginx-deployment
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         nodeSelector:
           nodepool: user
         containers:
         - name: nginx
           image: nginx:latest
           ports:
           - containerPort: 80
   ~~~ 
2. Azure CLI にて Azure にログインします
3. 下記コマンドを実行し、AKSクラスターに接続します
   ~~~
   az aks get-credentials --resource-group <リソースグループ名> --name <AKSクラスター名>
   ~~~
4. 下記コマンドを実行し、実行されている ユーザー ノードを確認します
   ~~~
   kubectl get nodes
   ~~~
5. 下記コマンドを実行しユーザー ノード にラベルをつけます
   ~~~
   kubectl label nodes <手順4で確認したユーザー ノード名> nodepool=ラベル名
   ~~~
   下記図の場合 aks-userpool-63549242-vmss000000 のノードにラベル `user` を付与しています。
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833876/c639a10c-515e-a5cc-168f-4e2de12381fd.png)
6. 下記コマンドを実行し、nginxデプロイメントを作成します
   ~~~
   kubectl apply -f <手順1で作成したyaml>
   ~~~
7. 下記コマンドを実行し、外部からのアクセスができるようロードバランサーを構成します
   ~~~
   kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service
   ~~~
8. 下記コマンドで実行されているポッド並びに、接続用のEXTERNAL-IP アドレスを確認します
   ~~~
   kubectl get svc nginx-service
   ~~~ 
9. 手順8 で確認した IP アドレスをブラウザで開き、nginx が動作していることを確認します

上記で一通りの検証環境がととのった状況となります。

# クラスターの停止

運用環境であれば基本的に停止はしないと思いますが、検証環境である使用が終わりましたらクラスターを停止することでコストの抑止が可能です。

Azure ポータルの操作であれば、クラスターを表示して[停止]を選択します。
停止したクラスターを開始するにはクラスターを表示して[開始]を選択します。

なお下記公開情報に記載があるようにクラスターを停止した直後に開始をすると、障害がはっせいする場合があるようですので、少々間を開けてから開始してください。

 [Azure Kubernetes Service (AKS) クラスターの停止と起動 - Azure Kubernetes Service | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/aks/start-stop-cluster?tabs=azure-cli)

 なおコマンドで停止、開始をしたい場合の手順は上記公開文章に記載があります。

# コスト監視

コスト監視をする際には[累積コスト]でリソースグループをフィルターしご確認いただくなどで対処ください。
手順1で[Dev/Test]を選択しクラスターを構成しましたので下記の公開情報の手順でのコスト監視はできません。

 [Azure Kubernetes Service のコスト分析 - Azure Kubernetes Service | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/aks/cost-analysis)

# 最後に

Azure Kubernetes Serviceの動作を一通り確認したい、検証したいといった場合には本手順を実施しただければ網羅できるものと思われますので参考にしていただければ幸いです。

なお、後日別記事にてAzure Kubernetes Serviceのログ監視についての記事を作成予定です。