文档章节

使用Argo CD实现Kubeflow的GitOps

openthings
 openthings
发布于 02/01 10:43
字数 1527
阅读 91
收藏 0

使用Argo CD实现Kubeflow的GitOps

本指南将描述如何使用使用Argo CD实现Kubeflow-面向Kubernetes集群的机器学习框架的GitOps。

1、什么是GitOps?

GitOps 持续交付方法论,以 Git为中心,作为单一的源向声明式框架和基础设施交付应用。 Git 仓库定义了应用的状态,通过声明式参数来进行定义。

GitOps工具( Argo CD)将解决 git repo 定义和实际系统的差异性。

  • 系统作为保障的结果,GitOps 强制实施一种运维模型,使所有的变更都是可观测和校验的,通过 git commits 来完成。该声明参数流水线使开发者不必编写脚本来构建和部署自己的应用。
  • 调试简化为开发者的一个变更日志集合,通过Git commits history可以查看。如果实际系统偏离了原苍鹭指定的状态,GitOps 方法将提供工具来修正实际系统到期望的状态。
  • 最终,一旦新的提交被发现,回滚也变为简单地同步上一次的好的git commit。所有这些好处将会减少开发者的工作量,而以前不得不花费大量的时间来进行部署系统的管理。

另外一种动态维护Kubernetes应用状态的的方法是Operator,是通过调用Kubernetes API来进行的,作为一种应用提供的定制调度器来实现,能够提供更为细致的动态应用状态维护(相比于GitOps提供的是通用的静态描述参数文件)。具体可以参考:

2、Argo CD 和 GitOps

Argo CD 是Kubernetes-native 声明式持续交付工具,允许实施 GitOps 方法。Argo CD 提供了:

  • 与模版工具 Ksonnet、Helm整合,定制 plain yaml 文件来定义应用的期望状态。
  • 自动或手动同步应用到期望的状态。
  • 通过 UI 提供应用状态的可观测性。
  • 扩展 CLI 来继承 Argo CD 到任何持续集成系统。
  • 企业级的 auditability, compliance, security, RBAC, 以及 SSO。

3、准备

首先有一个kubernetes集群。如果没有,参考 this guide 来创建。

4、安装 Argo CD

按照 argo cd getting started guide 到 ‘Create an application from a git repository location’ 的步骤进行。

  • 例如,如果本地机器是 OSX,希望部署 Argo CD 和 Kubeflow 到 GKE 集群,运行:
  1. 安装 Argo CD 到Kubernetes Cluster。

    ARGO_CD_LATEST=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
    kubectl create namespace argocd
    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/$ARGO_CD_LATEST/manifests/install.yaml
  2. 安装 Argo CD 客户端。

    brew install argoproj/tap/argocd
  3. 设置额外的 Argo CD 权限,因为GKE cluster启用 RBAC 控制。将授权账号能够创建新的 cluster roles,通过运行:

    kubectl create clusterrolebinding YOURNAME-cluster-admin-binding --clusterrole=cluster-admin --user=YOUREMAIL@gmail.com
  4. 暴露 Argo CD API 服务。

    kubectl port-forward service/argocd-server 8080:443

    关于连接到 Argo CD 实例的其它方法,参考 here

  5. 使用 CLI 作为admin 用户登录。

    初始的 admin 用户密码是自动根据 ArgoCD API server的pod创建的。通过下面的命令来获取:

    kubectl get pods -n argocd -l app=argocd-server -o name | cut -d'/' -f 2

    使用上面的密码,登录到ArgoCD。运行:

    argocd login localhost:8080

    登录后,改变密码使用下面的命令:

    argocd account update-password
    argocd relogin

