1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 工作流workflow任务调度工具argo

工作流workflow任务调度工具argo

时间:2022-03-14 19:40:24

相关推荐

工作流workflow任务调度工具argo

转载请注明出处:工作流workflow任务调度工具argo

argo简介和原理

argo是一个基于 kubernetes CRD(自定义资源) 实现的一个 Workflow(工作流) 开源工具,基于 kubernetes 的调度能力实现了工作流的控制和任务的运行。

argo官网

github源码地址

一种资源就是Kubernetes API中的一个端点,它存储着某种API 对象的集合。

例如,内建的pods资源包含Pod对象的集合。

自定义资源CRD是用来扩展kubernetes的功能的,可以自定义一些api的实现。

在一个运行中的集群内,自定义资源可以通过动态注册出现和消失,集群管理员可以独立于集群本身更新自定义资源。

一旦安装了自定义资源,用户就可以通过kubectl创建和访问他的对象,就像操作内建资源pods那样。

如下就是一个自定义资源的例子:

例如,如果将以下的CRD保存到resourcedefinition.yaml中:apiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata:# name must match the spec fields below, and be in the form: <plural>.<group>name: crontabs.spec:# group name to use for REST API: /apis/<group>/<version>group: # version name to use for REST API: /apis/<group>/<version>version: v1# either Namespaced or Clusterscope: Namespacednames:# plural name to be used in the URL: /apis/<group>/<version>/<plural>plural: crontabs# singular name to be used as an alias on the CLI and for displaysingular: crontab# kind is normally the CamelCased singular type. Your resource manifests use this.kind: CronTab# shortNames allow shorter string to match your resource on the CLIshortNames:- ct

创建它:

kubectl create -f resourcedefinition.yaml

然后一个新的区分命名空间的RESTful API 端点被创建了:

/apis//v1/namespaces/*/crontabs/...

然后可以使用此端点URL来创建和管理自定义对象。 这些对象的kind就是你在上面创建的CRD中指定的CronTab对象。

自定义资源是对Kubernetes API的扩展,kubernetes中的每个资源都是一个API对象的集合,例如我们在YAML文件里定义的那些spec都是对kubernetes中的资源对象的定义。

Kubernetes1.6版本中包含一个内建的资源叫做CRD(CustomResourceDefinition),可以用它来创建自定义资源,但该资源在kubernetes1.7中版本已被TRD(ThirdPartyResource)取代。在1.8版本中又启用了CustomResourceDefinition。

更多自定义资源的信息可参考:

自定义资源

使用CRD(CustomResourceDefinitions)扩展Kubernetes API

argo就是根据CRD自定义的一个扩展功能,主要实现工作流的控制。是一个任务调度的工具,同时提供了一个 UI 来方便我们查看任务的进程和详情等。

如图:

argo的特点

1、argo是基于容器的,不需要传统的虚拟机机系统和环境

2、argo是云无关的,可以在任意的k8s集群中运行

3、argo能定制计算资源,让云端的资源在我们的掌握之中

谁在使用argo

Adobe

BlackRock

CoreFiling

Cyrus Biotechnology

Datadog

Gladly

Google

Interline Technologies

Intuit

Localytics

NVIDIA

#开始使用

准备环境

1、需要运行在Kubernetes 1.9或者1.9+的版本之上

2、下载有kubectl命令行客户端

3、配置好kubeconfig文件(配置文件默认路径~/.kube/config)

详情参考文章:

kubernetes—CentOS7安装kubernetes1.11.2图文完整版

##下载安装argo

Mac环境:

brew install argoproj/tap/argo

Linux环境

curl -sSL -o /usr/local/bin/argo /argoproj/argo/releases/download/v2.2.0/argo-linux-amd64chmod +x /usr/local/bin/argo

安装控制器和UI

使用命令

kubectl create ns argokubectl apply -n argo -f /argoproj/argo/v2.2.0/manifests/install.yaml

如果我们的k8s集群式运行在GKE (Google Kubernetes Engine)上的,则还需要授权账号可以创造集群的角色使用命令如下,非GKE集群不需要运行:

kubectl create clusterrolebinding YOURNAME-cluster-admin-binding --clusterrole=cluster-admin --user=YOUREMAIL@

配置服务账户用于运行workflows

当集群是基于RBAC(Role-Based Access Control,基于角色的访问控制)时,默认账户有很多的限制,比如不能支持组件,输出等等。

