0.前提
- kubernetes, helmに関する初歩的な知識
1.動作環境
2. KEDAをHelmでインストールする
- https://keda.sh/docs/2.5/deploy/ を参考に、インストールする
2.1 Helm リポジトリを追加する
ubuntu@ip-172-31-27-87:~$ helm repo add kedacore https://kedacore.github.io/charts
"kedacore" has been added to your repositories
2.2 Helmのリポジトリをアップデートする
ubuntu@ip-172-31-27-87:~$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "kedacore" chart repository
Update Complete. ⎈Happy Helming!⎈
2.3 kedaをhelmチャートでインストールする
ubuntu@ip-172-31-27-87:~$ kubectl create namespace keda
namespace/keda created
ubuntu@ip-172-31-27-87:~$ helm install keda kedacore/keda --namespace keda
NAME: keda
LAST DEPLOYED: Sun Jan 30 05:15:51 2022
NAMESPACE: keda
STATUS: deployed
REVISION: 1
TEST SUITE: None
2.4 kedaでインストールされたコンポーネントを確認する
ubuntu@ip-172-31-27-87:~$ kubectl get all -n keda
NAME READY STATUS RESTARTS AGE
pod/keda-operator-5748df494c-qfk8c 1/1 Running 0 2m13s
pod/keda-operator-metrics-apiserver-cb649dd48-lkxtw 1/1 Running 0 2m13s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/keda-operator-metrics-apiserver ClusterIP 10.96.44.179 <none> 443/TCP,80/TCP 2m13s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/keda-operator 1/1 1 1 2m13s
deployment.apps/keda-operator-metrics-apiserver 1/1 1 1 2m13s
NAME DESIRED CURRENT READY AGE
replicaset.apps/keda-operator-5748df494c 1 1 1 2m13s
replicaset.apps/keda-operator-metrics-apiserver-cb649dd48 1 1 1 2m13s
サンプルアプリをデプロイする
3.1 RabbitMQ
https://github.com/kedacore/sample-go-rabbitmq を参考に、サンプルアプリをkind
クラスタにデプロイしてみます。
手順は以下の通り
- サンプルアプリのgitリポジトリをcloneする
- helmでRabbitMQのキューを作成する
- RabbitMQのコンシューマーをデプロイする
- メッセージをキューにパブリッシュする
- (オプション)お片付け
3.1.1 サンプルアプリのgitリポジトリをcloneする
git clone https://github.com/kedacore/sample-go-rabbitmq
cd sample-go-rabbitmq
3.1.2 helmでRabbitMQのキューを作成する
Bitnamiのリポジトリを追加する
helm repo add bitnami https://charts.bitnami.com/bitnami
helm v3かつkindを利用しているので、下記の方法でインストールする
helm install rabbitmq --set auth.username=user --set auth.password=PASSWORD --set volumePermissions.enabled=true bitnami/rabbitmq
3.1.3 RabbitMQがデプロイされたことを確認する
kubectl get po
NAME READY STATUS RESTARTS AGE
rabbitmq-0 1/1 Running 0 50s
3.1.4 RabbitMQのコンシューマーをデプロイする
kubectl apply -f deploy/deploy-consumer.yaml
デプロイの状態を確認する
kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
rabbitmq-consumer 0/0 0 0 32s
Podがひとつも起動していないことが分かる。これはRabbit MQのキューが一つもないからです。Podが増えるかこれから確認してみます。
3.1.5 メッセージをキューにパブリッシュする
kubectl apply -f deploy/deploy-publisher-job.yaml
デプロイメントの状態を確認する。下からも分かるように次第にPodが増加しています。
kubectl get deploy -w
kubectl get deploy -w
NAME READY UP-TO-DATE AVAILABLE AGE
rabbitmq-consumer 1/1 1 1 4m26s
kubectl get deploy -w
NAME READY UP-TO-DATE AVAILABLE AGE
rabbitmq-consumer 4/4 4 4 4m36s
kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
rabbitmq-consumer 8/16 16 8 5m3s
下記のコマンドで、Podあたりの処理するメッセージ数を確認できます。
kubectl get hpa
キューが空になり、一定の時間が経過するとPodは0にスケールダウンします。
kubectl get deploy -w
NAME READY UP-TO-DATE AVAILABLE AGE
rabbitmq-consumer 0/0 0 0 7m25s
3.1.6 (オプション)お片付け
kubectl delete job rabbitmq-publish
kubectl delete ScaledObject rabbitmq-consumer
kubectl delete deploy rabbitmq-consumer
helm delete rabbitmq
最後に
今回はKEDAをインストールし、実際にサンプルアプリをデプロイしてみました。kubernetesのサーバレスアプリである、Knative
に関してもKnativeでサーバレスを実現するで触れているので良かったら読んでみて下さい。