5、创建 Kubeflow 部署的 repo

  1. 创建一个git repo,保存你的Kubeflow 配置参数。
  2. 如果没有使用 kfctl.sh 脚本来创建 kubernetes cluster和生成 kubernetes 资源。

    1. 运行下面的脚本下载 kfctl.sh

      mkdir ${KUBEFLOW_SRC}
      cd ${KUBEFLOW_SRC}
      export KUBEFLOW_TAG=v0.4.1
      
      curl https://raw.githubusercontent.com/kubeflow/kubeflow/${KUBEFLOW_TAG}/scripts/download.sh | bash
      • KUBEFLOW_SRC 目录为 kubeflow source。
      • KUBEFLOW_TAG 对应于版本tag,如 master 为最新的版本。
      • 注意 只能使用git来clone该repository。
    2. 运行下面的脚本来创建 Kubeflow KS 应用:

      ${KUBEFLOW_SRC}/scripts/kfctl.sh init ${KFAPP} --platform none
      cd ${KFAPP}
      ${KUBEFLOW_SRC}/scripts/kfctl.sh generate k8s
      
      • KFAPP 目录的名称,希望 kubeflow configurations 配置存储的位置。该目录将在运行 init 时被创建。
  3. 添加环境到ksonnet 应用:

    • 如果部署 kubeflow 在同样的集群,作为 Argo CD, 运行:
    cd ks_app
    ks env add default --server https://kubernetes.default.svc --namespace kubeflow

    要么运行:

    ks env add default
    argocd cluster add CONTEXTNAME
    • CONTEXTNAME Kubernetes cluster的Context名称,希望部署的上下文环境。
  4. 添加 KSAPP 目录到 git repo,即上面第一步创建的仓库。

6、部署 Kubeflow

运行下面的命令来创建 Kubeflow 应用,通过Argo CD进行,然后通过git repo同步 manifests到集群中。

export KUBEFLOW_SRC_URL='Replace with a ssh or https git endpoint'
argocd app create kubeflow --name kubeflow --repo $KUBEFLOW_SRC_URL --path ks_app --env default
argocd app sync kubeflow
  • 查看 Kubeflow 应用,运行:
argocd app get kubeflow

或者通过UI进行:Argo CD deployment in progress

  • 注意: 这里有一些 known issue, IAP component 将阻止 envoy service 成为同步状态并且引起后续的同步失败。作为解决办法,我建议你同步单独的资源,通过添加 resource flag 到 sync 命令中。

一旦同步完成,然后就可以访问 Kubeflow UI,通过https://<KFAPP>.endpoint.<PROJECT>.cloud.googl/

  • 大概需要 10–15 分钟,endpoint 变为可用。Kubeflow需要签名的 SSL certificate 以及注册DNS name。

7、下一步

当提交Kubeflow仓库的ksonnet application 目录的修改 (该 ks_app directory if you used the kfctl.sh script), Argo CD 将检测你的 git repo的同步状态。为了同步新的资源,你可以运行:

argocd app sync kubeflow --resource GROUP:KIND:NAME

或者从 UI: Argo CD partial sync

8、更多 Argo CD 配置

请到 Argo CD documentation 阅读更多材料,了解如何配置其它的特征,如 auto-sync、SSO、RBAC等等!

9、关于KubeFlow机器学习框架

© 著作权归作者所有

openthings
粉丝 320
博文 1129
码字总数 675031
作品 1
东城
架构师
私信 提问
AirFlow/NiFi/MLFlow/KubeFlow进展

大数据分析中,进行流程化的批处理是必不可少的。传统的大数据处理大部分是基于关系数据库系统,难以实现大规模扩展;主流的基于Hadoop/Spark体系总体性能较强,但使用复杂、扩展能力弱。大数...

openthings
06/21
245
0
GitOps——像代码一样管理Istio配置

GitOps——像代码一样管理Istio配置 本文译自Weaveworks 官方博客: https://www.weave.works/blog/gitops-for-istio-manage-istio-config-like-code 本文来源,https://mp.weixin.qq.com/s/......

openthings
2018/06/02
376
0
像Google一样构建机器学习系统3 - 利用MPIJob运行ResNet101

本系列将利用阿里云容器服务,帮助您上手Kubeflow Pipelines. 第一篇:在阿里云上搭建Kubeflow Pipelines 第二篇:开发你的机器学习工作流 第三篇:利用MPIJob运行ResNet101 从上篇文章中,我...

必嘫
05/17
0
0
Kubeflow 入门——为 Kubernetes 打造的组件化、可移植、可扩展的机器学习堆栈

【编者的话】本文来自 Kubeflow 项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi,主要讲了他们新的开源项目——Kubeflow 的一些入门知识,Kubeflow 致力于使 Kubernetes 上的机器...

openthings
2018/05/06
392
0
Kubeflow 公布 1.0 路线图:2019 年实现 API 稳定

Kubeflow,名字取自 Kubernetes + Tensorflow ,是 Google 为了支持 Tensorflow 的部署而推出的开源平台。Kubeflow 旨在使 Kubernetes 上的机器学习变的轻松、便捷、可扩展,其目标不是重建其...

王练
01/06
2.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在改造 公羊阅读🐏 Taro 版本适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 client_mobile_taro...

dkvirus
今天
4
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部