Я пытаюсь масштабировать Kubernetes Deployment
с помощью HorizontalPodAutoscaler
, который прослушивает пользовательские метрики через Stackdriver.
У меня есть кластер GKE с включенным адаптером Stackdriver. Я могу опубликовать настраиваемый тип метрики в Stackdriver, и вот как он отображается в Stackdriver Metric Explorer.
Вот как я определил свой 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.
metric-server
в кубернетах. K8s не знает, какие метрики вы используете. Вам нужно развернуть собственный адаптер / метрический сервер, например. Найдите ссылку docs.bitnami.com/kubernetes/how- в / - person Veerendra Kakumanu   schedule 08.04.2019