持久化卷(Persistent Volume)
Mesos提供了一种机制可以从磁盘资源创建一个持久化卷。因此,启动任务时,可以为这个任务创建一个位于任务容器之外的持久化卷,当任务失败或完成时,这个卷仍然存在。当任务退出时,这个任务占用的资源包括为之创建的持久化卷被归还给框架,因此,框架可以再次启动这个任务,或者基于这些资源启动一个恢复任务,甚至以之前任务的输出作为输入启动一个新的任务。持久化卷功能使得像HDFS、Cassandra等有状态服务可以将数据直接存储在由Mesos管理的存储方案中,而不必考虑额外的存储方案。
使用
持久化卷只能在预留资源上创建,预留资源既可以是静态预留也可以是动态预留的。一个在动态预留资源上创建的持久化卷,除非明确的销毁这个卷,否则将一直保留。这种处理方案可以降低偶发错误,比如,一个存在敏感数据的持久化卷如果被重新分配给另一个框架,就可能造成数据泄露。类似的,如果当前存在一个活跃的任务正在使用一个持久化卷,那么它是不能被销毁的。请参考“资源预留”章节查看Mesos中的资源预留机制。
通过预留多个磁盘资源(multiple disk resources),持久化卷也可以在隔离的和辅助的磁盘上创建。
持久化卷可以由操作员或授权的框架来创建。默认情况下,框架和操作员可以为任意角色创建持久化卷,也可以销毁任意持久化卷。Mesos授权服务将上述行为限制给特定的角色进行操作。框架或操作者执行这些操作时必须提供可证明自己的principal。要对预留、取消预留、创建和销毁操作使用授权机制,Mesos的Master节点必须配置适当的ACLs,详细信息请参考相关文档。
框架在接收到资源供给时,调用acceptOffers接口,将Offer::Operation::Create
和 Offer::Operation::Destroy
消息作为响应回传给Mesos。
操作员通过Master提供的/create-volumes
和 /destroy-volumes
两个HTTP服务管理持久化卷。
当一个持久化卷被销毁时,该卷上的所有数据将从Agent节点的文件系统移除。注意,在挂载(Mount)磁盘上创建的持久化卷,根(root)目录是不会被移除的,因为它通常被用作独立存储设备的挂载点。