Как предотвратить планировщик / автоматическое масштабирование, чтобы исключить независимые задания (которые выполняются до завершения)?

У меня есть кластер K8s, который выполняет независимые задания (каждое задание имеет один модуль), и я ожидаю, что они будут выполняться до конца. Планировщик, однако, иногда перепланирует их на другом узле. Мои задания должны быть однопроходными, и перезапуск их на другом узле для меня неприемлемо.

Я смотрел на бюджеты разрушения Pod (PDB), но насколько я понимаю, их селекторы относятся к ярлыку Pod. Поскольку каждая моя работа отличается от другой и имеет отдельную метку, как мне использовать PDB, чтобы сообщить K8, что все мои модули имеют значение maxUnavailable, равное 0?

Я также использовал эту аннотацию

"cluster-autoscaler.kubernetes.io/safe-to-evict": false

но это не влияет на выселение контейнеров из-за нехватки ресурсов.

В идеале я должен быть в состоянии сказать K8s, что ни один из моих Стручков не должен быть выселен, если они не завершены.

1 ответ

Решение

Вы должны указать ресурсы, чтобы ваша работа стала гарантированным качеством обслуживания:

resources:
  limits:
    memory: "200Mi"
    cpu: "700m"
  requests:
    memory: "200Mi"
    cpu: "700m"

Запросы должны быть равны лимитам - тогда ваш модуль станет гарантированным и больше не будет выселен.

Читать подробнее: https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod

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