Я пытаюсь масштабировать Kubernetes Deployment
с помощью HorizontalPodAutoscaler
, который прослушивает пользовательские метрики через Stackdriver.
У меня кластер GKE с включенным адаптером Stackdriver.Я могу опубликовать пользовательский тип метрики в Stackdriver, и вот как он отображается в Проводнике метрик Stackdriver.
Вот как я определил мой HPA
:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: example-hpa
spec:
minReplicas: 1
maxReplicas: 10
metrics:
- type: External
external:
metricName: custom.googleapis.com|worker_pod_metrics|baz
targetValue: 400
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: test-app-group-1-1
После успешного создания example-hpa
, выполнение kubectl get hpa example-hpa
, всегда показывает TARGETS
как<unknown>
и никогда не обнаруживает значение из пользовательских метрик.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
example-hpa Deployment/test-app-group-1-1 <unknown>/400 1 10 1 18m
Я использую клиент Java, который запускает локально для публикации моих пользовательских метрик.Я дал соответствующие метки ресурсов, как упомянуто здесь (жестко запрограммировано - чтобы он мог без проблем работать в локальной среде).Я следовал этому документу для создания клиента Java.
private static MonitoredResource prepareMonitoredResourceDescriptor() {
Map<String, String> resourceLabels = new HashMap<>();
resourceLabels.put("project_id", "<<<my-project-id>>>);
resourceLabels.put("pod_id", "<my pod UID>");
resourceLabels.put("container_name", "");
resourceLabels.put("zone", "asia-southeast1-b");
resourceLabels.put("cluster_name", "my-cluster");
resourceLabels.put("namespace_id", "mynamespace");
resourceLabels.put("instance_id", "");
return MonitoredResource.newBuilder()
.setType("gke_container")
.putAllLabels(resourceLabels)
.build();
}
Что я делаю не так в вышеуказанных шагах, пожалуйста?Заранее благодарю за любые предоставленные ответы!
РЕДАКТИРОВАТЬ [РЕШЕНО] : Я думаю, что у меня были некоторые неправильные конфигурации, так как kubectl describe hpa [NAME] --v=9
показал мне некоторый 403
код состояния,а также я использовал type: External
вместо type: Pods
(спасибо MWZ за ваш ответ, указывающий на эту ошибку).Мне удалось это исправить, создав новый проект, новую учетную запись службы и новый кластер GKE (в основном все с самого начала).Затем я изменил свой файл yaml следующим образом, в точности как этот документ объясняет.
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: test-app-group-1-1
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1beta1
kind: Deployment
name: test-app-group-1-1
minReplicas: 1
maxReplicas: 5
metrics:
- type: Pods # Earlier this was type: External
pods: # Earlier this was external:
metricName: baz # metricName: custom.googleapis.com|worker_pod_metrics|baz
targetAverageValue: 20
Сейчас я экспортирую как custom.googleapis.com/baz
, а НЕ как custom.googleapis.com/worker_pod_metrics/baz
.Кроме того, теперь я явно указываю namespace
для моего HPA в yaml.