{"id":483291,"date":"2026-06-11T09:00:54","date_gmt":"2026-06-11T09:00:54","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=483291"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=483291","title":{"rendered":"\u0418\u0433\u0440\u044b \u0441 Horizontal Pod Autoscaling"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0434\u043b\u044f &#171;\u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c&#187; HPA \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/autoscaling\/horizontal-pod-autoscale\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u043e\u0440\u0438\u0438<\/a> \u043a \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043d\u0443 \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 <a href=\"https:\/\/www.rabbitmq.com\/docs\/monitoring\" rel=\"noopener noreferrer nofollow\">RabbitMQ<\/a>. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\" rel=\"noopener noreferrer nofollow\">minikube<\/a>, <a href=\"https:\/\/canonical.com\/microk8s\/docs\" rel=\"noopener noreferrer nofollow\">MicroK8s<\/a>, \u0438\u043b\u0438 \u0433\u0434\u0435 \u0432\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u043e&#8230; \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b <a href=\"https:\/\/github.com\/mrlioncub\/k8s-hpa-rabbitmq-demo\" rel=\"noopener noreferrer nofollow\">k8s-hpa-rabbitmq-demo<\/a>.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c HPA \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0435\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0439 <a href=\"https:\/\/keda.sh\/\" rel=\"noopener noreferrer nofollow\">KEDA<\/a>, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Prometheus Adapter \u0438 \u043c\u0435\u0442\u0440\u0438\u043a \u0438\u0437 <a href=\"https:\/\/prometheus.io\/\" rel=\"noopener noreferrer nofollow\">Prometheus<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e KEDA \u0438 \u043c\u0435\u0442\u0440\u0438\u043a \u0438\u0437 <a href=\"https:\/\/victoriametrics.cloud\/\" rel=\"noopener noreferrer nofollow\">VictoriaMetrics<\/a>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0412\u0441\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0431\u0435\u0437 &#171;\u043b\u0438\u0448\u043d\u0438\u0445&#187; \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0430\u0433\u0435\u043d\u0442 <a href=\"https:\/\/hub.docker.com\/r\/mrlioncub\/rabbitmq-agent\" rel=\"noopener noreferrer nofollow\">mrlioncub\/rabbitmq-agent<\/a> \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 helm:<\/p>\n<pre><code class=\"bash\">helm repo add helmforge https:\/\/repo.helmforge.devhelm repo add prometheus-community https:\/\/prometheus-community.github.io\/helm-chartshelm repo add vm https:\/\/victoriametrics.github.io\/helm-chartshelm repo add kedacore https:\/\/kedacore.github.io\/chartshelm repo add k8s-hpa-rabbitmq-demo https:\/\/mrlioncub.github.io\/k8s-hpa-rabbitmq-demohelm repo update<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f RabbitMQ \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \/metrics:<\/p>\n<p>charts\/rabbitmq\/values.yaml:<\/p>\n<pre><code class=\"yaml\">#\u044d\u0442\u043e \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f fullnameOverride: \"rabbitmq-server\"auth:  username: guest  password: guestpodAnnotations:  prometheus.io\/scrape: \"true\"metrics:  enabled: truesingleNode:  persistence:    enabled: false<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"bash\">helm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install rabbitmq-server helmforge\/rabbitmq -f charts\/rabbitmq\/values.yaml<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430:<\/p>\n<p><code>kubectl -n k8-hpa-rabbitmq-demo exec rabbitmq-server-0 -- rabbitmqctl list_queues -s<\/code>  &#8212; \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/p>\n<p><code>kubectl -n k8-hpa-rabbitmq-demo run curl -it --rm --image=alpine\/curl --restart=Never -- curl -s <\/code><a href=\"http:\/\/rabbitmq-server:15692\/metrics\" rel=\"noopener noreferrer nofollow\"><code>http:\/\/rabbitmq-server:15692\/metrics<\/code><\/a><code> | grep 'rabbitmq_queue_messages{vhost=\"\/\",queue=\"task_queue\"}'<\/code> &#8212; \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u0438\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430<\/p>\n<p><strong>\u0421\u043f\u043e\u0441\u043e\u0431 1: KEDA<\/strong><\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0443\u0436\u043d\u0430 \u0441\u0430\u043c\u0430 <a href=\"https:\/\/github.com\/kedacore\/charts\/\" rel=\"noopener noreferrer nofollow\">KEDA<\/a>:<\/p>\n<pre><code class=\"bash\">helm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install keda kedacore\/keda<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0438 \u0442\u043e\u0442 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c:<\/p>\n<pre><code class=\"bash\">helm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install rabbitmq-agent-reciever k8s-hpa-rabbitmq-demo\/rabbitmq-agent --set keda.enabled=true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 ScaledObject \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 KEDA, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 rabbitmq-agent-reciever. \u041f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (READY: True):<\/p>\n<pre><code class=\"bash\">$ kubectl get scaledobject -n k8-hpa-rabbitmq-demoNAME                    SCALETARGETKIND      SCALETARGETNAME           MIN   MAX   READY   ACTIVE   FALLBACK   PAUSED   TRIGGERS   AUTHENTICATIONS   AGErabbitmq-scaledobject   apps\/v1.Deployment   rabbitmq-agent-reciever   1     10    True    False    False      False    rabbitmq                     2m<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0421\u043f\u043e\u0441\u043e\u0431 2: Prometheus \u0438 Prometheus Adapter<\/strong><\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f <a href=\"https:\/\/github.com\/prometheus-community\/helm-charts\/tree\/main\/charts\/prometheus\" rel=\"noopener noreferrer nofollow\">Prometheus<\/a> \u0438 <a href=\"https:\/\/github.com\/prometheus-community\/helm-charts\/tree\/main\/charts\/prometheus-adapter\" rel=\"noopener noreferrer nofollow\">Prometheus Adapter<\/a><\/p>\n<p>charts\/prometheus\/values.yaml (<a href=\"https:\/\/github.com\/prometheus-community\/helm-charts\/blob\/main\/charts\/prometheus\/values.yaml\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a>):<\/p>\n<pre><code class=\"yaml\">alertmanager:  enabled: falseprometheus-pushgateway:  enabled: falseprometheus-node-exporter:  enabled: falsekube-state-metrics:  enabled: false<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p> charts\/prometheus-adapter\/values.yaml (<a href=\"https:\/\/github.com\/prometheus-community\/helm-charts\/blob\/main\/charts\/prometheus-adapter\/values.yaml\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a>):<\/p>\n<pre><code class=\"yaml\">prometheus:  url: http:\/\/prometheus-server  port: 80rules:  default: false  custom:  - seriesQuery: 'rabbitmq_queue_messages{namespace!=\"\",pod!=\"\",queue=\"task_queue\"}'    resources:      overrides:        namespace: {resource: \"namespace\"}        pod: {resource: \"pod\"}    metricsQuery: sum(&lt;&lt;.Series&gt;&gt;{&lt;&lt;.LabelMatchers&gt;&gt;,queue=\"task_queue\"}) by (&lt;&lt;.GroupBy&gt;&gt;)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"bash\">helm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install prometheus prometheus-community\/prometheus -f charts\/prometheus\/values.yamlhelm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install prometheus-adapter prometheus-community\/prometheus-adapter -f charts\/prometheus-adapter\/values.yaml<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0438 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c:<\/p>\n<pre><code class=\"bash\">helm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install rabbitmq-agent-reciever k8s-hpa-rabbitmq-demo\/rabbitmq-agent --set autoscaling.enabled=true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 CustomMetrics, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u043b Prometheus Adapter \u0438\u0437 Prometheus. \u041f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"bash\">$ kubectl get --raw \/apis\/custom.metrics.k8s.io\/v1beta1\/namespaces\/k8-hpa-rabbitmq-demo\/pods\/rabbitmq-server-0\/rabbitmq_queue_messages | jq .{  \"kind\": \"MetricValueList\",  \"apiVersion\": \"custom.metrics.k8s.io\/v1beta1\",  \"metadata\": {},  \"items\": [    {      \"describedObject\": {        \"kind\": \"Pod\",        \"namespace\": \"k8-hpa-rabbitmq-demo\",        \"name\": \"rabbitmq-server-0\",        \"apiVersion\": \"\/v1\"      },      \"metricName\": \"rabbitmq_queue_messages\",      \"timestamp\": \"2026-06-09T08:02:47Z\",      \"value\": \"0\",      \"selector\": null    }  ]}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0421\u043f\u043e\u0441\u043e\u0431 3: VictoriaMetrics \u0438 KEDA<\/strong><\/p>\n<p>charts\/victoriametrics\/values.yaml (<a href=\"https:\/\/github.com\/VictoriaMetrics\/helm-charts\/blob\/master\/charts\/victoria-metrics-single\/values.yaml\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a>):<\/p>\n<pre><code class=\"yaml\">server:  scrape:    enabled: true    config:      scrape_configs:      - job_name: rabbitmq        static_configs:        - targets:          - rabbitmq-server:15692  persistentVolume:      enabled: false<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"bash\">helm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install victoriametrics vm\/victoria-metrics-single -f charts\/victoriametrics\/values.yamlhelm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install keda kedacore\/keda<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 ScaledObject \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043a\u0430\u043a \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435.<\/p>\n<p><strong>\u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 HPA<\/strong><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c HPA \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432:<\/p>\n<pre><code class=\"bash\">kubectl -n k8-hpa-rabbitmq-demo get hpa<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e HPA, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435:<\/p>\n<pre><code class=\"bash\">NAME                             REFERENCE                            TARGETS      MINPODS   MAXPODS   REPLICAS   AGEkeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)   1         10        1          40s<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e HPA, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435:<\/p>\n<pre><code class=\"bash\">$ kubectl -n k8-hpa-rabbitmq-demo get hpaNAME                  REFERENCE                            TARGETS   MINPODS   MAXPODS   REPLICAS   AGErabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30      1         10        1          4m47s<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 TARGETS: <strong>&lt;unknown&gt;<\/strong>\/30 \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 hpa \u0441\u043e\u0437\u0434\u0430\u043d, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0435\u0442\u0440\u0438\u043a \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 HPA.<br \/>\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c 50 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f hpa:<\/p>\n<pre><code class=\"bash\">kubectl --namespace k8-hpa-rabbitmq-demo run sender -it --rm --image=mrlioncub\/rabbitmq-agent --restart=Never -- sender 50kubectl -n k8-hpa-rabbitmq-demo get hpa -w<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 HPA \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432:<\/p>\n<pre><code class=\"bash\">NAME                             REFERENCE                            TARGETS              MINPODS   MAXPODS   REPLICAS   AGEkeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   &lt;unknown&gt;\/30 (avg)   1         10        0          0skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)           1         10        1          15skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   48\/30 (avg)          1         10        1          60skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   23\/30 (avg)          1         10        2          76skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   21500m\/30 (avg)      1         10        2          91skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   18500m\/30 (avg)      1         10        2          106skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   16\/30 (avg)          1         10        2          2m1skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   12500m\/30 (avg)      1         10        2          2m16skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   8\/30 (avg)           1         10        2          2m31skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   5\/30 (avg)           1         10        2          2m46skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   2\/30 (avg)           1         10        2          3m1skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)           1         10        2          3m16skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)           1         10        1          7m16s<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 HPA \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430: <\/p>\n<pre><code class=\"bash\">NAME                  REFERENCE                            TARGETS        MINPODS   MAXPODS   REPLICAS   AGErabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   &lt;unknown&gt;\/30   1         10        0          4srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   &lt;unknown&gt;\/30   1         10        1          15srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        1          60srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        1          2mrabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        2          2m15srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        3          2m30srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        5          2m45srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   5\/30           1         10        7          3mrabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        7          4m1srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        2          8m1srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        1          9m1s<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041a\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430<\/strong><\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445, \u0432 \u043e\u0434\u043d\u043e\u043c TARGETS \u0441 (avg) \u0432 \u0434\u0440\u0443\u0433\u043e\u043c REPLICAS \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u0434\u043e 7. \u0412 ScaledObject \u0442\u0438\u043f \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e AverageValue (<a href=\"https:\/\/github.com\/kedacore\/keda-docs\/blob\/main\/content\/docs\/2.21\/reference\/scaledobject-spec.md#triggers\" rel=\"noopener noreferrer nofollow\">1<\/a>,<a href=\"https:\/\/keda.sh\/docs\/latest\/reference\/scaledobject-spec\/#triggers\" rel=\"noopener noreferrer nofollow\">2<\/a>), \u0430 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432 <a href=\"https:\/\/github.com\/mrlioncub\/k8s-hpa-rabbitmq-demo\/blob\/master\/charts\/rabbitmq-agent\/templates\/hpa.yaml\" rel=\"noopener noreferrer nofollow\">hpa.yaml<\/a> \u0443 \u043d\u0430\u0441 \u0443\u043a\u0430\u0437\u0430\u043d \u0442\u0438\u043f Value.<br \/>AverageValue \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0443 (\u0442.\u0435. \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432), \u0430 Value &#8212; \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0423 \u043d\u0430\u0441 50 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u043f\u043e\u0440\u043e\u0433\u0435 \u0432 <a href=\"https:\/\/github.com\/mrlioncub\/k8s-hpa-rabbitmq-demo\/tree\/master\/charts\/rabbitmq-agent\/templates\" rel=\"noopener noreferrer nofollow\">30<\/a> (<a href=\"https:\/\/github.com\/mrlioncub\/k8s-hpa-rabbitmq-demo\/blob\/master\/charts\/rabbitmq-agent\/templates\/hpa.yaml\" rel=\"noopener noreferrer nofollow\">hpa.yaml<\/a>, <a href=\"https:\/\/github.com\/mrlioncub\/k8s-hpa-rabbitmq-demo\/blob\/master\/charts\/rabbitmq-agent\/templates\/keda.yaml\" rel=\"noopener noreferrer nofollow\">keda.yaml<\/a>, <a href=\"https:\/\/github.com\/mrlioncub\/k8s-hpa-rabbitmq-demo\/blob\/master\/charts\/rabbitmq-agent\/templates\/kedavm.yaml\" rel=\"noopener noreferrer nofollow\">kedavm.yaml<\/a>): 50\/30 = 1.67, \u0447\u0442\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 <a href=\"https:\/\/kubernetes.io\/blog\/2025\/04\/28\/kubernetes-v1-33-hpa-configurable-tolerance\/\" rel=\"noopener noreferrer nofollow\">10% \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/a> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b kubernetes \u043d\u0430\u0447\u0430\u043b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438, \u043d\u043e \u0438 \u0441 rabbitmq-agent-reciever \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0434\u043b\u044f hpa \u0432 yaml, \u0441\u043a\u0430\u0447\u0430\u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439:<\/p>\n<pre><code class=\"bash\">git clone --depth 1 https:\/\/github.com\/mrlioncub\/k8s-hpa-rabbitmq-demo.gitcd k8s-hpa-rabbitmq-demo<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c helm \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f helm (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f KEDA):<\/p>\n<pre><code class=\"bash\">helm upgrade --create-namespace --namespace k8-hpa-rabbitmq-demo --install rabbitmq-agent-reciever charts\/rabbitmq-agent --set keda.enabled=true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1046331\/\">https:\/\/habr.com\/ru\/articles\/1046331\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0434\u043b\u044f &#171;\u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c&#187; HPA \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u0442\u0435\u043e\u0440\u0438\u0438 \u043a \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043d\u0443 \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 RabbitMQ. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c minikube, MicroK8s, \u0438\u043b\u0438 \u0433\u0434\u0435 \u0432\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u043e&#8230; \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b k8s-hpa-rabbitmq-demo.\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c HPA \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0435\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0439 KEDA, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Prometheus Adapter \u0438 \u043c\u0435\u0442\u0440\u0438\u043a \u0438\u0437 Prometheus, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e KEDA \u0438 \u043c\u0435\u0442\u0440\u0438\u043a \u0438\u0437 VictoriaMetrics. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0412\u0441\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0431\u0435\u0437 &#171;\u043b\u0438\u0448\u043d\u0438\u0445&#187; \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0430\u0433\u0435\u043d\u0442 mrlioncub\/rabbitmq-agent \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435.\u041f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 helm:helm repo add helmforge https:\/\/repo.helmforge.devhelm repo add prometheus-community https:\/\/prometheus-community.github.io\/helm-chartshelm repo add vm https:\/\/victoriametrics.github.io\/helm-chartshelm repo add kedacore https:\/\/kedacore.github.io\/chartshelm repo add k8s-hpa-rabbitmq-demo https:\/\/mrlioncub.github.io\/k8s-hpa-rabbitmq-demohelm repo update\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f RabbitMQ \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \/metrics:charts\/rabbitmq\/values.yaml:#\u044d\u0442\u043e \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f fullnameOverride: &#171;rabbitmq-server&#187;auth:  username: guest  password: guestpodAnnotations:  prometheus.io\/scrape: &#171;true&#187;metrics:  enabled: truesingleNode:  persistence:    enabled: falsehelm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install rabbitmq-server helmforge\/rabbitmq -f charts\/rabbitmq\/values.yaml\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430:kubectl -n k8-hpa-rabbitmq-demo exec rabbitmq-server-0 &#8212; rabbitmqctl list_queues -s  &#8212; \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438kubectl -n k8-hpa-rabbitmq-demo run curl -it &#8212;rm &#8212;image=alpine\/curl &#8212;restart=Never &#8212; curl -s http:\/\/rabbitmq-server:15692\/metrics | grep &#8216;rabbitmq_queue_messages{vhost=&#187;\/&#187;,queue=&#187;task_queue&#187;}&#8217; &#8212; \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u0438\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0421\u043f\u043e\u0441\u043e\u0431 1: KEDA\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043d\u0443\u0436\u043d\u0430 \u0441\u0430\u043c\u0430 KEDA:helm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install keda kedacore\/keda\u0438 \u0442\u043e\u0442 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c:helm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install rabbitmq-agent-reciever k8s-hpa-rabbitmq-demo\/rabbitmq-agent &#8212;set keda.enabled=true\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 ScaledObject \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 KEDA, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 rabbitmq-agent-reciever. \u041f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (READY: True):$ kubectl get scaledobject -n k8-hpa-rabbitmq-demoNAME                    SCALETARGETKIND      SCALETARGETNAME           MIN   MAX   READY   ACTIVE   FALLBACK   PAUSED   TRIGGERS   AUTHENTICATIONS   AGErabbitmq-scaledobject   apps\/v1.Deployment   rabbitmq-agent-reciever   1     10    True    False    False      False    rabbitmq                     2m\u0421\u043f\u043e\u0441\u043e\u0431 2: Prometheus \u0438 Prometheus Adapter\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f Prometheus \u0438 Prometheus Adaptercharts\/prometheus\/values.yaml (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435):alertmanager:  enabled: falseprometheus-pushgateway:  enabled: falseprometheus-node-exporter:  enabled: falsekube-state-metrics:  enabled: false charts\/prometheus-adapter\/values.yaml (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435):prometheus:  url: http:\/\/prometheus-server  port: 80rules:  default: false  custom:  &#8212; seriesQuery: &#8216;rabbitmq_queue_messages{namespace!=&#187;&#187;,pod!=&#187;&#187;,queue=&#187;task_queue&#187;}&#8217;    resources:      overrides:        namespace: {resource: &#171;namespace&#187;}        pod: {resource: &#171;pod&#187;}    metricsQuery: sum(&lt;&lt;.Series&gt;&gt;{&lt;&lt;.LabelMatchers&gt;&gt;,queue=&#187;task_queue&#187;}) by (&lt;&lt;.GroupBy&gt;&gt;)helm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install prometheus prometheus-community\/prometheus -f charts\/prometheus\/values.yamlhelm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install prometheus-adapter prometheus-community\/prometheus-adapter -f charts\/prometheus-adapter\/values.yaml\u0438 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c:helm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install rabbitmq-agent-reciever k8s-hpa-rabbitmq-demo\/rabbitmq-agent &#8212;set autoscaling.enabled=true\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 CustomMetrics, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u043b Prometheus Adapter \u0438\u0437 Prometheus. \u041f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:$ kubectl get &#8212;raw \/apis\/custom.metrics.k8s.io\/v1beta1\/namespaces\/k8-hpa-rabbitmq-demo\/pods\/rabbitmq-server-0\/rabbitmq_queue_messages | jq .{  &#171;kind&#187;: &#171;MetricValueList&#187;,  &#171;apiVersion&#187;: &#171;custom.metrics.k8s.io\/v1beta1&#187;,  &#171;metadata&#187;: {},  &#171;items&#187;: [    {      &#171;describedObject&#187;: {        &#171;kind&#187;: &#171;Pod&#187;,        &#171;namespace&#187;: &#171;k8-hpa-rabbitmq-demo&#187;,        &#171;name&#187;: &#171;rabbitmq-server-0&#187;,        &#171;apiVersion&#187;: &#171;\/v1&#187;      },      &#171;metricName&#187;: &#171;rabbitmq_queue_messages&#187;,      &#171;timestamp&#187;: &#171;2026-06-09T08:02:47Z&#187;,      &#171;value&#187;: &#171;0&#187;,      &#171;selector&#187;: null    }  ]}\u0421\u043f\u043e\u0441\u043e\u0431 3: VictoriaMetrics \u0438 KEDAcharts\/victoriametrics\/values.yaml (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435):server:  scrape:    enabled: true    config:      scrape_configs:      &#8212; job_name: rabbitmq        static_configs:        &#8212; targets:          &#8212; rabbitmq-server:15692  persistentVolume:      enabled: falsehelm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install victoriametrics vm\/victoria-metrics-single -f charts\/victoriametrics\/values.yamlhelm upgrade &#8212;create-namespace &#8212;namespace k8-hpa-rabbitmq-demo &#8212;install keda kedacore\/keda\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 ScaledObject \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043a\u0430\u043a \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435.\u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 HPA\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c HPA \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432:kubectl -n k8-hpa-rabbitmq-demo get hpa\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e HPA, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435:NAME                             REFERENCE                            TARGETS      MINPODS   MAXPODS   REPLICAS   AGEkeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)   1         10        1          40s\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e HPA, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435:$ kubectl -n k8-hpa-rabbitmq-demo get hpaNAME                  REFERENCE                            TARGETS   MINPODS   MAXPODS   REPLICAS   AGErabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30      1         10        1          4m47s\u041f\u0440\u0438 TARGETS: &lt;unknown&gt;\/30 \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 hpa \u0441\u043e\u0437\u0434\u0430\u043d, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0435\u0442\u0440\u0438\u043a \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438.\u041f\u043e\u0441\u043b\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 HPA.\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c 50 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f hpa:kubectl &#8212;namespace k8-hpa-rabbitmq-demo run sender -it &#8212;rm &#8212;image=mrlioncub\/rabbitmq-agent &#8212;restart=Never &#8212; sender 50kubectl -n k8-hpa-rabbitmq-demo get hpa -w\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 HPA \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432:NAME                             REFERENCE                            TARGETS              MINPODS   MAXPODS   REPLICAS   AGEkeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   &lt;unknown&gt;\/30 (avg)   1         10        0          0skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)           1         10        1          15skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   48\/30 (avg)          1         10        1          60skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   23\/30 (avg)          1         10        2          76skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   21500m\/30 (avg)      1         10        2          91skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   18500m\/30 (avg)      1         10        2          106skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   16\/30 (avg)          1         10        2          2m1skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   12500m\/30 (avg)      1         10        2          2m16skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   8\/30 (avg)           1         10        2          2m31skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   5\/30 (avg)           1         10        2          2m46skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   2\/30 (avg)           1         10        2          3m1skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)           1         10        2          3m16skeda-hpa-rabbitmq-scaledobject   Deployment\/rabbitmq-agent-reciever   0\/30 (avg)           1         10        1          7m16s\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 HPA \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430: NAME                  REFERENCE                            TARGETS        MINPODS   MAXPODS   REPLICAS   AGErabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   &lt;unknown&gt;\/30   1         10        0          4srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   &lt;unknown&gt;\/30   1         10        1          15srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        1          60srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        1          2mrabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        2          2m15srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        3          2m30srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   41\/30          1         10        5          2m45srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   5\/30           1         10        7          3mrabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        7          4m1srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        2          8m1srabbitmq-server-hpa   Deployment\/rabbitmq-agent-reciever   0\/30           1         10        1          9m1s\u041a\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445, \u0432 \u043e\u0434\u043d\u043e\u043c TARGETS \u0441 (avg) \u0432 \u0434\u0440\u0443\u0433\u043e\u043c REPLICAS \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u0434\u043e 7. \u0412 ScaledObject \u0442\u0438\u043f \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e AverageValue (1,2), \u0430 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432 hpa.yaml \u0443 \u043d\u0430\u0441 \u0443\u043a\u0430\u0437\u0430\u043d \u0442\u0438\u043f Value.AverageValue \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0443 (\u0442.\u0435. \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043e\u0432), \u0430 Value &#8212; \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0423 \u043d\u0430\u0441 50 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u043f\u043e\u0440\u043e\u0433\u0435 \u0432 30 (hpa.yaml, keda.yaml, &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-483291","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=483291"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483291\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=483291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=483291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=483291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}