开发者学堂课程【5分钟玩转阿里云容器服务:ASK 运行Job 任务】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1038/detail/17352
ASK 运行 Job 任务
今天我们带大家玩转的是 ASK 运行 Job 任务
现实中有很多短暂的一次性任务的场景,如CI/CD任务、数据计算任务、视频转码、发送邮件、定时任务等。因为有一次运行,运完即停的特点.非常适合使用ASK,无需预留资源,按需使用,避免闲置进而降低成本。
下面我们就来演示一下在ASK上运行Job任务。
首先创建1个ASK集群,和上节课程一样,创建1个使用企业安全组的Pro版ASK集群,并确保vSwitch有足够的IP容量,具体创建过程这里不再赘述。
大家如果有疑问可以回看上一节。现在集群已经准备好,首先依然是配置kubectl,因为这节课程示例有服务访问,先安装coreDNS,进入运维管理->组件管理->网络->CoreDNS->安装,等待安装完成。演示之前,我们先介绍演示程序。
以上实例模拟一个数据计算任务。我们通过1个Job并行运行500Pod,从中心服务获取任务并执行,执行完成后将结果返回给中心服务。先观察中心服务程序的代码,v~/Downloads/core$ vi main.go,实现了一个计数器类型。
有3个方法,Get()获取当前值,Inc()计入器+1,Swap()设置为指定值。接下来定义2个计数器,分别用于给任务和任务完成计数。
500Pod运行完成时,2个计数器应该都是500。
下面主流程main函数中定义了4个接口,第1个-创建任务,用于模拟给调用者分发任务,即为简单的返回任务ID。第2个-完成任务,用于模拟保存任务执行结果,每调用1次完成计数器就会+1。第3个-获取任务完成数,返回任务完成数计数器当前值。
第4个-重置,用于给2个计数器清零。程序启动后在8080端口监听。接着部署这个服务,这个服务本身有2个调用方,一个是集群内Job任务对应的Pod,另一个是在主机上运行一个脚本程序,来实时查看任务完成情况。所以需要给中心服务部署2个Service,1个ClusterIP型,1个LoadBalance型。
接着复制,工作负载->无状态->创建 接下来,我们再看Job任务的manifest。
注意3点:
1、同上节课程一样开启 lmageCache。
2、ASK有针对Job任务专门优化,可以通过 Pod Annotation,ECI网络配置来启用,配置为“nat_vpc”,表明Pod不能访问公网,只能访问VPC网络。
3、这里我们设置500并行运行。500次完成数,查看 Worker 的工作内容,先获取task执行,最后将结果发送到 server 端,将 Job 内容保存为 Worker 的 yaml。
为了能看到整个任务完成过程,写了一段 Shell 脚本,首先提交 Job 任务,然后记录时间,后面每隔1s,查询打印当前计数及经过的时间,这里访问的IP地址,换成前面创建的 LoadBalancer 型,Service 的公网访问地址。
接着运行,复制->粘贴->运行 接着看到Job任务很快完成。通过这节课程,我们了解到如何在 ASK 上优雅的运行Job任务。
如果大家对 Job 任务,还有更复杂的编排需求,可以使用 Argo、Tekton等开源工具。
今天的课程就到这里,如果您有什么问题请在评论区留言,下期课程,我们将用5分钟带你玩转 ASK 的成本优势,记得收看。