我正在尝试创建一个kubernetes吊舱,它将运行MLflow跟踪器,将mlflow工件存储在指定的s3位置。下面是我试图部署的内容
Dockerfile:
FROM python:3.7.0
RUN pip install mlflow==1.0.0
RUN pip install boto3
RUN pip install awscli --upgrade --user
ENV AWS_MLFLOW_BUCKET aws_mlflow_bucket
ENV AWS_ACCESS_KEY_ID aws_access_key_id
ENV AWS_SECRET_ACCESS_KEY aws_secret_access_key
COPY run.sh /
ENTRYPOINT ["/run.sh"]
# docker build -t seedjeffwan/mlflow-tracking-server:1.0.0 .
# 1.0.0 is current mlflow versionrun.sh:
#!/bin/sh
set -e
if [ -z $FILE_DIR ]; then
echo >&2 "FILE_DIR must be set"
exit 1
fi
if [ -z $AWS_MLFLOW_BUCKET ]; then
echo >&2 "AWS_MLFLOW_BUCKET must be set"
exit 1
fi
if [ -z $AWS_ACCESS_KEY_ID ]; then
echo >&2 "AWS_ACCESS_KEY_ID must be set"
exit 1
fi
if [ -z $AWS_SECRET_ACCESS_KEY ]; then
echo >&2 "AWS_SECRET_ACCESS_KEY must be set"
exit 1
fi
mkdir -p $FILE_DIR && mlflow server \
--backend-store-uri $FILE_DIR \
--default-artifact-root s3://${AWS_MLFLOW_BUCKET} \
--host 0.0.0.0 \
--port 5000mlflow.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: seedim/mlflow-tracker-service:v1
ports:
- containerPort: 5000
env:
# FILE_DIR can not be mount dir, MLFLOW need a empty dir but mount dir has lost+found
- name: FILE_DIR
value: /mnt/mlflow/manifest
- name: AWS_MLFLOW_BUCKET
value: <aws_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
volumeMounts:
- mountPath: /mnt/mlflow
name: mlflow-manifest-storage
volumes:
- name: mlflow-manifest-storage
persistentVolumeClaim:
claimName: mlflow-manifest-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mlflow-tracking-server
namespace: default
labels:
app: mlflow-tracking-server
spec:
ports:
- port: 5000
protocol: TCP
selector:
app: mlflow-tracking-server
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mlflow-manifest-pvc
namespace: default
spec:
storageClassName: gp2
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi然后,我正在构建码头映像,将其保存到迷你库环境中,然后尝试在kubernetes吊舱上运行对接映像。
当我尝试这样做时,我会得到图像pod的CrashLoopBackOff错误,而使用yaml创建的pod的'pod已经解除绑定立即PersistentVolumeClaims‘。
我试图跟踪这里的信息(MLFlow.ipynb)。
在这种情况下我做错了什么吗?
谢谢
发布于 2020-04-09 12:06:32
这里的问题与持久卷声明有关,而这些请求不是由您的minikube集群提供的。
您需要决定切换到平台管理的kubernetes服务,或者坚持使用minikube,并手动满足持久性卷声明或替代解决方案。
第一个舵机图表列出了要求:
先决条件
就像您遵循的指南一样,这一项需要PV提供程序的支持。
因此,通过切换到EKS,您很可能更容易使用s3部署带有工件存储的mflow。
如果您希望停留在minikube,您将需要修改舵机图表值或yaml文件,从您的指南链接,以兼容您手动配置的PV。它还可能需要s3的权限配置。
第二个helm 图表具有以下限制/特性:
本图表的已知限制 我创建这个图表是为了在我的公司的生产准备环境中使用它。我们使用的是MLFlow和Postgres后端商店。 因此,图表中忽略了以下功能:
你可以试着把它安装在迷你库上。此设置将导致工件存储在远程数据库上。为了连接到s3,它仍然需要调整。
无论如何,minikube仍然是以学习为主要目标的kubernetes的轻量级发行版,所以如果您坚持太久,最终会达到另一个限制。
希望能帮上忙。
https://stackoverflow.com/questions/61089001
复制相似问题