Argo Workflow
官方有一篇关于本地运行Argo Workflow
的介绍:https://argoproj.github.io/argo-workflows/running-locally/。
本地搭建的Argo Workflow基于v3.1.5
版本,搭建开发环境也踩了一些坑,做下笔记,方便后面的同学有所准备。
|
至少安装v1.15
以上版本。
brew install yarn |
https://docs.docker.com/docker-for-mac/install/
当前使用到的是v3.8.8版本:https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv3.8.8
下载对应的预编译二进制打包文件,解压后拷贝一份放到$GOPATH/bin
目录下(全局用);再拷贝一份到argo-workflow
项目的dist
目录下(后面argo编译的时候需要)。
brew install protobuf |
https://minikube.sigs.k8s.io/docs/start/
便于后续服务的内部别名访问,修改 /etc/hosts
:
127.0.0.1 dex 127.0.0.1 minio 127.0.0.1 postgres 127.0.0.1 mysql |
由于我本地安装有mysql,因此argo-workflows项目安装的mysql会与我本地的端口号冲突。于是在我本地的MySQL上创建一个argo数据库以及对应的账号,不使用minikube中的MySQL服务。
argo
数据库以及mysql
账号CREATE DATABASE `argo`; CREATE USER 'mysql'@'%' IDENTIFIED BY 'password'; GRANT ALL ON argo.* TO 'mysql'@'%'; |
argo-workflows
项目中的端口转发在argo-workflows项目根目录下执行以下命令执行编译安装argo-workflows相关服务到本地,并在minikube中创建相应的argo资源:
make start PROFILE=mysql |
编译将会使用mysql
服务(默认使用的是pgsql
)。
当argo相关服务启动后,可以发现argo数据库被初始化了相关数据表。 |
Argo Server API
注意查看终端日志输出信息,不是HTTPS访问。 |
Argo UI
初次访问的时候会比较慢,注意查看终端日志输出信息。 |
MinIO UI
账号:admin
密码:password
正常完整编译约5分钟左右。 |
这一步是非常重要的,否则你无法创建workflow资源,因为argo相关的image在本地没有,拉取镜像会失败。执行以下命令编译即可:
eval $(minikube -p minikube docker-env) && make build |
其中的 |
如果遇到checksum mismatch
的问题:
由于编译是使用的Docker
执行,因此找到Dockerfile
对应的地址,去掉go.sum
即可。
2)unrecognized import path "golang.org/x/sys": reading https://golang.org/x/sys?go-get=1: 404 Not Found
编译阶段报错:
可能由于GFW
的关系无法访问对应的地址,在国内想好好撸代码真的是太不容易了,在go.mod
中增加一个replace
吧:
golang.org/x/sys => github.com/golang/sys v0.0.0-20200317113312-5766fd39f98d |
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
我花了数个小时没有解决通该问题,由于本次开发不会涉及到UI的修改,因此可以把Dockerfile
中涉及到ui
的部分注释掉。随后重新执行编译命令即可。
4)Container image "argoproj/argoexec:latest" is not present with pull policy of Never
运行阶段报错:
参考argo官方issue:https://github.com/argoproj/argo-workflows/issues/3672
主要原因也就是说Minikube
使用的Docker
和系统安装的Docker
不一样,我们之前编译的镜像在默认情况下都是编译到了系统的Docker
上。因此我们需要在编译的Shell终端上执行一下 eval $(minikube -p minikube docker-env)
命令,设置当前的Docker
为Minikube
的Docker
,随后重新执行编译即可:
eval $(minikube -p minikube docker-env) && make build |