概要
この記事 を参考にさせていただき、ちょっとだけ理解したつもりの Helm v3 を使って、Confuent Platform の Helm Chart と ACRにあるコンテナイメージ(rabbitmq)から AKS でコンテナアプリケーションを稼働させる手順をまとめました
ベースとなるDockerコンテナアプリケーションは、この記事達 となり、これをAKS上で稼働させます。
以下の2つのステップで上記内容を順次説明します。今回は STEP-1 について説明します。
STEP-1.AKS上での Confluent Platform 環境構築
STEP-2.AKS上でのコンテナアプリケーションの実行
ローカル環境
macOS Big Sur 11.3
python 3.8.3
helm 3.6.3
事前準備
- この記事 を参考にして、AKS と ACR を構築し、AKSクラスター上で動く Node の確認まで完了していること。
- この記事 を参考にして、ACRへコンテナイメージをプッシュしておきます。
- この記事 にある、「Helm 準備」が完了していること。
Helm Chart の作成(編集)
ACRログインサーバーアドレスの取得
$ az acr list --resource-group $ACR_RES_GROUP --query "[].{acrLoginServer:loginServer}" --output tsv
acr0ituru.azurecr.io
リポジトリの追加と確認
Confluent Platform は github から Helm Chart 情報を入手します。
Helm Hub から RabbitMQ / InfluxDB / Grafana の該当する Helm Chart 情報を見つけ、レポジトリに追加します。
$ helm repo add confluentinc https://confluentinc.github.io/cp-helm-charts/
"confluentinc" has been added to your repositories
$ helm repo add bitnami-azure https://marketplace.azurecr.io/helm/v1/repo
"bitnami-azure" has been added to your repositories
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
$ helm repo update
Helm Chart の検索
confluentinc / rabbitmq / Influxdb / grafana のそれぞれのチャートを検索します
$ helm search repo confluentinc
NAME CHART VERSION APP VERSION DESCRIPTION
confluentinc/cp-helm-charts 0.6.1 1.0 A Helm chart for Confluent Platform Community E...
stable/schema-registry-ui 0.4.4 v0.9.5 DEPRECATED - This is a web tool for the conflue...
$ helm search repo rabbitmq
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami-azure/rabbitmq 8.20.2 3.8.21 Open source message broker software that implem...
bitnami/rabbitmq 8.20.2 3.8.21 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,...
$ helm search repo influxdb
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami-azure/influxdb 2.3.5 2.0.7 InfluxDB™ is an open source time-series d...
bitnami/influxdb 2.3.6 2.0.8 InfluxDB™ is an open source time-series d...
stable/influxdb 4.3.2 1.7.9 DEPRECATED Scalable datastore for metrics, even...
bitnami-azure/grafana 6.1.9 8.1.2 Grafana is an open source, feature rich metrics...
bitnami/grafana 6.1.9 8.1.2 Grafana is an open source, feature rich metrics...
stable/kapacitor 1.2.2 1.5.2 DEPRECATED InfluxDB's native data processing en...
$ helm search repo grafana
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami-azure/grafana 6.1.9 8.1.2 Grafana is an open source, feature rich metrics...
bitnami-azure/grafana-operator 1.1.1 3.10.3 Kubernetes Operator based on the Operator SDK f...
bitnami/grafana 6.1.9 8.1.2 Grafana is an open source, feature rich metrics...
bitnami/grafana-operator 1.1.1 3.10.3 Kubernetes Operator based on the Operator SDK f...
bitnami/grafana-tempo 0.2.2 1.0.1 Grafana Tempo is an open source, easy-to-use an...
stable/grafana 5.5.7 7.1.1 DEPRECATED - The leading tool for querying and ...
元ネタとしての Helm Chrat の Pull
cp-helm-charts / rabbitmq / Influxdb / grafana の Helm Chart を Pull します。
$ helm pull confluentinc/cp-helm-charts
$ tar zxf cp-helm-charts-0.6.1.tgz
$ helm pull bitnami-azure/rabbitmq
$ tar zxf rabbitmq-8.19.1.tgz
$ helm pull bitnami-azure/influxdb
$ tar zxf influxdb-2.3.4.tgz
$ helm pull bitnami-azure/grafana
$ tar zxf grafana-6.1.6.tgz
ディレクトリ構成は以下となります。
$ ls -l
drwxr-xr-x 12 hoge staff 384 8 24 09:38 ./
drwxr-xr-x 7 hoge staff 224 8 19 14:33 ../
drwxr-xr-x 17 hoge staff 544 8 19 15:39 cp-helm-charts/
-rw-r--r-- 1 hoge staff 50496 8 19 15:32 cp-helm-charts-0.6.1.tgz
drwxr-xr-x 9 hoge staff 288 8 19 14:15 grafana/
-rw-r--r-- 1 hoge staff 34570 8 19 14:14 grafana-6.1.6.tgz
drwxr-xr-x 10 hoge staff 320 8 19 14:15 influxdb/
-rw-r--r-- 1 hoge staff 43726 8 19 14:13 influxdb-2.3.4.tgz
drwxr-xr-x 11 hoge staff 352 8 19 13:52 rabbitmq/
-rw-r--r-- 1 hoge staff 47260 8 19 13:52 rabbitmq-8.19.1.tgz
values.yaml ファイルの編集
ACRに登録されている rabbitmq コンテナイメージを使用するので、イメージ名称のディレクトリ内にある values.yaml の以下の部分を編集します
Chart | タグ | 項目 | 値 |
---|---|---|---|
rabbitmq | global | imageRegistry | acr0ituru.azurecr.io |
image | registry | acr0ituru.azurecr.io | |
image | repository | rabbitmq | |
image | tag | 3.8.17 |
Influxdb / grafana の各イメージ名称のディレクトリ内にある values.yaml については以下の部分を編集します。コンテナ起動後必要な設定を入れる必要があります。
Chart | タグ | 項目 | 値 |
---|---|---|---|
influxdb | global | imageRegistry | "" |
image | tag | 1.8.5 | |
auth | enabled | false | |
grafana | global | imageRegistry | "" |
image | tag | 8.0.6 | |
admin | password | admin |
cp-helm-charts の values.yaml については以下の部分を編集します(Confluent Platform は 6.0.0 を使用します)。ただし、Connector のみACRに登録されているコンテナイメージを使用します。また、今回は REST-Proxy を使用しないので無効化にしておきます
Chart | タグ | 項目 | 値 |
---|---|---|---|
cp-helm-charts | cp-zookeeper | imageTag | 6.0.0 |
cp-kafka | imageTag | 6.0.0 | |
cp-schema-registry | imageTag | 6.0.0 | |
cp-kafka-rest | enabled | false | |
cp-kafka-connect | image | acr0ituru.azurecr.io/cp-connect-base | |
cp-kafka-connect | imageTag | 6.0.0 | |
cp-ksql-server | imageTag | 6.0.0 | |
cp-control-center | imageTag | 6.0.0 |
アプリケーション環境のデプロイ
namespace の作成
$ kubectl create namespace akscp01
dry-run
$ helm install cp600mq ./rabbitmq --namespace akscp01 --dry-run
$ helm install cp600db ./influxdb --namespace akscp01 --dry-run
$ helm install cp600gf ./grafana --namespace akscp01 --dry-run
$ helm install cp600 ./cp-helm-charts --namespace akscp01 --dry-run
デプロイ
$ helm install cp600mq ./rabbitmq --namespace akscp01
$ helm install cp600db ./influxdb --namespace akscp01
$ helm install cp600gf ./grafana --namespace akscp01
$ helm install cp600 ./cp-helm-charts --namespace akscp01
全てのPodが立ち上がるまでに数分かかります。しばし、待ちましょう、、、、、
※ rabbitmq / Influxdb / grafana を アンブレラチャート/サブチャート で定義したかったのですが、そこまでの技量がまだなく、、、(涙)
インストール済み Chart の表示
$ helm list -n akscp01
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
cp600 akscp01 1 2021-08-25 00:24:20.279592 +0900 JST deployed cp-helm-charts-0.6.1 1.0
cp600db akscp01 1 2021-08-24 23:54:35.304915 +0900 JST deployed influxdb-2.3.4 1.8.5
cp600gf akscp01 1 2021-08-25 00:14:28.04076 +0900 JST deployed grafana-6.1.6 8.0.6
cp600mq akscp01 1 2021-08-25 00:21:44.218668 +0900 JST deployed rabbitmq-8.19.1 3.8.17
Pod の確認
$ kubectl get pod -n akscp01
NAME READY STATUS RESTARTS AGE
cp600-cp-control-center-5b55c5676f-tn5w9 1/1 Running 3 3m46s
cp600-cp-kafka-0 2/2 Running 1 3m46s
cp600-cp-kafka-1 2/2 Running 0 3m8s
cp600-cp-kafka-2 2/2 Running 0 2m46s
cp600-cp-kafka-connect-764c9bd6cd-n84qw 2/2 Running 3 3m46s
cp600-cp-ksql-server-5948c75b8b-dnfcm 2/2 Running 4 3m46s
cp600-cp-schema-registry-5d79b8c57-r4r5p 2/2 Running 3 3m46s
cp600-cp-zookeeper-0 2/2 Running 0 3m46s
cp600-cp-zookeeper-1 2/2 Running 0 3m8s
cp600-cp-zookeeper-2 2/2 Running 0 2m32s
cp600db-influxdb-5ff9b5cfbc-zkvjb 1/1 Running 0 33m
cp600gf-grafana-59cff8f44b-rwlwx 1/1 Running 0 13m
cp600mq-rabbitmq-0 1/1 Running 0 6m22s
その他リソースの確認
$ kubectl get deployment -n akscp01
NAME READY UP-TO-DATE AVAILABLE AGE
cp600-cp-control-center 1/1 1 1 4m23s
cp600-cp-kafka-connect 1/1 1 1 4m23s
cp600-cp-ksql-server 1/1 1 1 4m23s
cp600-cp-schema-registry 1/1 1 1 4m23s
cp600db-influxdb 1/1 1 1 34m
cp600gf-grafana 1/1 1 1 14m
$ kubectl get service -n akscp01
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cp600-cp-control-center ClusterIP 10.0.58.233 <none> 9021/TCP 4m42s
cp600-cp-kafka ClusterIP 10.0.53.78 <none> 9092/TCP,5556/TCP 4m42s
cp600-cp-kafka-connect ClusterIP 10.0.140.5 <none> 8083/TCP,5556/TCP 4m42s
cp600-cp-kafka-headless ClusterIP None <none> 9092/TCP 4m42s
cp600-cp-ksql-server ClusterIP 10.0.103.176 <none> 8088/TCP,5556/TCP 4m42s
cp600-cp-schema-registry ClusterIP 10.0.85.39 <none> 8081/TCP,5556/TCP 4m42s
cp600-cp-zookeeper ClusterIP 10.0.111.229 <none> 2181/TCP,5556/TCP 4m42s
cp600-cp-zookeeper-headless ClusterIP None <none> 2888/TCP,3888/TCP 4m42s
cp600db-influxdb ClusterIP 10.0.104.94 <none> 8086/TCP,8088/TCP 34m
cp600gf-grafana ClusterIP 10.0.185.234 <none> 3000/TCP 14m
cp600mq-rabbitmq ClusterIP 10.0.14.56 <none> 5672/TCP,4369/TCP,25672/TCP,15672/TCP 7m19s
cp600mq-rabbitmq-headless ClusterIP None <none> 4369/TCP,5672/TCP,25672/TCP,15672/TCP 7m19s
$ kubectl get configmap -n akscp01
NAME DATA AGE
cp600-cp-kafka-connect-jmx-configmap 1 5m1s
cp600-cp-kafka-jmx-configmap 1 5m1s
cp600-cp-ksql-server-jmx-configmap 1 5m1s
cp600-cp-ksql-server-ksql-queries-configmap 1 5m1s
cp600-cp-schema-registry-jmx-configmap 1 5m1s
cp600-cp-zookeeper-jmx-configmap 1 5m1s
cp600gf-grafana-envvars 10 14m
cp600mq-rabbitmq-config 1 7m38s
kube-root-ca.crt 1 35m
設定の前の下準備
kafka-client Pod
kafka topic の設定を行うためのクライントのコンテナを用意します。cp-helm-charts/examples に予め用意されている kafka-client.yaml を以下のように変更します。
apiVersion: v1
kind: Pod
metadata:
name: kafka-client
spec:
containers:
- name: kafka-client
image: confluentinc/cp-kafka:6.0.0
command:
- sh
- -c
- "exec tail -f /dev/null"
この Pod を起動させます。
$ kubectl apply -f cp-helm-charts/examples/kafka-client.yaml -n akscp01
ksql-client Pod
ksql の設定を行うためのクライントのコンテナを用意します。cp-helm-charts/examples に予め用意されている ksql-demo.yaml を ksql-client.yaml としてコピーし、以下のように変更します。
apiVersion: v1
kind: Pod
metadata:
name: ksql-client
spec:
containers:
- name: ksql-client
image: confluentinc/cp-ksqldb-cli:6.0.0
command:
- sh
- -c
- "exec tail -f /dev/null"
この Pod を起動させます。
$ kubectl apply -f cp-helm-charts/examples/ksql-client.yaml -n akscp01
AKS の Pod 状況
ここまでの手順を終了すると、以下の Pod 状況となります
$ kubectl get pod -n akscp01
NAME READY STATUS RESTARTS AGE
cp600-cp-control-center-5b55c5676f-tn5w9 1/1 Running 3 8m45s
cp600-cp-kafka-0 2/2 Running 1 8m45s
cp600-cp-kafka-1 2/2 Running 0 8m7s
cp600-cp-kafka-2 2/2 Running 0 7m45s
cp600-cp-kafka-connect-764c9bd6cd-n84qw 2/2 Running 3 8m45s
cp600-cp-ksql-server-5948c75b8b-dnfcm 2/2 Running 4 8m45s
cp600-cp-schema-registry-5d79b8c57-r4r5p 2/2 Running 3 8m45s
cp600-cp-zookeeper-0 2/2 Running 0 8m45s
cp600-cp-zookeeper-1 2/2 Running 0 8m7s
cp600-cp-zookeeper-2 2/2 Running 0 7m31s
cp600db-influxdb-5ff9b5cfbc-zkvjb 1/1 Running 0 38m
cp600gf-grafana-59cff8f44b-rwlwx 1/1 Running 0 18m
cp600mq-rabbitmq-0 1/1 Running 0 11m
kafka-client 1/1 Running 0 24s
ksql-client 1/1 Running 0 8s
これで、コンテナアプリケーションを設定するための環境が整いました。次回 はこの環境上でプリケーションを実行してみます。
Pod のアンインストール方法(例)
$ helm delete cp600 -n akscp01
release "cp600" uninstalled
namespace の削除方法
$ kubectl delete namespace akscp01
namespace "akscp01" deleted
本課題のステップ情報
STEP-1.AKS上での Confluent Platform 環境構築
STEP-2.AKS上でのコンテナアプリケーションの実行
参考情報
以下の情報を参考にさせていただきました。感謝申し上げます。
Helm v3のすゝめ
事実上の標準ツールとなっているKubernetes向けデプロイツール「Helm」入門