【新規】 Azure Kubernetes Service (AKS) に Helm を使用して新規にアプリケーションをインストールしてみました

## 概要

[この記事](https://qiita.com/loftkun/items/bcfe1f205cde4d74a384) を参考にさせていただき、Helm v3 をちょっとだけ理解するため、AKSへ新規でコンテナアプリケーション（RabbitMQ）を起動させる手順をまとめました。

## ローカル環境

macOS Big Sur 11.3 
python 3.8.3
helm 3.6.3

## 事前準備

[この記事](https://qiita.com/turupon/items/96c5ce8c7c1d39373eac) を参考にして、AKS と ACR を構築し、AKSクラスター上で動く Node の確認まで完了していること。

---

## Helm 準備

### Helm のインストール

Helm のインストールとバージョンの確認

```
$ brew install kubernetes-helm

$ helm version   
version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"dirty", GoVersion:"go1.16.5"}
```

### stable のリポジトリの追加と確認（サポート終了してますが、、、）

```
$ helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories


$ helm repo list
NAME    URL
stable  https://charts.helm.sh/stable
```

### リポジトリの追加と確認（こちらが正式）

[Helm Hub](https://artifacthub.io/) から RabbitMQ の該当する Helm Chart 情報を見つけます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/8891ef07-8890-adb4-f40f-21339e54dd60.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/b8c4b153-4c64-8e6f-1ab9-56ce02b62c2c.png)

レポジトリに追加します

```
$ helm repo add bitnami-azure https://marketplace.azurecr.io/helm/v1/repo
"bitnami-azure" has been added to your repositories


$ helm repo list
NAME         	URL                                        
stable       	https://charts.helm.sh/stable              
bitnami-azure	https://marketplace.azurecr.io/helm/v1/repo
```


### Helm チャートの検索

```
$ helm search repo rabbitmq

NAME                               	CHART VERSION	APP VERSION	DESCRIPTION                                       
bitnami-azure/rabbitmq             	8.19.1       	3.8.19     	Open source message broker software that implem...
stable/prometheus-rabbitmq-exporter	0.5.6        	v0.29.0    	DEPRECATED Rabbitmq metrics exporter for promet...
stable/rabbitmq                    	6.18.2       	3.8.2      	DEPRECATED Open source message broker software ...
stable/rabbitmq-ha                 	1.47.1       	3.8.7      	DEPRECATED - Highly available RabbitMQ cluster,...
```

---

## アプリケーションのデプロイ（bitnami-azure を使用しました）

### namespace の作成

```
$ kubectl create namespace helm-mq01
```

### dry-run

```
$ helm install mqtest01 stable/rabbitmq --namespace helm-mq01 --dry-run
   or
$ helm install mqtest01 bitnami-azure/rabbitmq --namespace helm-mq01 --dry-run
```

### デプロイ

```
$ helm install mqtest01 stable/rabbitmq --namespace helm-mq01
   or
$ helm install mqtest01 bitnami-azure/rabbitmq --namespace helm-mq01
```

### インストール済みChartの表示

```
$ helm list -n helm-mq01

NAME    	NAMESPACE	REVISION	UPDATED                           	STATUS  	CHART          	APP VERSION
mqtest01	helm-mq01	1       	2021-08-05 17:39:14.6732 +0900 JST	deployed	rabbitmq-8.19.1	3.8.19     
```

### Pod の確認

```
$ kubectl get pod -n helm-mq01

NAME                  READY   STATUS    RESTARTS   AGE
mqtest01-rabbitmq-0   1/1     Running   0          2m17s
```

### その他リソースの確認

```
$ kubectl get deployment -n helm-mq01
$ kubectl get service -n helm-mq01
$ kubectl get configmap -n helm-mq01
```

---

## アプリケーションの動作確認

### NOTES での手順の確認

NOTES部分に基本的な使い方が記載されてます

```
$ helm install mqtest01 bitnami-azure/rabbitmq --namespace helm-mq01

NOTES:
** Please be patient while the chart is being deployed **

Credentials:
    echo "Username      : user"
    echo "Password      : $(kubectl get secret --namespace helm-mq01 mqtest01-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)"
    echo "ErLang Cookie : $(kubectl get secret --namespace helm-mq01 mqtest01-rabbitmq -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode)"

Note that the credentials are saved in persistent volume claims and will not be changed upon upgrade or reinstallation unless the persistent volume claim has been deleted. If this is not the first installation of this chart, the credentials may not be valid.
This is applicable when no passwords are set and therefore the random password is autogenerated. In case of using a fixed password, you should specify it when upgrading.
More information about the credentials may be found at https://docs.bitnami.com/general/how-to/troubleshoot-helm-chart-issues/#credential-errors-while-upgrading-chart-releases.

RabbitMQ can be accessed within the cluster on port  at mqtest01-rabbitmq.helm-mq01.svc.

To access for outside the cluster, perform the following steps:

To Access the RabbitMQ AMQP port:

    echo "URL : amqp://127.0.0.1:5672/"
    kubectl port-forward --namespace helm-mq01 svc/mqtest01-rabbitmq 5672:5672

To Access the RabbitMQ Management interface:

    echo "URL : http://127.0.0.1:15672/"
    kubectl port-forward --namespace helm-mq01 svc/mqtest01-rabbitmq 15672:15672
```

### NOTES 手順の実行

パスワードの取得

```
$ echo "Password : $(kubectl get secret --namespace helm-mq01 mqtest01-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)"

Password : 1NB1n3fbsI
```

ポートフォワーディングの設定

```
$ kubectl port-forward --namespace helm-mq01 svc/mqtest01-rabbitmq 15672:15672

Forwarding from 127.0.0.1:15672 -> 15672
Forwarding from [::1]:15672 -> 15672
```

※ポートフォワーディングを中止する場合、CTRL+C を押します

### アプリケーションへのアクセス

ブラウザで http://localhost:15672 にアクセスします。 RabbitMQのログイン画面が表示されます。
Username : user　/　Password : 1NB1n3fbsI を入力し、承認後 Ovweview 画面が表示され　RabbitMQ 3.8.19 の管理コンソールにアクセスできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/88f5b3c1-ae60-7f96-9e26-5fc99433e827.png)

### アプリケーションのアンインストール

```
$ helm uninstall mqtest01 -n helm-mq01
   or
$ helm delete mqtest01 -n helm-mq01
release "mqtest01" uninstalled
```

### namespace の削除

```
$ kubectl delete namespace helm-mq01
namespace "helm-mq01" deleted
```

---

## まとめ

Helm v3 を使用して Helm repository のチャートを利用することにより、AKSで新規にアプリケーションを稼働せさることを確認しました。

## 参考情報

以下の情報を参考にさせていただきました。感謝申し上げます。
[Helm v3のすゝめ](https://qiita.com/loftkun/items/bcfe1f205cde4d74a384)