«Ошибка: ключ не загружен» в системе H2O, развернутой через кластер K3s с использованием клиента python3 - PullRequest
1 голос
/ 10 июля 2020

Я могу подтвердить, что кластер из 3 реплик H2O внутри K3s правильно развернут, поскольку выполнение в интерпретаторе Python3 h2o.init(ip="x.x.x.x") работает должным образом. Я следовал инструкциям, приведенным здесь: https://www.h2o.ai/blog/running-h2o-cluster-on-a-kubernetes-cluster/

Тем не менее, мне пришлось изменить service.yaml и закомментировать строку, в которой написано clusterIP: None, поскольку K3s жаловался на что-то связанное на невозможность установить для clusterIP значение None. Но даже при этом я могу подтвердить, что он работает правильно, и я могу использовать внешний IP-адрес для подключения к кластеру.

Если я попытаюсь загрузить набор данных с помощью кластера H2O внутри кластера K3s, используя точно такие же шаги, как описано здесь http://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html, вот результат, который я получаю:

>>> train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")
...
h2o.exceptions.H2OResponseError: Server error java.lang.IllegalArgumentException:
  Error: Key not loaded: Key<Frame> https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv
  Request: POST /3/ParseSetup
    data: {'check_header': '0', 'source_frames': '["https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv"]'}

Та же ошибка возникает, если я использую метод h2o.upoad_file("x.csv").

Есть подсказка о том, что здесь может происходить: Ключ не загружен: Ключ при отправке исходного кадра через ParseSetup в вызове H2O API , но я не использую curl и не могу найти ни одного параметр, который может помочь мне решить эту проблему: http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/h2o.html?highlight=import_file#h2o .import_file

Мне нужно использовать клиент Python внутри одного кластера K3s по разным техническим причинам, поэтому я не не может запустить ни Flow, ни Firebug, чтобы узнать, что может происходить.

Я могу подтвердить, что он работает правильно, когда я просто выдаю h2o.init(), используя локальный экземпляр Java.

ОБНОВЛЕНИЕ 1: * 103 5 *

Я безуспешно пробовал в разных кластерах K3s. Я изменил service.yaml на NodePort, и теперь это трассировка ошибки:

>>> train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")
...
h2o.exceptions.H2OResponseError: Server error java.lang.IllegalArgumentException:
  Error: Job is missing
  Request: GET /3/Jobs/$03010a2a016132d4ffffffff$_a2366be93ec99a78d7bc161de8c54d67

ОБНОВЛЕНИЕ 2:

Я пробовал использовать разные службы (NodePort , LoadBalancer, ClusterIP), и ни один из них не работает. Я также безуспешно пытался использовать Minikube с официальным изображением и с пользовательским изображением, созданным мной. Я подозреваю, что это связано либо с самой h2o, либо с кластеризацией между подами. Я буду копать дальше и подумаем, что в нем будет немного золота.

ОБНОВЛЕНИЕ 3:

Еще я узнал, что сообщение о запуске H2O в Docker действительно устарело https://www.h2o.ai/blog/h2o-docker/ и не работает Dockerfile, присутствующий на GitHub (я изменил его, чтобы раскомментировать раздел ENTRYPOINT безуспешно): https://github.com/h2oai/h2o-3/blob/master/Dockerfile

Хотя , Я пробовал использовать пользовательский образ, который я создал для h2o-k8s, и он без проблем работает в чистом Docker. Мне интересно, почему он все еще не работает в K8s ...

ОБНОВЛЕНИЕ 4:

Я безуспешно пытался изменить переменную среды с именем H2O_KUBERNETES_SERVICE_DNS.

Тем временем кластер стал недоступен, то есть readinessProbe не удалось успешно завершить. Независимо от того, что я меняю сейчас, это не работает.

Я развернул кластер K3d локально, чтобы посмотреть, что произошло, и, что удивительно, readinessProbe не дали сбоев, используя v3.30.0.6. Но теперь я начал тестировать его с R вместо Python. Я рад, что попробовал, потому что, возможно, я точно определил, что было не так. Несоответствие версий между клиентом и сервером. Поэтому я соответственно обновил изображение до v3.30.0.1.

Но опять же, readinessProbe не работает в моем кластере k3d, поэтому я не могу его протестировать.

1 Ответ

0 голосов
/ 23 июля 2020

Вроде сейчас работает. Версия клиента R 3.30.0.1 с версией сервера 3.30.0.1. Также пробовал с Python версией 3.30.0.7 и версией сервера 3.30.0.7, и он начал работать. Замечательно. Проблема была вызвана несоответствием версий между клиентом и сервером, поскольку клиент python был обновлен до 3.30.0.7, в то время как последний сервер для docker был 3.30.0.6.

...