Установка Grafana Loki с помощью Helm, ожидающие поды: 0/2 узлов доступны: 1 Слишком много подов, 1 узел(ов) имел непереносимую метку

Вопрос или проблема

У меня есть следующие значения Helm для развертывания Loki:

yaml


serviceAccount:
  create: true
  name: loki-s3-storage-policy
  imagePullSecrets: []
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::1234567:role/AmazonEKS_EBS_CSI_DriverRole
  automountServiceAccountToken: true

loki:
  schemaConfig:
    configs:
      - from: "2024-04-01"
        store: tsdb
        object_store: s3
        schema: v13
        index:
          prefix: loki_index_
          period: 24h
  storage_config:
    aws:
      region: eu-west-1
      bucketnames: testing.api.logs.chunks
      s3forcepathstyle: false
  pattern_ingester:
    enabled: true
  limits_config:
    allow_structured_metadata: true
    volume_enabled: true
    retention_period: 672h
  querier:
    max_concurrent: 4

  storage:
    type: s3
    bucketNames:
      chunks: testing.api.logs.chunks
      ruler: testing.api.logs.ruler
      admin: testing.api.logs.admin
    s3:
      endpoint: null
      region: eu-west-1
      secretAccessKey: null
      accessKeyId: null
      s3ForcePathStyle: false
      insecure: false

deploymentMode: SimpleScalable

backend:
  replicas: 1
read:
  replicas: 1
write:
  replicas: 1

minio:
  enabled: false

nodeSelector:
  nodeGroup: testing-node-group-t3-large

tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "production"
    effect: "NoExecute"

Я выполнил следующую команду:

helm install --values .\values.yml loki grafana/loki -n loki

Я также попробовал:

helm install loki grafana/loki-simple-scalable --set read.replicas=2 --set write.replicas=2 --set loki.auth_enabled=false --values .\values.yml -n loki
Однако я постоянно вижу следующее предупреждение в своих подах:

bash

kubectl describe pod/loki-backend-0 -n loki
sql

Warning FailedScheduling 4m18s (x2 over 9m25s) default-scheduler
0/2 nodes are available: 1 Слишком много подов, 1 node(s) had untolerated
taint {dedicated: production}. preemption: 0/2 nodes are available: 1
No preemption victims found for incoming pod, 1 Preemption is not
helpful for scheduling

Я добавил taint к одному из моих узлов, чтобы разрешить планирование только для приложений в продакшене. Моё продакшен-приложение имеет следующее терпение:

yaml

tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "production"
    effect: "NoExecute"

Я пытался добавить то же самое терпение в мои значения Loki (см. внизу значений), но это не сработало. Предпочтительно, чтобы поды Loki планировались на не-продакшен узле, но на данном этапе мне просто нужно, чтобы они работали.

Может кто-то помочь мне с следующим?

Как я могу добавить терпение к моему развертыванию Loki?
Как я могу гарантировать, что поды Loki будут планироваться только на узлах без taint?

Ответ или решение

Установка Grafana Loki через Helm: Решение проблем с доступностью подов

Введение

Установка Grafana Loki через Helm может представлять определённые трудности, особенно если у вас возникли ошибки при планировании подов. Ошибка, которую вы наблюдаете: "0/2 nodes are available: 1 Too many pods, 1 node(s) had untolerated taint" – возникает как следствие наложенных ограничений и воздействий на узлы Kubernetes. В данной статье мы рассмотрим, как добавить толерантности к вашему развертыванию Loki и гарантировать, что ваши поды будут распределяться по ненагруженным узлам без тентования.

Анализ проблемы

Ваша основная проблема заключается в том, что вы добавили тейнт на узлы кластера, чтобы они обслуживали только продакшн-приложения. Тем не менее, у вас также есть приложение Loki, которое требует возможности размещения на этих узлах. В таких случаях необходимо уточнить конфигурацию толерантностей и настройки для того, чтобы ваши поды могли успешно планироваться.

Решение 1: Добавление толерантностей

Согласно вашему предоставленному YAML конфигурационному файлу, вы уже добавили одну толерантность:

tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "production"
    effect: "NoExecute"

Однако, вам нужно добавить еще одну толерантность для ваших подов Loki, чтобы они могли быть запланированы на узлах с тейнтом, или в случае, если вы хотите избежать этого, сохранить текущие настройки для продакшн-приложений и настроить Loki так, чтобы он запускался на других узлах.

Чтобы добавить толерантность, измените вашу конфигурацию следующим образом:

tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "production"
    effect: "NoExecute" # для работы на продакшн узлах
  - key: "dedicated"
    operator: "Equal"
    value: "non-production" # добавьте эту строку для работы на ненагруженных узлах
    effect: "NoExecute"

Также, если вы хотите, чтобы Loki запускался только на узлах, которые не имеют тейнт, вам нужно полностью убрать их из конфигурации:

tolerations: []  # Убираем все толерантности для работы только на нетейнированных узлах.

Решение 2: Ограничение планирования

Для того, чтобы убедиться, что ваши поды Loki будут запускаться только на ненагруженных узлах, добавьте селектор узлов (nodeSelector) или используйте аннотации, чтобы явно указать, какие узлы приемлемы. Например, стоит добавить в конфигурацию:

nodeSelector:
  nodeGroup: non-production-node-group

Таким образом, планировщик Kubernetes будет искать только те узлы, которые соответствуют данному селектору, и игнорировать узлы с тейнтом.

Установка

После внесения вышеуказанных изменений, выполните команду установки Helm снова:

helm install --values ./values.yml loki grafana/loki -n loki

Проверьте статус подов с помощью команды:

kubectl get pods -n loki

Заключение

Убедившись, что вы правильно настроили толерантности и селекторы, вы сможете успешно запустить Loki на своих ресурсах Kubernetes. Если у вас возникают дополнительные проблемы с размещением подов, рекомендуется подробно просматривать журналы, а также описания подов с помощью команд kubectl describe pod <pod-name> -n loki для получения больше информации о причинах отказа в планировании.

Эти изменения позволят вашему окружению быть более гибким и упростят управление ресурсами в рамках CI/CD процессов.

Оцените материал
Добавить комментарий

Капча загружается...