Rancherを使ってGKEにKEDAを簡単導入
はじめに
Microsoftの年次開発者会議「Build 2019」でKEDAが発表されました。
KEDAはKnativeと同じようなKubernetes上にサーバーレス環境を構築するサービスになります。
今回はドキュメントに従い、環境構築から動作確認まで行いますが、AzureではなくGCPに構築したいと思います。
KEDA
Gitnubのリポジトリはこちら
まだまだこれからのプロジェクトだと思いますが、Kubernetes上でイベントドリブンなサーバーレスは非常に楽しみなプロダクトなので、きっとこれから伸びてくると思います。
トリガーにできるイベント
- RabbitMQ Queues
- Kafka topics
- Azure Storage Queues
- Azure Service Bus Queues
- Azure Service Bus Topics
Azure以外で使おうと思うと、今の所RabbitMQとKafkaの2つ。今回はRabbitMQで検証します。
構築するもの
- GKEクラスタ
- Rancher
- KEDA(Helm)
- RabbitMQ(Helm)
- サンプルアプリ
構築
GKEクラスタ
GKEクラスタ
大阪に住んでいるので、大阪リージョン!
サブネットも事前に大阪リージョンで作成しています。
gcloud container clusters create <クラスタ名> --cluster-version=latest \
--machine-type=n1-standard-2 \
--num-nodes=1 --enable-autoscaling --min-nodes=1 --max-nodes=3 \
--network=<VPC名> --subnetwork=<サブネット名> \
--disk-size=50GB \
--enable-autorepair \
--enable-cloud-logging \
--enable-cloud-monitoring \
--zone=asia-northeast2-b \
--node-locations=asia-northeast2-a,asia-northeast2-b,asia-northeast2-c \
--addons=HttpLoadBalancing,HorizontalPodAutoscaling \
--preemptible
Rancher
今回、必要なプロダクトはHelmでデプロイするため、Kubernetesの管理にRancherを使用します。
RancherはHelmのカタログから簡単にデプロイできますし、カタログの追加も簡単なので、楽チン。
ここのQuickStart(Dockerはインストール済みの前提)
https://github.com/rancher/rancher
Rancherにクラスタをインポート
Add Clusterを選択
Importを選択して、ClusterNameを入れる
表示されたコマンドをローカルのコンソールから実行
なお、2行目、3行目はどちらかでよい(Rancherをドメイン取ってちゃんとしたTLS通信しているなら2行目、IPアドレスでのアクセスなどでオレオレ認証なら3行目)
KEDAのデプロイ
Global→Tools→Catalogsからカタログのセットアップ画面を開き、HelmStableを有効化する。また、AddCatalogを押す
KEDAのカタログを追加する
Catalog URL : https://kedacore.azureedge.net/helm
KEDAとRabbitMQをデプロイする
画面に左上のプルダウン(初期はGlobal)から、クラスタ名→Defaultと選択
Appsを開き、Launchをクリック
KEDA
デフォルトでインストール
RabbitMQ
デフォルトでインストール
クラスタにKEDAとRabbitMQが追加されたことを確認
サンプルアプリの導入
ドキュメントに沿って導入していきます。
Githubからclone
git clone https://github.com/kedacore/sample-go-rabbitmq
cd sample-go-rabbitmq
今回作成したRabbitMQのホスト名・パスワードはサンプルとは異なるので、変更します。
RancherでRabbitMQのホスト名・パスワードを確認する
Appsからrabbitmqを開くと詳細が確認できます。
ここでまず、namespaceホスト名を確認
パスワードは確認用のkubectlが表示されているので、それをローカルで実行
echo "Password : $(kubectl get secret --namespace rabbitmq rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)"
※rabbitmqは環境ごとに異なります
デプロイ用のyamlを書き換え
パスワードおよび、rabbitmqのnamespace,ホスト名を書き換えます
deploy/deploy-consumer.yaml
'amqp://user:[email protected]:5672'の箇所(2箇所)
apiVersion: apps/v1
...
containers:
- name: rabbitmq-consumer
image: jeffhollan/rabbitmq-client:dev
imagePullPolicy: Always
command:
- receive
args:
- 'amqp://user:[email protected]:5672'
---
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
...
spec:
scaleTargetRef:
deploymentName: rabbitmq-consumer
pollingInterval: 5 # Optional. Default: 30 seconds
cooldownPeriod: 30 # Optional. Default: 300 seconds
maxReplicaCount: 30 # Optional. Default: 100
triggers:
- type: rabbitmq
metadata:
queueName: hello
host: 'amqp://user:[email protected]:5672'
queueLength : '5'
deploy/deploy-publisher-job.yaml
同様の箇所を1箇所
なお、こちらはテストツールなので、他にRabbitMQに送信ツールがあればそれでもいいと思います。
apiVersion: batch/v1
kind: Job
metadata:
name: rabbitmq-publish
spec:
template:
spec:
containers:
- name: rabbitmq-client
image: jeffhollan/rabbitmq-client:dev
imagePullPolicy: Always
command: ["send", "amqp://user:[email protected]:5672", "300"]
restartPolicy: Never
backoffLimit: 4
デプロイ
kubectl apply -f deploy/deploy-consumer.yaml
スケールの確認
kubectl get deploy -w
別タブでテストデプロイ実行
kubectl apply -f deploy/deploy-publisher-job.yaml
Podの状況
どんどんPodが増えていき、終わった途端0に落ちるのがわかります。
デフォルトのYAMLではだいたい5秒間隔くらいでPodがスケールしていき、約90sで30までスケールしました。処理が終わると、すぐに0に落ちました。
この辺りは、deploy-consumer.yamlのScaledObjectに設定が記載されています。(スケールのタイミングや最大Pod数など)
$ $ kubectl get deploy -w
NAME READY UP-TO-DATE AVAILABLE AGE
rabbitmq-consumer 0/0 0 0 5s
rabbitmq-consumer 0/1 0 0 19s
rabbitmq-consumer 0/1 0 0 19s
rabbitmq-consumer 0/1 0 0 19s
rabbitmq-consumer 0/1 1 0 20s
rabbitmq-consumer 1/1 1 1 24s
rabbitmq-consumer 1/4 1 1 29s
rabbitmq-consumer 1/4 1 1 29s
rabbitmq-consumer 1/4 1 1 29s
rabbitmq-consumer 1/4 4 1 29s
rabbitmq-consumer 2/4 4 2 33s
rabbitmq-consumer 3/4 4 3 34s
rabbitmq-consumer 4/4 4 4 36s
...
rabbitmq-consumer 27/30 30 27 87s
rabbitmq-consumer 28/30 30 28 87s
rabbitmq-consumer 29/30 30 29 89s
rabbitmq-consumer 30/30 30 30 92s
rabbitmq-consumer 30/0 30 30 100s
rabbitmq-consumer 30/0 30 30 100s
rabbitmq-consumer 0/0 0 0 100s
まとめ
・Podのスケールがスムーズに行われることが確認できました。
・ドキュメントに従い、GKEにHelmでRabbitMQの環境を構築しましたが、Rancherを使えば簡単に環境準備ができました。
いまのところ、GKEで使えるサンプルはRabbitMQだけですが、これを参考に次はyamlの内容等もう少し追いかけます。
Author And Source
この問題について(Rancherを使ってGKEにKEDAを簡単導入), 我々は、より多くの情報をここで見つけました https://qiita.com/yamaneko_usg3/items/54cda345be45c9ed2579著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .