我已经将mlflow构建部署到kubernetes集群中的一个吊舱中。我能够转发到mlflow ui,现在我正在尝试测试它。为此,我在同一个集群中运行在另一个荚上的jupyter笔记本上运行下面的测试。
import mlflow
print("Setting Tracking Server")
tracking_uri = "http://mlflow-tracking-server.default.svc.cluster.local:5000"
mlflow.set_tracking_uri(tracking_uri)
print("Logging Artifact")
mlflow.log_artifact('/home/test/mlflow-example-artifact.png')
print("DONE")但是当我运行这个的时候,我得到了
ConnectionError: HTTPConnectionPool(host='mlflow-tracking-server.default.svc.cluster.local', port=5000): Max retries exceeded with url: /api/2.0/mlflow/runs/get? (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object>: Failed to establish a new connection: [Errno 111] Connection refused'))部署mlflow吊舱的方式在yaml和docker中显示如下:
Yaml:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mlflow-tracking-server
namespace: default
spec:
selector:
matchLabels:
app: mlflow-tracking-server
replicas: 1
template:
metadata:
labels:
app: mlflow-tracking-server
spec:
containers:
- name: mlflow-tracking-server
image: <ECR_IMAGE>
ports:
- containerPort: 5000
env:
- name: AWS_MLFLOW_BUCKET
value: <S3_BUCKET>
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: aws-secret
key: AWS_ACCESS_KEY_ID
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: aws-secret
key: AWS_SECRET_ACCESS_KEY
---
apiVersion: v1
kind: Service
metadata:
name: mlflow-tracking-server
namespace: default
labels:
app: mlflow-tracking-server
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
spec:
externalTrafficPolicy: Local
type: LoadBalancer
selector:
app: mlflow-tracking-server
ports:
- name: http
port: 5000
targetPort: http当dockerfile调用一个执行mlflow服务器命令:mlflow server --default-artifact-root ${AWS_MLFLOW_BUCKET} --host 0.0.0.0 --port 5000的脚本时,我无法连接到我使用mlflow结荚创建的服务。
我尝试过使用跟踪uri http://mlflow-tracking-server.default.svc.cluster.local:5000,我尝试过使用服务外部IP:5000,但我尝试的一切都无法使用该服务进行连接和记录。在将mlflow服务器吊舱部署到我的kubernetes集群时,是否遗漏了什么?
发布于 2020-04-21 19:52:17
mlflow-tracking-server服务应该具有ClusterIP类型,而不是LoadBalancer类型。
两个荚位于同一个Kubernetes集群中,因此没有理由使用LoadBalancer服务类型。
对于应用程序的某些部分(例如,前端),您可能希望将服务公开到集群之外的外部IP地址上。Kubernetes ServiceTypes允许您指定您想要的服务类型。默认情况是ClusterIP。 类型值及其行为如下:
发布于 2020-11-10 15:03:37
因此,为了简化这一点,您无法从jupyterhub荚访问mlflow uri。我在这里要做的是检查代理是否有朱庇特中心吊舱。如果在.svc中没有NO_PROXY,就必须添加它。详细的原因是您正在访问内部.svc mlflow url,就好像它在开放的internet上一样。但是实际上,您的mlflow uri只能在集群中访问。如果添加.svc并不适用于任何代理,那么我们可以更深入地研究它。检查代理的方法是使用“kubectl get po $JHPODNAME -n $ JHNamespace -o yaml”
https://stackoverflow.com/questions/61351024
复制相似问题