在Cloud Foundry中,当应用开发者的应用由Cloud Foundry的组件DEA来运行时,应用的资源隔离与控制显得尤为重要,而warden的存在很好得解决了这个问题。
Cloud Foundry中warden项目的首要目的是提供一套简易的接口来管理隔离的环境,这些隔离的环境可以被称为“容器”,他们可以在CPU使用,内存使用,磁盘使用以及设备访问权限方面做相应的限制。
本文将从四个方面进行探讨分析warden的实现:
- warden的功能介绍及框架实现
- warden框架的对外接口及实现
- warden框架的内部模块及实现
- warden的运行示例
warden的功能介绍及框架实现
warden功能介绍
由于Cloud Foundry v1中DEA组件运行应用程序时,自身设计存在一定的缺陷,即同一个DEA上运行的应用不能很好的实现运行过程中资源的隔离与限制,故在Cloud Foundry v2中引入了warden这一模块。
warden专门接收DEA组件发送的关于应用的管理请求,在处理这部分管理请求时,借助轻量级虚拟化技术,将宿主机操作系统进行虚拟化,在容器内部执行请求的具体内容。warden的具体使用效果为应用程序之间互不感知,资源间完成隔离,各自的资源使用存在上限。假设Cloud Foundry不存在应用程序资源的隔离与限制机制,则在同一个DEA上运行的多个应用程序,在负载增加的时候,会出现竭力竞争资源的情况,当资源消耗殆尽时,大大降低应用程序的可用性与安全性。
在资源隔离与限制方面,warden主要提供3个维度的用户自定义隔离与限制:内存、磁盘、网络带宽;另外warden还提供以下维度的资源隔离与限制,但仅提供默认值,不提供用户自定义设置:CPU、CPUACCT、Devices。
同时,warden作为一个虚拟化容器,还提供众多的API命令,供用户完成对warden container的管理。主要的命令如下:copy in、copy out、create、destroy、echo、error 、info、limit_bandwidth、limit_disk、limit_memory、limit_cpu、link 、list、message、net in、net out、ping、run、spawn、stop和stream等 。这些命令的功能介绍可以简单参见:
James Bayer对于warden与docker的比较文档。
warden框架实现
在涉及warden框架的具体实现时,需要先申明和warden相关的多个概念:
- warden:在Cloud Foundry中实现应用资源隔离与控制的框架,其中包括,warden_client、warden_server、warden_protocol和warden container;
- warden server:warden框架中server端的实现,主要负责接收client端请求,以及请求的处理执行;
- warden client:warden框架中client端的实现,被Cloud Foundry中被dea_ng组件调用ÿ