Почему бы вам не запускать капсулы Kubernetes более часа от Composer?
В документации Cloud Composer прямо говорится, что:
Из-за проблемы с клиентской библиотекой Kubernetes Python ваши модули Kubernetes должны быть спроектированы так, чтобы запускаться не более часа.
Тем не менее, он не предоставляет больше контекста, чем этот, и я не могу найти абсолютно актуальную проблему в клиентском проекте Kubernetes Python.
Чтобы проверить это, я два часа бегал в капсуле и не видел никаких проблем. Какая проблема создает это ограничение и как оно проявляется?
3 ответа
Я не очень хорошо знаком с экосистемами клиентской библиотеки Cloud Composer или Kubernetes Python, но сортировка системы отслеживания проблем GitHub по большинству комментариев показывает этот открытый элемент в верхней части списка: https://github.com/kubernetes-client/python/issues/492
Похоже, существует проблема с истечением срока действия токена:
@yliaog это проблема для нас, так как мы запускаем модули kubernetes в виде пакетных процессов и отслеживаем состояние модулей с помощью статического клиента. После инициализации объекта client он не обновляется, и поэтому любое задание, которое занимает более 60 минут, не будет выполнено. Просматривая python-base, кажется, что мы могли бы создать класс-оболочку, который генерирует нового клиента (или обновляет конфигурацию) каждые n минут, или проверяет состояние перед каждым вызовом (как предложено @mvle). Лучшее решение было бы в swagger-codegen, но временное решение, вероятно, было бы очень полезно для многих людей.
- @flylo, https://github.com/kubernetes-client/python/issues/492
https://issues.apache.org/jira/browse/AIRFLOW-3253 является причиной (и, надеюсь, мое исправление скоро будет объединено). Как и предполагали другие, это касается любого, кто использует клиент Python Kubernetes с аутентификацией GCP. Если вы проходите аутентификацию с помощью учетной записи службы Kubernetes, проблем не должно быть.
Если вы проходите аутентификацию через учетную запись службы GCP с помощью gcloud (например, с помощью GKEPodOperator), вы, как правило, увидите эту проблему с заданиями, которые занимают более часа, потому что токен аутентификации истекает через час.
Здесь также есть больше идей.
В настоящее время длительные задания в GKE всегда в конечном итоге завершаются ошибкой 404 ( https://bitbucket.org/snakemake/snakemake/issues/932/long-running-jobs-on-kubernetes-fail). Мы полагаем, что проблема в клиенте Kubernetes, так как мы определили, что хотя _refresh_gcp_token вызывается при истечении срока действия токена, следующий вызов API по-прежнему завершается с ошибкой 404.
Здесь вы можете видеть, что Snakemake использует Python-клиент kubernetes.