Я могу подтвердить, что кластер из 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, поэтому я не могу его протестировать.