Вопрос или проблема
У меня есть следующие значения Helm для моего развертывания Loki, работающего на AWS EKS. У меня 2 узла, один из которых я хочу использовать для общих приложений, а другой для моих производственных приложений.
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
Предупреждение FailedScheduling 4m18s (x2 over 9m25s) default-scheduler
0/2 узлов доступны: 1 Слишком много подов, 1 узел(ов) имел неразрешенную
загрязненность {dedicated: production}. предвосхищение: 0/2 узлов доступны: 1
Нет жертв для предвосхищения для входящего пода, 1 Предвосхищение не
помогает для планирования
Я добавил загрязненность к одному из своих узлов, чтобы разрешить планирование только для производственных приложений. У моего производственного приложения есть следующее терпение:
yaml
tolerations:
- key: "dedicated"
operator: "Equal"
value: "production"
effect: "NoExecute"
Я пытался добавить то же самое терпение в мои значения Loki (см. внизу значений), но это не работает. Предпочтительно, я хотел бы, чтобы поды Loki планировались на узле без загрязнений, но на данном этапе мне просто нужно, чтобы они работали.
Кто-нибудь может помочь мне с следующим?
Как я могу добавить терпимость к развертыванию Loki?
Как я могу гарантировать, что поды Loki будут планироваться только на узлах без загрязнений?
Ответ или решение
Для успешной установки Grafana Loki в кластер EKS (Amazon Elastic Kubernetes Service) необходимо правильно настроить манифесты и учесть особенности распределения подов на узлах кластера. В вашей ситуации наблюдаются проблемы с размещением подов Loki из-за настроек тантов и селекторов узлов. Давайте подробно рассмотрим, как можно решить ваши проблемы.
Проблема: Необходимость в распределении подов Loki на некондиционные узлы
Вы уже имеете два узла, из которых один предназначен для приложений с высоким приоритетом (production), который имеет тант с ключом dedicated
и значением production
. Это ограничивает возможность размещения подов без соответствующих толерантностей на узле с данным тантом.
Решение:
-
Добавление толерантности к подам Loki:
Вам необходимо добавить правильную толерантность для подов Loki в ваш файл значений Helm (values.yml
). Однако, если вы хотите, чтобы Loki поды могли размещаться на узлах без тантов, вам нужно также убедиться, что у подов Loki есть нужные толерантности.В вашем файле
values.yml
добавьте следующий блок в разделtolerations
:tolerations: - key: "dedicated" operator: "Equal" value: "production" effect: "NoExecute" - key: "dedicated" operator: "Equal" value: "testing" # или любое другое значение, которое соответствует вашим узлам effect: "NoExecute"
Это позволит подам Loki размещаться на узлах, которые не имеют тантов или имеют менее строгие ограничения.
-
Обновление селектора узлов:
Если вы хотите, чтобы поды Loki запускались только на узлах, которые не имеют тантов, вам нужно изменить настройкиnodeSelector
. Текущая настройкаnodeSelector
указывает на группу узловtesting-node-group-t3-large
. Убедитесь, что на этом узле отсутствуют танты.Если вы хотите, чтобы поды Loki автоматически размещались на узлах без тантов, измените
nodeSelector
следующим образом:nodeSelector: {} # Это позволит подам Loki размещаться на любых доступных узлах без ограничений
Если вы хотите осознанно указать узлы, то вы должны настроить селектор таким образом, чтобы он указывал на группу узлов, где нет тантов.
Примеры установки
После внесения изменений в ваш файл values.yml
, повторите установку с помощью Helm:
helm install --values ./values.yml loki grafana/loki -n loki
или
helm upgrade --install loki grafana/loki-simple-scalable --values ./values.yml -n loki
Проверка состояния подов
После этого проверьте статус подов с помощью следующей команды:
kubectl get pods -n loki
И для получения информации о том, где размещены поды:
kubectl get pods -n loki -o wide
Эти команды дадут вам ясное представление о том, удается ли вам правильно распределить поды Loki по узлам кластера.
Заключение
Убедитесь, что все изменения отражены в вашем values.yml
, а затем выполните установку. Это должно решить вашу проблему с размещением подов Loki на узлах без тантов. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться за поддержкой!