Вопрос или проблема
У меня есть следующие значения 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 процессов.