Я пытаюсь автоматически масштабировать работников Redis на основе размера очереди. Я собираю метрики с помощью redis_exporter
и promethues-to-sd
колясок в моем развертывании Redis следующим образом:
spec:
containers:
- name: master
image: redis
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
resources:
limits:
cpu: "100m"
requests:
cpu: "100m"
- name: redis-exporter
image: oliver006/redis_exporter:v0.21.1
env:
ports:
- containerPort: 9121
args: ["--check-keys=rq*"]
resources:
requests:
cpu: 100m
memory: 100Mi
- name: prometheus-to-sd
image: gcr.io/google-containers/prometheus-to-sd:v0.9.2
command:
- /monitor
- --source=:http://localhost:9121
- --stackdriver-prefix=custom.googleapis.com
- --pod-id=$(POD_ID)
- --namespace-id=$(POD_NAMESPACE)
- --scrape-interval=15s
- --export-interval=15s
env:
- name: POD_ID
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.uid
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
resources:
requests:
cpu: 100m
memory: 100Mi
Я могу затем просмотрите метри c (redis_key_size) в Metrics Explorer как:
metric.type="custom.googleapis.com/redis_key_size"
resource.type="gke_container"
(я НЕ МОГУ смотреть метри c, если я изменю resource.type=k8_pod
)
Однако я не может заставить HPA читать эти метрики, получая failed to get metrics error
, и не может определить правильное определение Object
.
Я пробовал .object.target.kind=Pod
и Deployment
, при развертывании я получаю дополнительную ошибку "Get namespaced metric by name for resource \"deployments\"" is not implemented
.
Я не знаю, связана ли эта проблема с resource.type="gke_container"
и как это изменить?
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: {{ template "webapp.backend.fullname" . }}-workers
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ template "webapp.backend.fullname" . }}-workers
minReplicas: 1
maxReplicas: 4
metrics:
- type: Object
object:
target:
kind: <not sure>
name: <not sure>
metricName: redis_key_size
targetValue: 4
--- Обновление ---
Это работает, если я использую kind: Pod
и вручную устанавливаю name
для имени модуля, созданного развертывание, однако это далеко от совершенства.
Я также пробовал эту настройку, используя тип Pods
, однако HPA говорит, что не может читать метрики horizontal-pod-autoscaler failed to get object metric value: unable to get metric redis_key_size: no metrics returned from custom metrics API
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: {{ template "webapp.backend.fullname" . }}-workers
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ template "webapp.backend.fullname" . }}-workers
minReplicas: 1
maxReplicas: 4
metrics:
- type: Pods
pods:
metricName: redis_key_size
targetAverageValue: 4