执行以下命令授权默认的服务账户在默认的namespace中拥有admin的权限

kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default

或者你可以在提交workflow时指定服务账户,使用命令如下:

argo submit --serviceaccount <name>

尝试运行argo例子

这是一个类似于helloword的小例子,使用命令如下:

argo submit --watch /argoproj/argo/master/examples/hello-world.yamlargo submit --watch /argoproj/argo/master/examples/coinflip.yamlargo submit --watch /argoproj/argo/master/examples/loops-maps.yamlargo listargo get xxx-workflow-name-xxxargo logs xxx-pod-name-xxx #from get command above

我们也可以使用kubectl命令进行workflow的提交,不过相对于argo命令来说,kubectl命令缺少了很多功能,比如yaml的验证,workflow的可视化,参数验证,重试和重新提交等等。

使用命令如下:

kubectl create -f /argoproj/argo/master/examples/hello-world.yamlkubectl get wfkubectl get wf hello-world-xxxkubectl get po --selector=workflows.argoproj.io/workflow=hello-world-xxx --show-allkubectl logs hello-world-yyy -c main

公开Argo的UI

默认情况下argo的UI服务是没对外网开放的,需要进行设置对外公布,有三种方法

方法一:kubectl port-forward

使用命令

kubectl -n argo port-forward deployment/argo-ui 8001:8001

则 在可以使用 链接访问: http://127.0.0.1:8001

方式二:kubectl proxy

使用命令

kubectl proxy

则使用如下链接可以访问:

http://127.0.0.1:8001/api/v1/namespaces/argo/services/argo-ui/proxy/

注意,组件下载和web控制台不支持使用这种方法

方法三:使用loadBalancer

把argo-ui service 设置成 loadBalancer类型的服务

使用命令

kubectl patch svc argo-ui -n argo -p '{"spec": {"type": "LoadBalancer"}}'

等待分配外网地址

使用命令查看如下:

kubectl get svc argo-ui -n argoNAMETYPE CLUSTER-IPEXTERNAL-IPPORT(S) AGEargo-ui LoadBalancer 10.19.255.205 35.197.49.167 8080:31768/TCP 1m

访问方式

35.197.49.167:8080

35.197.49.167对应EXTERNAL-IP

8080对应PORT(S)

还有一种是分配的域名

如果EXTERNAL-IP比较长会显示省略号如下:

zhangxiaofans-MacBook-Pro:report-api joe$ kubectl get svc argo-ui -n argoNAMETYPE CLUSTER-IPEXTERNAL-IP PORT(S) AGEargo-ui LoadBalancer 10.19.255.205a4c2851a9b3fd... 80:31768/TCP 10m

解决方法使用describe

zhangxiaofans-MacBook-Pro:report-api joe$ kubectl describe svc argo-ui -n argoName: argo-uiNamespace:argoLabels: <none>Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"argo-ui","namespace":"argo"},"spec":{"ports":[{"port":80,"targetPort":8001}],"...Selector: app=argo-uiType: LoadBalancerIP: 10.19.255.205LoadBalancer Ingress:a4c2851a9b3fd11efassadfdsads--northwest-1.Port: <unset> 80/TCPTargetPort:8001/TCPNodePort: <unset> 31768/TCPEndpoints:10.19.255.205:8001Session Affinity: NoneExternal Traffic Policy: ClusterEvents:Type ReasonAge FromMessage---- ---------- -----------Normal Type 9m service-controller ClusterIP -> LoadBalancerNormal EnsuringLoadBalancer 9m service-controller Ensuring load balancerNormal EnsuredLoadBalancer 9m service-controller Ensured load balancerzhangxiaofans-MacBook-Pro:report-api joe$

如果输出中Port是80则不需要带端口,直接使用LoadBalancer Ingress访问即可:

a4c2851a9b3fd11efassadfdsads--northwest-1.

注意,在Minikube集群中,不会自动获取到外网ip,会一直显示pending。 使用如下命令确定argo的ui链接:

minikube service -n argo --url argo-ui

怎么写工作流

更多使用示例

/p/40301198

capture the dependencies between tasks using a graph (DAG)

怎么配置组件(S3, Artifactory, HTTP, Git, raw)

/argoproj/argo/blob/master/ARTIFACT_REPO.md

转载请注明出处:工作流workflow任务调度工具argo

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。