Apache Mesos(12)-使用Aurora创建计划任务

目录
  1. 管理计划任务
    1. 创建Cron任务
    2. 创建基于Docker的Cron任务
  2. 管理Aurora
    1. 管理用户和配额
      1. 认证
      2. 授权
      3. 管理资源配额
    2. 进行维护

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处: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属性,如下:

simple-sleep-cron.aurora
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# simple-sleep-cron.aurora
# A simple cron job that sleeps for 60 seconds and returns.
# vim: set ft=python:
sleep = Process(
name='simple-sleep',
cmdline="""
echo "At the tone the time will be: $(date +'%r %Z')"
echo "Sleeping for 60 seconds."
sleep 60
"""
)
task = Task(
processes=[sleep],
resources=Resources(cpu=0.1, ram=16*MB, disk=1*MB)
)
jobs = [
Job(
cluster='aurora-cluster',
role='www-data',
environment='prod',
name='simple-sleep',
cron_schedule='*/5 * * * *',
task=task
)
]

可以使用下面的命令来提交该计划任务:

$ 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文件,类似于:

security.ini
1
2
3
4
5
[users]
sally = apple, admin
[roles]
admin = *

在客户端上,需要创建~/.netrc文件,将hostname和认证信息添加进去:

.netrc
1
2
3
machine aurora.example.com
login sally
password apple

授权

在Schedule机器上,可以使用INI配置文件来定义角色及安全控制。首先,需要如下的Schedule命令行参数,如果是CentOS7系统上通过rpm或域名安装的Aurora,可以通过修改/etc/sysconfig/aurora-scheduler文件实现:

-http_authentication_mechanism=BASIC
-shiro_ini_path=path/to/security.ini

然后在security.ini文件中添加角色:

security.ini
1
2
3
4
5
6
7
[users]
alice = secret, admin
bob = secret, accounting
carol = secret
[roles]
admin = *
accounting = thirft.AuroraAdmin:setQuota

上面的配置文件授权了用户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>得到。