使用Rancher在GKE上轻松引入KEDA

首先

在2019年微软的年度开发者大会“Build 2019”上,KEDA被宣布。KEDA是一项类似于Knative的在Kubernetes上构建无服务器环境的服务。这次我们将按照文档的指引,从环境设置到操作确认进行操作,但计划在GCP上进行搭建,而非Azure。

科大

这里是GitHub的代码库。

スクリーンショット 2019-05-18 13.40.23.png

尽管这个项目还有很长的路要走,但我认为基于Kubernetes的事件驱动无服务器是非常令人期待的产品,我相信它将会取得长足进展。

可以作为触发器的事件

    • RabbitMQ Queues

 

    • Kafka topics

 

    • Azure Storage Queues

 

    • Azure Service Bus Queues

 

    Azure Service Bus Topics

如果想要在Azure以外使用,目前有两个选项:RabbitMQ和Kafka。在这次的验证中,我们将选择RabbitMQ。

建立的东西。

    • GKEクラスタ

 

    • Rancher

 

    • KEDA(Helm)

 

    • RabbitMQ(Helm)

 

    サンプルアプリ

建立

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

农场主

由于本次需要使用Helm来部署必要的产品,因此我们将使用Rancher来管理Kubernetes。Rancher可以轻松从Helm目录中部署,并且添加目录也很容易,非常方便。

这是一个经过安装了Docker的QuickStart(Rancher):
https://github.com/rancher/rancher

将Rancher中的集群导入

选择添加群集

スクリーンショット 2019-05-17 21.23.20.png

请选择”导入”选项,并输入”集群名称”。

スクリーンショット 2019-05-17 21.23.57.png

从本地控制台执行显示的命令。
另外,第二行或第三行可以选择(如果使用了Rancher域并进行了正确的TLS通信,则选择第二行,如果使用IP地址访问或使用自签名证书,则选择第三行)。

KEDA的部署

打开 “全局->工具->目录”,进入”目录设置”页面,启用HelmStable。然后,点击”添加目录”。

スクリーンショット 2019-05-17 19.55.26.png

添加KEDA的目录

目录网址:https://kedacore.azureedge.net/helm

スクリーンショット 2019-05-17 19.56.14.png

部署KEDA和RabbitMQ。

从画面左上角的下拉菜单(初始为全球)中选择集群名称→默认
打开应用程序,并点击启动

科达

默认安装

スクリーンショット 2019-05-17 19.56.33.png

兔子MQ

默认安装

スクリーンショット 2019-05-17 20.03.46.png

确认KEDA和RabbitMQ已经被添加到集群中。

スクリーンショット 2019-05-17 20.06.03.png
スクリーンショット 2019-05-17 20.06.55.png
スクリーンショット 2019-05-17 20.07.17.png

引入示例应用程序

我会根据文件的要求逐步进行引入。

从GitHub上进行克隆

git clone https://github.com/kedacore/sample-go-rabbitmq
cd sample-go-rabbitmq

这次创建的RabbitMQ的主机名和密码与示例不同,因此会进行更改。

在Rancher中查看RabbitMQ的主机名和密码。

当您打开Apps并打开RabbitMQ时,您可以查看详细信息。
首先,在此处确认命名空间主机名。

スクリーンショット 2019-05-18 12.35.39.png

因为显示了一个用于确认的kubectl密码,所以请在本地执行。

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

※ RabbitMQ在每个环境中都是不同的。

修改用于部署的yaml文件

将密码、RabbitMQ的命名空间和主机名进行更改。

部署/部署-消费者.yaml

‘amqp://user:xxxxxx@rabbitmq.rabbitmq.svc.cluster.local:5672’ 這個位置(兩個位置)

apiVersion: apps/v1
...
      containers:
      - name: rabbitmq-consumer
        image: jeffhollan/rabbitmq-client:dev
        imagePullPolicy: Always
        command:
          - receive
        args:
          - 'amqp://user:xxxxxx@rabbitmq.rabbitmq.svc.cluster.local: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:xxxxx@rabbitmq.rabbitmq.svc.cluster.local:5672'
      queueLength  : '5'

部署/部署-发布作业.yaml

另外,由于这是一个测试工具,如果您有其他用于发送到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:xxxxxxx@rabbitmq.rabbitmq.svc.cluster.local: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文件中,Pod大约以5秒的间隔进行扩展,并在约90秒内扩展到30个。当处理完成后,Pod立即降至0。
这些设置在deploy-consumer.yaml文件的ScaledObject中。

$ $ 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文件的内容等。

bannerAds