首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes MLflow服务舱连接

Kubernetes MLflow服务舱连接
EN

Stack Overflow用户
提问于 2020-04-21 18:54:46
回答 2查看 912关注 0票数 2

我已经将mlflow构建部署到kubernetes集群中的一个吊舱中。我能够转发到mlflow ui,现在我正在尝试测试它。为此,我在同一个集群中运行在另一个荚上的jupyter笔记本上运行下面的测试。

代码语言:javascript
复制
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")

但是当我运行这个的时候,我得到了

代码语言:javascript
复制
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:

代码语言:javascript
复制
---
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集群时,是否遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-21 19:52:17

mlflow-tracking-server服务应该具有ClusterIP类型,而不是LoadBalancer类型。

两个荚位于同一个Kubernetes集群中,因此没有理由使用LoadBalancer服务类型。

对于应用程序的某些部分(例如,前端),您可能希望将服务公开到集群之外的外部IP地址上。Kubernetes ServiceTypes允许您指定您想要的服务类型。默认情况是ClusterIP。 类型值及其行为如下:

  • ClusterIP:在集群内部IP上公开服务。选择此值使服务只能从集群中访问。这是默认的ServiceType。
  • NodePort:在静态端口( NodePort)上公开每个节点的IP上的服务。自动创建ClusterIP服务( NodePort服务路由到的)。您可以通过请求:从集群外部与NodePort服务联系:。
  • LoadBalancer:使用云提供商的负载均衡器对外公开服务。自动创建外部负载均衡器路由的NodePort和ClusterIP服务。
  • ExternalName:映射服务到externalName字段的内容(例如,foo.bar.example.com),方法是返回一个具有其值的CNAME记录。没有设立任何形式的代理。

kubernetes.io

票数 2
EN

Stack Overflow用户

发布于 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”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61351024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档