Как получить список показателей, доступных для HPA?

У меня есть кластер GCP, содержащий приложение GKE:

Я хочу масштабировать приложение с помощью HPA

На основе поддержки метрик

HPA может считывать показатели из

  • metrics.k8s.io (метрики ресурсов)

  • custom.metrics.k8s.io(специальные метрики)

  • external.metrics.k8s.io(внешние метрики)

Как я мог проверить, какие показатели доступны? Как я мог попробовать этот API самостоятельно? Это вообще возможно?

PS

На основании предложенного ответа я выполнил команду:

 kubectl get --raw https://MY-KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/default/pods

Ответ:

{
  "items": [
    {
      "metadata": {
        "name": "prometheus-adapter-69fcdd56bc-2plh7",
        "namespace": "default",
        "selfLink": "/\r\napis/metrics.k8s.io/v1beta1/namespaces/default/pods/prometheus-adapter-69fcdd56bc-2plh7",
        "creationTimestamp": "2020-02-05T10:56:02Z"
      },
      "timestamp": "2020-02-05T10:55:22Z",
      "window": "30s",
      "containers": [
        {
          "name": "prometheus-adapter",
          "usage": {
            "cpu": "15\r\n31939n",
            "memory": "10408Ki"
          }
        }
      ]
    },
    {
      "metadata": {
        "name": "stackdriver-exporter-76fdbc9d8f-c285l",
        "namespace": "default",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/stackdriver-exporter-76fdbc9d8f-c285l",
        "creationTimestamp": "2020-0\r\n2-05T10:56:02Z"
      },
      "timestamp": "2020-02-05T10:55:22Z",
      "window": "30s",
      "containers": [
        {
          "name": "stackdriver-exporter",
          "usage": {
            "cpu": "79340n",
            "memory": "2000Ki"
          }
        }
      ]
    }
  ],
  "kind": "PodMetricsList",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods"
  }
}


$ kubectl top pods
NAME                                    CPU(cores)   MEMORY(bytes)
prometheus-adapter-69fcdd56bc-2plh7     2m           10Mi
stackdriver-exporter-76fdbc9d8f-c285l   1m           1Mi

Но я все еще не вижу всех показателей, доступных для HPA.

2 ответа

Сервер метрик предоставляет метрики через указанные ниже API.

  1. /nodes - метрики всех узлов; type []NodeMetrics
  2. /nodes/{node} - метрики для указанного узла; type NodeMetrics
  3. /namespaces/{namespace}/pods - все метрики подов в пространстве имен с поддержкой всех пространств имен; type []PodMetrics
  4. /namespaces/{namespace}/pods/{pod} - метрики для указанного модуля;type PodMetrics

Вы можете просмотреть доступные показатели, например, как показано ниже

kubectl get --raw https://KUBE-APISERVER-IP:6443 /apis/metrics.k8s.io/v1beta1

{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"metrics.k8s.io/v1beta1","resources":[{"name":"nodes","singularName":"","namespaced":false,"kind":"NodeMetrics","verbs":["get","list"]},{"name":"pods","singularName":"","namespaced":true,"kind":"PodMetrics","verbs":["get","list"]}]}

kubectl get --raw https://KUBE-APISERVER-IP:6443 /apis/metrics.k8s.io/v1beta1/namespaces/default/pods

Вы также можете использовать команду kubectl top pods который внутренне вызывает вышеуказанный API.

Пользовательские показатели

Они предоставляются адаптерами, разработанными поставщиками, и доступные метрики будут зависеть от адаптера. Как только вы узнаете название метрики, вы можете использовать API для доступа к ней.

Вы можете просмотреть доступные показатели, как показано ниже, и получить название показателя.

kubectl get --raw https://KUBE-APISERVER-IP:6443 /apis/custom.metrics.k8s.io/v1beta1

Внешние метрики

Они предоставляются адаптерами, разработанными поставщиками, и доступные метрики будут зависеть от адаптера. Как только вы узнаете название метрики, вы можете использовать API для доступа к ней.

Вы можете просмотреть доступные показатели, как показано ниже, и получить название показателя.

kubectl get --raw https://KUBE-APISERVER-IP:6443 /apis/external.metrics.k8s.io/v1beta1

Редактировать:

У вас уже есть адаптер Prometheus, но если метрика не отображается как пользовательская метрика для использования HPA, вам необходимо предоставить необходимые метрики. Для этого обратитесь к этому руководству.

На GKE случай немного другой.

По умолчанию Kubernetesимеют встроенные метрики (ЦП и память). Если вы хотите использоватьHPA основываясь на этой метрике, у вас не будет никаких проблем.

В GCP концепция:

  • Custom Metrics используются, когда вы хотите использовать метрики, экспортируемые рабочей нагрузкой Kubernetes, или метрики, прикрепленные к Kubernetes объект, такой как Pod или Node.
  • External Metrics- Метрики, отправленные в рабочие области с началом типа метрики external.googleapis.com известны как external metrics. Метрики обычно экспортируются проектами с открытым исходным кодом и сторонними поставщиками. Более подробную информацию можно найти здесь.Stackdriver Monitoring лечит external metrics такой же как custommetrics, за одним исключением. Для внешних показателейresource_type of global является недопустимым и приводит к отбрасыванию данных метрики.

Поскольку GKE интегрирован со Stackdriver

Google Kubernetes Engine (GKE) включает встроенную интеграцию с Stackdriver Monitoring и Stackdriver Logging. Когда вы создаете кластер GKE, Stackdriver Kubernetes Engine Monitoring включен по умолчанию и предоставляет панель мониторинга, специально адаптированную для Kubernetes.

С Stackdriver Kubernetes Engine Monitoring, вы можете указать, будет ли Stackdriver Logging собирать журналы приложений. У вас также есть возможность полностью отключить интеграцию Stackdriver Monitoring и Stackdriver Logging.

Проверить доступные показатели

Поскольку вы используете облачную среду - GKE, вы можете найти все доступные по умолчанию метрики, указав localhost на соответствующем порту. Вы должныSSH to one of Nodes а затем curl metric-server $ curl localhost:10255/metrics.

Второй способ - проверить доступную документацию по метрикам.

ВАЖНЫЙ

Вы можете видеть доступные метрики, но использовать их в HPA вам нужно развернуть Adapters нравиться Stackdriver adapter или Prometheus adapter. По умолчанию (версия 1.13.11) кластер GKE, который вы уже развернулиmetrics-server, heapster(не рекомендуется в новых версиях) и prometheus-to-sd-XXX. Если вы хотите использоватьStackdriver, у вас уже будет применено много конфигураций, но если вы хотите использовать Prometheus вам нужно будет отрегулировать Prometheus operators, adapters, deployments. Подробности можно найти здесь.

На GKEdocs, вы можете найти несколько руководств по использованию HPA с пользовательскими метриками или HPA с внешними метриками. Вы также можете прочитать о мониторинге GKE с помощью Prometheus и Stackdriver, в зависимости от ваших потребностей.

Как GKE интегрирован с Stackdriverвы можете прочитать статью о включении мониторинга.

Другие вопросы по тегам