使用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 集群,运行:
-
安装 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
-
安装 Argo CD 客户端。
brew install argoproj/tap/argocd
-
设置额外的 Argo CD 权限,因为GKE cluster启用 RBAC 控制。将授权账号能够创建新的 cluster roles,通过运行:
kubectl create clusterrolebinding YOURNAME-cluster-admin-binding --clusterrole=cluster-admin --user=YOUREMAIL@gmail.com
-
暴露 Argo CD API 服务。
kubectl port-forward service/argocd-server 8080:443
关于连接到 Argo CD 实例的其它方法,参考 here。
-
使用 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
- 创建一个git repo,保存你的Kubeflow 配置参数。
-
如果没有使用
kfctl.sh
脚本来创建 kubernetes cluster和生成 kubernetes 资源。-
运行下面的脚本下载
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。
-
运行下面的脚本来创建 Kubeflow KS 应用:
${KUBEFLOW_SRC}/scripts/kfctl.sh init ${KFAPP} --platform none cd ${KFAPP} ${KUBEFLOW_SRC}/scripts/kfctl.sh generate k8s
- KFAPP 目录的名称,希望 kubeflow configurations 配置存储的位置。该目录将在运行 init 时被创建。
-
-
添加环境到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名称,希望部署的上下文环境。
-
添加 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进行:
- 注意: 这里有一些 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:
8、更多 Argo CD 配置
请到 Argo CD documentation 阅读更多材料,了解如何配置其它的特征,如 auto-sync、SSO、RBAC等等!
9、关于KubeFlow机器学习框架
- Kubeflow更新升级到0.4.1
- Kubeflow 入门——为 Kubernetes 打造的组件化、可移植、可扩展的机器学习堆栈
- Kubeflow 使用指南
- Kubeflow-机器学习工作流框架
- Kubeflow 快速入门
- PyTorch支持Kubernetes集群
- Kubeflow等镜像部署到集群多节点
- 基于Kubernetes的机器学习系统
- Kubernetes集成TensorFlow服务
来源:oschina
链接:https://my.oschina.net/u/2306127/blog/3008023