首页 > 解决方案 > 使用python3客户端通过K3s集群部署的h2o中的“错误:未加载密钥”

问题描述

我可以确认 K3s 内的 3 副本 h2o 集群已正确部署,因为在 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 连接到集群。

如果我尝试使用 K3s 集群内的 h2o 集群加载数据集,使用与此处描述的完全相同的步骤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")方法,也会发生同样的错误。

关于这里可能发生的事情有一个线索:Key not loaded: Key<Frame> while POSTing source frame through ParseSetup in H2O API call但我没有使用 curl,我找不到任何可以帮助我克服这个问题的参数: http: //docs.h2o.ai/h2o/latest-stable/h2o-py/docs/h2o.html ?highlight=import_file#h2o.import_file

由于不同的技术原因,我需要在同一个 K3s 集群中使用 Python 客户端,因此我无法启动,也无法启动 Flow 或 Firebug 以了解可能发生的情况。

h2o.init()当我使用本地 Java 实例简单地发出 a 时,我可以确认它工作正常。

更新 1:

我在不同的 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 本身或 pod 之间的集群有关。我会继续挖掘,让我们认为里面会有一些金子。

更新 3:

我还发现关于在 Docker 中运行 H2O 的帖子确实过时了https://www.h2o.ai/blog/h2o-docker/也没有在 GitHub 上工作 Dockerfile(我将其更改为取消注释 ENTRYPOINT 部分但没有成功): https://github.com/h2oai/h2o-3/blob/master/Dockerfile

尽管如此,我还是尝试了为 h2o-k8s 构建的自定义镜像,它在纯 Docker 中无缝运行。我想知道为什么它仍然无法在 K8s 中工作......

更新 4:

我尝试修改调用的环境变量H2O_KUBERNETES_SERVICE_DNS但没有成功。

与此同时,集群开始不可用,即readinessProbe's 不会成功完成。无论我现在改变什么,它都不起作用。

我在本地启动了一个 K3d 集群以查看发生了什么,令人惊讶readinessProbe的是,使用v3.30.0.6. 但现在我开始用 R 而不是 Python 来测试它。我很高兴我尝试过,因为我可能已经查明出了什么问题。客户端和服务器之间存在版本不匹配。所以我相应地将图像更新为v3.30.0.1.

但现在又一次,readinessProbe在我的 k3d 集群中不起作用,所以我无法测试它。

标签: python-3.xh2ok3s

解决方案


看来它现在正在工作。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.


推荐阅读