Автоматическое масштабирование развертывания с помощью пользовательских метрик в Openshift 1.5.0
Есть ли возможность автоматически масштабировать развертывание с помощью Openshift Origin 1.5.0 (kubernetes 1.5.2) и использовать для этого пользовательские метрики?
В документации Kubernetes говорится, что автоматическое масштабирование с использованием пользовательских метрик поддерживается с версии 1.2. Это выглядит правдой, просто потому что OpenShift горизонтальный pod autoscaler (HPA) пытается получить некоторые метрики и вычислить желаемые метрики. Но моей конфигурации не удается выполнить это. Ребята, пожалуйста, помогите мне найти, что я делаю не так с этим.
Итак, что происходит:
Я настроил метрику, как это рекомендуется в последних документах Origin (все шаги пройдены): https://docs.openshift.org/latest/install_config/cluster_metrics.html;
- У меня есть приложение, которое развертывается с объектом типа Deployment;
- это приложение предоставляет пользовательские метрики с конечной точкой http json;
- пользовательские метрики собираются и сохраняются - это отображается в исходном интерфейсе Openshift на вкладке "Метрики" соответствующего модуля;
- после того, как я создаю HPA - появляется некоторое предупреждение о сборе пользовательских метрик, в нем записывается что-то вроде "Не удалось собрать пользовательские метрики, не удалось получить метрики для любых готовых модулей";
- Я создаю HPA с API версии 1 и включаю аннотацию
alpha/target.custom-metrics.podautoscaler.kubernetes.io: '{"items":[{"name":"requests_count", "value": "10"}]}'
; если я запрашиваю развернутое приложение heapster через master-proxy, я получаю что-то вроде этого
{ "metadata": {}, "items": [ { "metadata": { "name": "resty-1722683747-kmbw0", "namespace": "Availability-Demo", "creationTimestamp": "2017-05-24T09:50:24Z" }, "timestamp": "2017-05-24T09:50:00Z", "window": "1m0s", " Containers": [ { "name": "resty", "using ": { "cpu": "0", "memory": "2372Ki" } } ] } ] }
как вы можете видеть, на самом деле нет пользовательских метрик, и мои собственные метрики названы
requests_count
,
Какие шаги я должен предпринять, чтобы добиться успеха в реализации автоматического масштабирования пользовательских метрик?
ОБНОВЛЕНИЕ: В главном журнале openshift предупреждение выглядит так:
I0524 10:17:47.537985 1 panics.go:76GET /apis/extensions/v1beta1/namespaces/availability-demo/deployments/resty/scale: (3.379724ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.543354 1 panics.go:76] GET /api/v1/proxy/namespaces/openshift-infra/services/https:heapster:/apis/metrics/v1alpha1/namespaces/availability-demo/pods?labelSelector=app%3Dresty: (4.830135ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.553255 1 panics.go:76] GET /api/v1/namespaces/availability-demo/pods?labelSelector=app%3Dresty: (8.864864ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.559909 1 panics.go:76] GET /api/v1/namespaces/availability-demo/pods?labelSelector=app%3Dresty: (5.725342ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.560977 1 panics.go:76] PATCH /api/v1/namespaces/availability-demo/events/resty.14c14bbf8b89534c: (6.385846ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.565418 1 panics.go:76] GET /api/v1/proxy/namespaces/openshift-infra/services/https:heapster:/api/v1/model/namespaces/availability-demo/pod-list/resty-1722683747-kmbw0/metrics/custom/requests_count?start=2017-05-24T10%3A12%3A47Z: (5.015336ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.569843 1 panics.go:76] GET /api/v1/namespaces/availability-demo/pods?labelSelector=app%3Dresty: (4.040029ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.575530 1 panics.go:76] PUT /apis/autoscaling/v1/namespaces/availability-demo/horizontalpodautoscalers/resty/status: (4.894835ms) 200 [[openshift/v1.5.2+43a9be4 (linux/amd64) kubernetes/43a9be4 system:serviceaccount:openshift-infra:hpa-controller] 10.105.8.81:33945]
I0524 10:17:47.575856 1 horizontal.go:438] Successfully updated status for resty
W0524 10:17:47.575890 1 horizontal.go:104] Failed to reconcile resty: failed to compute desired number of replicas based on Custom Metrics for Deployment/availability-demo/resty: failed to get custom metric value: did not recieve metrics for any ready pods
ОБНОВЛЕНИЕ: обнаружил, какой запрос HPA выдает к heapster через прокси-сервер для сбора пользовательских метрик. Эти запросы всегда возвращают пустой массив метрик:
GET /api/v1/proxy/namespaces/openshift-infra/services/https:heapster:/api/v1/model/namespaces/availability-demo/pod-list/availability-example-1694583826-55hqh/metrics/custom/requests_count?start=2017-05-25T13%3A14%3A24Z HTTP/1.1
Host: kubernetes-master:8443
Authorization: Bearer hpa-agent-token
И это возвращается
{"items":[{"metrics":[],"latestTimestamp":"0001-01-01T00:00:00Z"}]}
ОБНОВЛЕНИЕ: Оказывается, что HPA запрашивает heapster через прокси-сервер, а heapster - в свою очередь - запрашивает "суммарный" kubernetes api. Тогда возникает вопрос: почему api kubernetes не отвечает метриками для вышеупомянутого запроса, хотя метрики существуют?
1 ответ
Возможно, это неверное предположение, но у меня была проблема с самодельным кластером, с двумя вещами, с которыми я столкнулся, были проблемы с токенами, когда сертификат моей основной настройки HA был настроен неправильно, и другая проблема касалась моих kubedns. Не уверен, что это применимо для openshitf.