Ploto quick start
介绍任务调度与执行框架Ploto的quick start. 目前可部署使用,源码待整理后开源。
Ploto整体架构
本文档目标
本文不会介绍Ploto的具体实现,而是介绍如何快速上手使用Ploto完成如下事项:
- 在Kubernetes集群中部署Ploto任务调度与执行框架
- 创建Task, DynamicExecutorPool自定义资源定义(Custom Resource Definition)
- 创建一系列的Task实例,和一个示例DynamicExecutorPool,然后ploto-controller会把这些task分配给DynamicExecutorPool管理的裸pod,pod中的应用容器消费任务(本例为打印task中的para)
前提条件
- 可用的kubernetes集群,建议版本>=1.16.3
步骤
1. 下载ploto-demo项目
ploto-demo中保存了本示例所需的yaml文件
1 | git clone https://github.com/xawei/ploto-demo.git |
2. 创建CRD和新建命名空间
1 | kubectl apply -f manifest/crds/ploto.io_dynamicexecutorpools.yaml |
查看CRD:
3. 创建默认资源池扩缩容算法的Webhook
1 | kubectl apply -f manifest/webhook/autoscaler-webhook-service.yaml |
4. 创建Ploto Controller
1 | kubectl apply -f manifest/controllers/ploto-controller.yaml |
查看ns ploto-system下的资源:
1 | kubectl get all -n ploto-system |
至此,我们已经完成了在kubernetes至少上部署了Ploto框架所必须的预备资源。下面再继续创建与业务相关的Task和DynamicExecutorPool自定义资源。
5. 创建自定义的Dynamic Executor Pool
准备创建一个DynamicExecutorPool,先查看一下我们定义的dep1.yaml:
1 | cat manifest/deps/dep-simple-logger.yaml |
1 | # manifest/deps/dep-simple-logger.yaml |
其中定义的container是我们的应用容器,持续监听本地任务文件,一旦任务文件存在,则会去读Task.Spec.Para中的数据,执行任务。
创建这个dynamic executor pool(简称dep):
1 | kubectl apply -f manifest/deps/dep-simple-logger.yaml |
可以查看目前dep的状态:
1 | kubectl get dep -o wide -n ploto-demo |
dep-simple-logger刚创建时,还没有executor pod,当ploto-controller监听到dep-simple-logger时,则为这个dep创建了2个pod( initialExecutor: 2)。
6. 创建task,并查看执行情况
manifest/tasks/中准备了6个task,我们查看其中一个task1.yaml,下面附上了注释:
1 | cat manifest/tasks/task1.yaml |
1 | apiVersion: "ploto.io/v1alpha1" |
创建这些task:
1 | kubectl apply -f manifest/tasks/ |
如上图所示,6个新创建的task,初始状态为Pending,等待调度关联到对应的executorPool管理的pod,由pod执行消费任务。
1 | kubectl get task -n ploto-demo |
task状态为Running后,等待manifest/deps/dep1.yaml中定义的simulate-exe-time启动参数值(单位秒)的时间后,可以看到部分task执行完成了(status: completed):
查看对应的executor pod,可以看到输出(消费task):
本例executor pod为简单地监听分配到的task任务,并打印task中的para参数。
ploto-controller会根据task的数量、执行情况,周期性地对dep管理的executor pod资源数量,在[minExecutor, maxExecutor]区间内做动态的扩缩容。默认为每一个周期需要的pod数量为上一周期的1.3倍。你也可以实现自定义的扩缩容webhook,在dep中配置。
等待所有任务执行完后,我们查看dep的状态,以及它所关联的pod。发现pod数量已缩容至dep-simple-loger实例中设置的最小值minExexutor: 2。
附: 清理ploto相关资源
1 | kubectl delete -f manifest/crds/ |
- 标题: Ploto quick start
- 作者: xawei
- 创建于 : 2021-04-13 14:52:41
- 更新于 : 2025-01-21 04:57:44
- 链接: https://xawei.xyz/2021/04/13/ploto-quick-start/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。