Apache Mesos(12)-使用Aurora创建计划任务
作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
Aurora不但可以部署应用程序,还可以创建计划任务。不过与Chronos不同的是,Aurora采用了一种更传统的方式来运行计划任务。它遵循Cron schedule,在其基础上构建。本篇我们就来看看Aurora的计划任务及对Aurora的管理。
管理计划任务
Aurora的计划任务管理有如下特点:
- 自动失败重试 - 如果一个Aurora Cron任务失败,可以自动重试一定的次数,它是由任务的
max_task_failures
的值决定的。 - 冲突策略 - 当一个Cron任务试图启动,但前一个实例还没有完成时,控制调度器的行为。它由设置任务的
cron_collision_policy
属性的值来控制的。该属性可能的值有KILL_EXISTING或CANCEL_NEW。 - 时区支持 - 此全集群的选项是由指定Aurora调度器的选项而不是某个任务的选项决定的。默认值为UTC,可以通过
-cron_timezone
配置选项设置。
更多信息请参阅官方文档。
创建Cron任务
使用Aurora DSL创建计划任务与创建普通任务十分类似,只是加入了一些Cron的属性。下面给出了一个示例,可以发现跟前一篇普通任务的DSL相比较,在job对象里多了cron_schedule
属性,如下:
可以使用下面的命令来提交该计划任务:
$ aurora cron schedule aurora-cluster/www-data/prod/simple-sleep simple-sleep-cron.aurora
该命令在Aurora的调度器中创建了一个Cron任务,并且根据给定的时间表(每5分钟)执行任务。Aurora也允许使用Aurora命令行客户端在需要时手动执行命令,例如:
$ aurora cron start aurora-cluster/www-data/prod/simple-sleep
更多的Cron子命令信息,可以通过aurora cron -h
查询。
创建基于Docker的Cron任务
Aurora的基于Docker的Cron任务与普通的基于Docker的任务也非常类似,需要在DSL中增加cron_schedule
字段。具体示例可以参考daily-weather-cron.aurora。
管理Aurora
作为系统管理员,Aurora提供了一种方式来维护用户认证和授权,设置资源定额,甚至可以设置调度策略以便Mesos slave可以安全得下线来进行维护。
管理用户和配额
Aurora的一个优点是支持多用户。它使用了Apache Shiro安全框架提供对用户的认证和授权。Shiro允许通过多种数据源进行认证,支持LDAP和Active Directory,而且它的可插拔特性允许用户自己实施一定的安全策略。
目前Aurora提供两种认证机制:HTTP Basic Authentication和HTTP SPNEGO Authentication (Kerberos)。
认证
这里我们只介绍HTTP Basic Authentication。
在Aurora schedule的机器上,需要如下的Schedule命令行参数:
-http_authentication_mechanism=BASIC
-shiro_realm_modules=INI_AUTHNZ
-shiro_ini_path=path/to/security.ini
上面的security.ini文件,类似于:
在客户端上,需要创建~/.netrc文件,将hostname和认证信息添加进去:
授权
在Schedule机器上,可以使用INI配置文件来定义角色及安全控制。首先,需要如下的Schedule命令行参数,如果是CentOS7系统上通过rpm或域名安装的Aurora,可以通过修改/etc/sysconfig/aurora-scheduler文件实现:
-http_authentication_mechanism=BASIC
-shiro_ini_path=path/to/security.ini
然后在security.ini文件中添加角色:
上面的配置文件授权了用户Alice(密码为secret)admin角色,Bob(密码为secret)授权了accounting角色,而Carol(密码为secret)没有指定任何角色。
管理资源配额
在Aurora中,生产级别的任务允许抢占非生产级别的任务。生产级别的任务可以结束低优先级的非生产任务,如果它需要额外的集群资源的话。这允许在Aurora集群中可以存在多种环境(development,staging,production等)而不会有影响到生产负载的风险。
生产任务需要资源配额,可以给该任务保留一定的资源。使用Aurora admin client有两个子命令用于设置和增加配额:
aurora-admin set_quota <role> <cpus> <mem> <disk>
aurora-admin increase_quota <role> <cpus> <mem> <disk>
如果设置了认证和授权,使用上面命令的用户必须具有admin角色和accounting角色。
作为Aurora用户,可以查询资源配额:
aurora quota get devcluster/example_role
进行维护
Aurora中的一个管理功能是对集群中的一组机器进行计划的维护。这允许用户将某台机器置为维护模式,将此节点上的任务重新分配到集群中的其它节点,在进行维护任务后,可以将该机器恢复到普通的服务模式。此功能是通过Aurora admin客户端设置的,包括以下的一些子命令:
- host_deactivate - 将一台机器或一组机器置为维护模式。
- host_drain - 将一台或一组机器上的任务结束,阻止调度器将任何新任务调度到该机器上。
- host_activate - 将一台或一组机器恢复为普通调度模式。
- host_status - 查询一台或一组机器的维护状态信息。
使用Aurora admin客户端,通过以下格式使用上述子命令:
$ aurora-admin <subcommand> --hosts=host.example.com[, ...] <cluster_name>
一些子命令还有其它的选项可用。完整的使用信息可通过运行aurora-admin help <subcommand>
得到。