在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近一段时间,陆陆续续的把手里头项目都迁移到了k8s中,期间遇到很多的坑,并且也学到了许多k8s的知识(从0-1),大家都知道k8s中的一大特性是自动扩容,对此结合自己的业务发现很是有“用武之地”,我有个业务,是向消息队列中插入消息,然后.net core console app进行消费,但是我这个业务有个特点,要么没有消息生产,要么就是有一大批消息产生。在引用HPA之前,我不得不提前启动“合适数量”的pod(1个pod多个消费者容器)来消费消息,要不然业务方要叫了。但是作为有“洁癖”的开发者,我不想相同的容器有太多的闲置,无所事事,又占用资源。所以我们需要借助HPA来实现自动伸缩扩容,消息多的时候,自动扩容;消息少的时候,自动缩容。 前期准备:
大体实现方向:将rabbitmq的数据指标,以metrics接口的形式,暴露给prometheus server;然后再promethus中通过添加record rule规则来自定义你的队列指标;然后再promethus adapter中添加一条rule来将之前的指标转化成k8s api所能识别的接口;最后在k8s中定义HPA去监测prometheus adapter service暴露的转化好的接口来动态伸缩。 第一步:暴露rabbitmq数据指标
1 apiVersion: apps/v1 2 kind: Deployment 3 metadata: 4 name: rabbitmq-exporter 5 namespace: monitoring #暂且放在这个命名空间下,因为后面prometheus也在这个命名空间,如果没有的话你可以先创建一个kubectl create ns monitoring 6 labels: 7 app: rabbitmq-exporter 8 author: jamestao 9 spec: 10 replicas: 1 11 selector: 12 matchLabels: 13 app: rabbitmqpod 14 template: 15 metadata: 16 name: rabbitmq-exporter-pod 17 labels: 18 app: rabbitmqpod 19 spec: 20 restartPolicy: Always 21 containers: 22 - name: rabbitmq-exporter-container 23 image: kbudde/rabbitmq-exporter:latest 24 resources: 25 requests: 26 memory: 10Mi 27 ports: 28 - containerPort: 9419 29 env: 30 - name: RABBIT_URL 31 value: http://你的ip:15672 #这里需修改 32 - name: RABBIT_USER 33 value: "你的用户名" #这里需修改 34 - name: RABBIT_PASSWORD 35 value: "你的密码" #这里需修改 36 - name: INCLUDE_VHOST 37 value: ".*" 38 - name: INCLUDE_QUEUES 39 value: ".*" 40 --- 41 apiVersion: v1 42 kind: Service 43 metadata: 44 name: svc-rabbitmq-management 45 namespace: monitoring 46 spec: 47 selector: 48 app: rabbitmqpod 49 ports: 50 - protocol: TCP 51 port: 39419 #定义了svc的端口号,可以修改为你自己的,就是通过这个端口暴露metrics给prometheus server抓取 52 targetPort: 9419 53 name: metrics 第二步:使rabbitmq metrics指标能够被prometheus server所定时抓取
docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci jb update docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci ./build.sh example.jsonnet 安装:kubectl apply –f mainfests/. 让prometheus server可以抓取的到rabbitmq metrics指标
第三步:使用prometheus-adapter来让k8s能够访问的到自定义的资源指标
第四步:定义HPA补充(上面有些步骤的优化):【2020.07.06】kube-prometheus中如何添加新scrape api? 【2020.07.07】如何自动探测到自定义的record rule |
请发表评论