agent启动
主入口
src/slave/main.cpp
- 132-181:处理命令行参数
- 183:加载命令行中指定的
MESOS_
开头的环境变量 - 185-193:若只是输出帮助信息或者版本信息,输出后退出
- 202-212:若指定的master或者master_detector组合不正确,报错退出
- 215-240:初始化libprocess
- 254:生成slave的进程ID
- 259-265:初始化slave进程
- 267:LOG初始化
- 274:启动VersionProcess
- 276-292:处理防火墙。。。。。。。。。。。。
- 295-312:初始化模块,ModuleManager
- 315-329:创建所有的匿名模块
- 332-337:初始化HOOK(HooKManager)
- 341-354:初始化systemd。。。。。。。。。。
- 357-365:定义fetcher变量,初始化容器支持Containerizer::create
- 367-375:创建MasterDetector,MasterDetector::create
- 377-409:创建authorizer。。。。。。。。。。
- 412-422:创建resourceEstimator。。。。。。
- 424-431:创建qosController。。。。。。。。。。。。
- 436-448:创建新的Slave对象并启动
- 449:等待Slave对象结束
- 451-465:清理各种对象并退出
创建新的Slave对象
src/slave/slave.cpp
133-166:初始化Slave对象的各个变量
slave对象初始化
src/slave/slave.cpp/Slave::initialize
- 198-208:输出一些信息
- 210-313:准备cgroups。。。。。。。
- 创建与slave相关的cgroups
- 将所有线程移到创建的cgroups下
- 315-320:命令行指定的registration_backoff_factor不能大于REGISTER_RETRY_INTERVAL_MAX
- 322-376:处理认证相关信息
- 378-382:
- 384-397:。。。。。。。。。。。。。。。。
- 400-401:创建agent的工作目录
- 403-407:根据命令行。。。。。得到资源。。。。。。。。。。。。。。
- 410-414:对资源中的所有disk资源
- 417-427:若是PATH,创建它试试。。。。。。。
- 428-476:或是MOUNT,。。。。。。。。。
- 477-480:不支持的。。。。
- 483-486:从命令行获得属性。。。
- 489-507:处理hostname(调用net::getHostname(self().address.ip)
- 510-511:初始化slave info,设置hostname,端口
- 513-525:。。。。。。。。。。。
- 530:agent问题允许checkpoint
- 546-629:安装针对protobuf消息的处理函数(557行)
- 632-704:建立处理HTTP请求的函数对应关系
- 708-713:建立一个可调用的函数authorize,其中会调用dispatch将slavePid,principal分配给Slave::authorizeLogAccess函数执行)
- 717-733:处理log
- 736-740:检查是否有重连或恢复标志
- 745-755:安装Ctrl+C的处理函数
- 758-761:recovery。。。。。。。。。
容器初始化Containerizer::create
src/slave/containerizer/containerizer.cpp
参数:
- flags
- local
- fetcher
流程:
- 192-211:若flags中有external,则调用ExternalContainerizer::create并返回
- 215-221:从flags.containerizers中得到容器类型(docker/mesos)
- 224-271:处理与Nvidia GPU相关的isolation,volume等
- 279-317:对于每种容器类型,调用相应的创建函数(MesosContainerizer::create,DockerContainerizer::create,ExternalContainerizer::create)得到对象,并存放在变量containerizers中
- 319-321:若只定义一种类型,则直接返回
- 323-330:创建一个组合容器对象并返回ComposingContainerizer::create(containerizers)