Ошибка при настройке очистки DaemonSet узла-экспортера для Prometheus в Kubernetes

Я настроил DaemonSet экспортера узлов в Kubernetes, а также сервис, который указывает на IP-адреса этих модулей-экспортеров узлов (я следовал этому учебнику). Когда я запускаю kubectl get endpoints -n monitoring, я проверяю, что служба правильно указывает на три созданных модуля DaemonSet.

После этого внутри файла prometheus.yml я добавил эту конфигурацию для очистки метрик узла-экспортера:

  - job_name: "node-exporter"
    kubernetes_sd_configs:
      - role: endpoints
        namespaces:
          names:
          - monitoring
    relabel_configs:
      - source_labels: [__meta_kubernetes_endpoints_name]
        regex: "node-exporter"
        action: keep

Проблема в том, что я применяю эти конфигурации и перезапускаю prometheus.service:

> systemctl status prometheys.service --no-pager --full

● prometheus.service - PromServer
     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-06-18 16:24:18 UTC; 1min 41s ago
   Main PID: 1441565 (prometheus)
      Tasks: 10 (limit: 33613)
     Memory: 38.2M
        CPU: 325ms
     CGroup: /system.slice/prometheus.service
             └─1441565 /usr/local/bin/prometheus --web.enable-admin-api --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries

Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.654Z caller=head.go:755 level=info component=tsdb msg = "WAL segment loaded" segment=158 maxSegment=159
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.655Z caller=head.go:755 level=info component=tsdb msg = "WAL segment loaded" segment=159 maxSegment=159
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.655Z caller=head.go:792 level=info component=tsdb msg = "WAL replay completed" checkpoint_replay_duration=7.37407ms wal_replay_duration=43.4001ms wbl_replay_duration=200ns total_replay_duration=51.456586ms
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.657Z caller=main.go:1040 level=info fs_type=EXT4_SUPER_MAGIC
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.657Z caller=main.go:1043 level=info msg = "TSDB started"
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.657Z caller=main.go:1224 level=info msg = "Loading configuration file" filename=/etc/prometheus/prometheus.yml
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.661Z caller=manager.go:317 level=error component = "discovery manager scrape" msg = "Cannot create service discovery" err = "unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined" type=kubernetes config=node-exporter
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.664Z caller=main.go:1261 level=info msg = "Completed loading of configuration file" filename=/etc/prometheus/prometheus.yml totalDuration=6.861558ms db_storage=1.6µs remote_storage=1.2µs web_handler=500ns query_engine=800ns scrape=3.46318ms scrape_sd=100.802µs notify=42.801µs notify_sd=13.7µs rules=2.858566ms tracing=8.1µs
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.664Z caller=main.go:1004 level=info msg = "Server is ready to receive web requests."
Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.664Z caller=manager.go:995 level=info component = "rule manager" msg = "Starting rule manager..."

Из вывода я получаю эту ошибку:


Jun 18 16:24:18 vm-devops-tiim-giro-prd prometheus[1441565]: ts=2024-06-18T16:24:18.661Z caller=manager.go:317 level=error component = "discovery manager scrape" msg = "Cannot create service discovery" err = "unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined" type=kubernetes config=node-exporter

Мне пока не повезло с поиском в Google... Может ли кто-нибудь помочь мне понять, какие переменные мне не хватает в конфигурации?

Вместо этого рассмотрите возможность задать вопросы системному администратору (например, о настройке мониторинга) на сайте serverfault.com. Stack Overflow предназначен для вопросов по программированию.

Jonas 18.06.2024 21:47

Извините, это моя вина... Я опубликую это там как можно скорее со ссылкой на решение. Спасибо

Paula Gouveia 19.06.2024 12:32
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
2
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка указывает на то, что Prometheus не может найти конфигурации (KUBERNETES_SERVICE_HOST и KUBERNETES_SERVICE_PORT), которые необходимы Prometheus для взаимодействия с API-сервером Kubernetes.

Чтобы решить проблему, вы можете выполнить следующие действия по устранению неполадок:

  • Убедитесь, что развертывание Prometheus содержит упомянутые выше переменные среды. Если переменные отсутствуют, добавьте их со следующими конфигурациями:

     env:
     - name: "KUBERNETES_SERVICE_HOST"
       value: kubernetes.default.svc
     - name: KUBERNETES_SERVICE_PORT
       value: "443" 
    
  • Убедитесь, что учетная запись службы, используемая Prometheus, имеет соответствующие разрешения RBAC, необходимые для доступа к службам и конечным точкам.

  • Если у вас есть журналы Prometheus, лучше отслеживать их на наличие ошибок, связанных с обнаружением служб.

  • Перекрестно проверьте, используете ли вы правильное пространство имен и правильные конечные точки в файле prometheus.yml .

Примечание:

Если вы пытаетесь экспортировать метрики во внешний Prometheus, который не находится в том же кластере, что и Kubernetes, перейдите по этой ссылке .

Прочитав ваш ответ, я отредактировал файл prometheus.service и добавил в раздел [Service] KUBERNETES_SERVICE_HOST и KUBERNETES_SERVICE_PORT в качестве переменных среды (как здесь). Тогда мне просто пришлось перезапустить службу. Большое спасибо! :)

Paula Gouveia 19.06.2024 12:30

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