我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢送大家来喝茶!
1 简介
Kubernetes自带的HPA是只反对CPU/MEM的,很多时候咱们并不依据这两项指标来进行伸缩资源。比方消费者一直解决MQ的音讯,咱们心愿MQ如果沉积过多,就启动更多的消费者来解决工作。而Keda
给了咱们很多抉择。
KEDA 是 Kubernetes 基于事件驱动的主动伸缩工具,通过 KEDA 咱们能够依据须要解决的事件数量来驱动 Kubernetes 中任何容器的扩大。KEDA 能够间接部署到任何 Kubernetes 集群中和规范的组件一起工作。
Keda所反对的事件源十分丰盛,本文咱们以RabbitMQ为例进行演示。
2 装置Keda
装置的办法很多,咱们间接通过yaml文件来装置,这样还能够批改镜像地址等。先从( https://github.com/kedacore/k... )下载yaml文件,而后执行:
$ kubectl apply -f ~/Downloads/keda-2.2.0.yamlnamespace/keda createdcustomresourcedefinition.apiextensions.k8s.io/clustertriggerauthentications.keda.sh createdcustomresourcedefinition.apiextensions.k8s.io/scaledjobs.keda.sh createdcustomresourcedefinition.apiextensions.k8s.io/scaledobjects.keda.sh createdcustomresourcedefinition.apiextensions.k8s.io/triggerauthentications.keda.sh createdserviceaccount/keda-operator createdclusterrole.rbac.authorization.k8s.io/keda-external-metrics-reader createdclusterrole.rbac.authorization.k8s.io/keda-operator createdrolebinding.rbac.authorization.k8s.io/keda-auth-reader createdclusterrolebinding.rbac.authorization.k8s.io/keda-hpa-controller-external-metrics createdclusterrolebinding.rbac.authorization.k8s.io/keda-operator createdclusterrolebinding.rbac.authorization.k8s.io/keda:system:auth-delegator createdservice/keda-metrics-apiserver createddeployment.apps/keda-metrics-apiserver createddeployment.apps/keda-operator createdapiservice.apiregistration.k8s.io/v1beta1.external.metrics.k8s.io created
检查一下是否都曾经启动实现:
$ kubectl get all -n kedaNAME READY STATUS RESTARTS AGEpod/keda-metrics-apiserver-55dc9f9498-smc2d 1/1 Running 0 2m41spod/keda-operator-59dcf989d6-pxcbb 1/1 Running 0 2m41sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/keda-metrics-apiserver ClusterIP 10.104.255.44 <none> 443/TCP,80/TCP 2m41sNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/keda-metrics-apiserver 1/1 1 1 2m42sdeployment.apps/keda-operator 1/1 1 1 2m42sNAME DESIRED CURRENT READY AGEreplicaset.apps/keda-metrics-apiserver-55dc9f9498 1 1 1 2m42sreplicaset.apps/keda-operator-59dcf989d6 1 1 1 2m42s
也能够看到镜像多了:
$ docker images | grep kedaghcr.io/kedacore/keda-metrics-apiserver 2.2.0 a43d40453368 6 weeks ago 95.3MBghcr.io/kedacore/keda 2.2.0 42b88f042914 6 weeks ago 83MB
如果要卸载请执行:
$ kubectl delete -f ~/Downloads/keda-2.2.0.yaml
3 装置RabbitMQ
为了疾速装置,也不便日后删除,咱们通过Helm
来装置RabbitMQ。
查看可用的chart:
$ helm search repo rabbit
执行装置:
$ helm install azure-rabbitmq azure/rabbitmq
检查一下:
$ helm listNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONazure-ingress default 1 2021-02-14 01:21:07.212107 +0800 CST deployed nginx-ingress-1.41.3 v0.34.1 azure-rabbitmq default 1 2021-05-05 11:29:06.979437 +0800 CST deployed rabbitmq-6.18.2 3.8.2
用户名为user
,明码获取如下:
$ echo "Password : $(kubectl get secret --namespace default azure-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)"Password : YNsEayx8w2
4 测试
部署消费者,留神这里有个MQ连贯信息和加密,要依据本人状况批改。
$ kubectl apply -f src/main/kubernetes/deploy-consumer.yamlsecret/rabbitmq-consumer-secret createddeployment.apps/rabbitmq-consumer createdscaledobject.keda.sh/rabbitmq-consumer createdtriggerauthentication.keda.sh/rabbitmq-consumer-trigger created
查看deployment,发现是没有Pod创立,因为还不须要解决,MQ当初的队列为0。
$ kubectl get deploymentsNAME READY UP-TO-DATE AVAILABLE AGEazure-ingress-nginx-ingress-controller 1/1 1 1 80dazure-ingress-nginx-ingress-default-backend 1/1 1 1 80drabbitmq-consumer 0/0 0 0 131m
部署生产者,往MQ发送音讯:
$ kubectl apply -f src/main/kubernetes/deploy-publisher-job.yamljob.batch/rabbitmq-publish created
能够看到,缓缓消费者就起来了,并且创立了越来越多的Pod来解决MQ:
$ kubectl get deployments rabbitmq-consumerNAME READY UP-TO-DATE AVAILABLE AGErabbitmq-consumer 1/1 1 1 167m$ kubectl get deployments rabbitmq-consumerNAME READY UP-TO-DATE AVAILABLE AGErabbitmq-consumer 3/4 4 3 168m$ kubectl get deployments rabbitmq-consumerNAME READY UP-TO-DATE AVAILABLE AGErabbitmq-consumer 4/8 8 4 168m$ kubectl get deployments rabbitmq-consumerNAME READY UP-TO-DATE AVAILABLE AGErabbitmq-consumer 6/8 8 6 169m$ kubectl get deployments rabbitmq-consumerNAME READY UP-TO-DATE AVAILABLE AGErabbitmq-consumer 0/0 0 0 171m
查看Deployment的Event也能够看到后果:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 5m55s (x2 over 172m) deployment-controller Scaled up replica set rabbitmq-consumer-7b477f78b4 to 1 Normal ScalingReplicaSet 5m6s deployment-controller Scaled up replica set rabbitmq-consumer-7b477f78b4 to 4 Normal ScalingReplicaSet 4m6s deployment-controller Scaled up replica set rabbitmq-consumer-7b477f78b4 to 8 Normal ScalingReplicaSet 3m5s deployment-controller Scaled up replica set rabbitmq-consumer-7b477f78b4 to 16 Normal ScalingReplicaSet 3m3s (x2 over 172m) deployment-controller Scaled down replica set rabbitmq-consumer-7b477f78b4 to 0
解决实现后,又会回到0了。
总结
代码请查看:https://github.com/LarryDpk/p...
欢送关注微信公众号<南瓜慢说>,将继续为你更新...
多读书,多分享;多写作,多整顿。