使用Argo CD实现Kubeflow的GitOps

孤街浪徒 提交于 2021-01-12 01:46:04

使用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机器学习框架

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!