本教程介绍如何在阿里云容器服务上部署Kubeflow Pipelines服务。

可体验到

  • 部署Kubeflow Pipelines
  • kustomize的使用
  • sed命令的使用

前置知识

  • 编写YAML格式文件
  • 了解kubeflow pipelines

前提条件

在教程开始之前:
  • 您需要一个Kubernetes集群。在阿里云上创建Kubernetes GPU集群请参见 Kubernetes GPU集群支持GPU调度
    说明 为了保障集群安全,
  • 您需要安装Arena
    执行以下命令安装:
    curl -s https://raw.githubusercontent.com/AliyunContainerService/ai-starter/master/scripts/install_arena.sh | \
    bash -s -- \
    --prometheus
  • 您需要安装kustomize
    • 在Linux和Mac OS环境,可以执行:
      curl -s https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest |\
        grep browser_download |\
        grep linux |\
        cut -d '"' -f 4 |\
        xargs curl -O -L
      mv kustomize /usr/bin/kustomize
      chmod u+x /usr/bin/kustomize
    • 在Windows环境,可以下载kustomize_2.0.3_windows_amd64.exe

背景信息

Kubeflow Pipelines是一个面向机器学习的工作流解决方案,通过定义一个有向无环图描述流水线系统,将机器学习中的应用代码按照流水线的方式编排,形成可重复的工作流。并提供平台,帮助编排,部署,管理,这些端到端机器学习工作流。本教程将介绍如何在阿里云容器服务中部署一个kubeflow pipelines环境。

说明 Kubeflow Pipelines需要依赖于mysql和minio这些有状态服务,也就需要持久化和备份数据,本教程中的部署yaml将会在集群所在可用区创建一块按量付费SSD云盘,阿里云的SSD云盘可以设置定期的自动备份,保证pipeline中的元数据不会丢失。

操作步骤

  1. 下载源代码。
    git clone --recursive https://github.com/aliyunContainerService/kubeflow-aliyun
  2. 安全配置。
    1. 配置TLS证书。如果没有TLS证书,可以通过下列命令生成:
      yum install -y openssl
      domain="pipelines.kubeflow.org"
      openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.key -out kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.crt -subj "/CN=$domain/O=$domain"
    2. 配置admin的登录密码:
      yum install -y httpd-tools
      htpasswd -c kubeflow-aliyun/overlays/ack-auto-clouddisk/auth admin
  3. 使用kustomize生成部署yaml。
    cd kubeflow-aliyun/
    kustomize build overlays/ack-auto-clouddisk > /tmp/ack-auto-clouddisk.yaml
  4. 修改yaml文件默认配置。
    • 查看所在的Kubernetes集群节点所在的地域和可用区,并且根据其所在节点替换可用区,假设您的集群所在可用区为cn-hangzhou-g,可以执行下列命令:
      sed -i.bak 's/regionid: cn-beijing/regionid: cn-hangzhou/g' \
          /tmp/ack-auto-clouddisk.yaml
      sed -i.bak 's/zoneid: cn-beijing-e/zoneid: cn-hangzhou-g/g' \
          /tmp/ack-auto-clouddisk.yaml
    • 将容器镜像地址由gcr.io替换为registry.aliyuncs.com:
      sed -i.bak 's/gcr.io/registry.aliyuncs.com/g' \
          /tmp/ack-auto-clouddisk.yaml
    • 调整使用磁盘空间大小,例如需要调整磁盘空间为200G:
      sed -i.bak 's/storage: 100Gi/storage: 200Gi/g' \
          /tmp/ack-auto-clouddisk.yaml
      说明 建议您检查一下/tmp/ack-auto-clouddisk.yaml修改是否已经设置。
  5. 验证pipelines的yaml文件。
    kubectl create --validate=true --dry-run=true -f /tmp/ack-auto-clouddisk.yaml
  6. 利用kubectl部署pipelines。
    kubectl create -f /tmp/ack-auto-clouddisk.yaml
    说明 清理pipelines命令:kubectl delete -f /tmp/ack-auto-clouddisk.yaml
  7. 查看访问pipeline的方式。
    kubectl get ing -n kubeflow
    NAME             HOSTS   ADDRESS           PORTS     AGE
    ml-pipeline-ui   *       192.168.193.271   80, 443   11m
  8. 输入步骤2中的用户名admin和设定的密码访问pipeline服务https://192.168.193.271/pipeline/pipelines