Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10168773
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 云计算

2014-05-30 10:14:33

 

CloudFoundry CLI CF 解析

分类: CloudFoundry 180人阅读 评论(0) 收藏 举报

  cf push

   CLI 中的cf push 命令,需要调用cloud controller的6次rest接口

      app = create_app(get_inputs)//app的信息存入数据库

      map_route(app)// 保存app的route(subdomain+domain)信息保存到数据库

      create_services(app)   //为该应用创建service   service 如何使用?

      bind_services(app) // 将service 绑定到app,数据存入数据库,调用service gateway接口完成app与service绑定

      upload_app(app, path)//将应用上droplet传,根据是否使用nginx ,将应用放置在不同的目录


(使用nginx时,

  (1)首先将文件上传到/var/vcap/data/cloud_controller_ng/tmp/uploads (文件名举例 /var/vcap/data/cloud_controller_ng/tmp/uploads/0000000018)

  (2)然后启动AppBitsPackager 任务,将应用由本地存储转变为blobstore存储,存储到/var/vcap/nfs/shared/cc-packages 目录 并将文件名修改为为app的guid,,文件名举例

(/var/vcap/nfs/shared/cc-packages/d7/a3/d7a3eddb-d479-4cdc-b0e9-92d80ae3df76))

 

      (3)生成应用的package hash值,保存到数据库中               

     

start_app(app)

  (1)调用get "/staging/apps/:guid" 接口完成 从blobstore 下载应用信息

  Sequel::Model after_commit 回调函数,会在数据库发生变化时,调用,

  当app的状态发生变化时,判断是否需要stage,如果需要,启动stage

  \src\cloud_controller_ng\lib\cloud_controller\app_stager_task.rb  stage 函数

   1、保存app 的stage 的任务id,选择合适的dea进行stage

   2、发布staging.stop" 将该app之前的stage任务停止

   3、cc发布”消息 启动stage,dea 接受到该消息进行stage

   dea_next src\dea_next\lib\dea\responders\staging.rb  handle 函数完成处理

     里面包含一个订阅通知,会有多个response返回

src\dea_next\lib\dea\staging\staging_task.rb 中的start函数启动 stager 任务

部分函数解析

resolve_staging_setup函数

 1、准备workspace

  根据需要的内存,硬盘创建warden,配置warden的Ip,配置warden内的运行日志

resolve_staging

调用的函数

          promise_unpack_app,// warden 执行脚本下载应用信息到临时目录

           promise_unpack_buildpack_cache,

          //warden执行脚本下载buildpack_cache (目前未使用)

           promise_stage,

    //warden执行脚本/var/vcap/packages/dea_next/buildpacks/bin/run

  检测应用类型,进行compile,下载依赖包

           promise_pack_app,

     //warden 执行脚本,将应用+依赖包进行打包

           promise_copy_out,

     //将应用 从warden  copy到新的目录

           promise_save_droplet, // 保存droplet 到/var/vcap/data/dea_next/droplets

           promise_log_upload_started,// 将droplet上传到cloudcontroller (实际是保存到/var/vcap/nfs/shared/cc-droplets)

           promise_staging_info // 保存staging_info.yml 保存stage 信息


 (2)调用POST /staging/droplets/gudi 接口完成应用信息+依赖包信息保存在

/var/vcap/data/cloud_controller_ng/tmp/staged_droplet_uploads 然后将其保存到blobstore

/var/vcap/nfs/shared/cc-droplets

然后将本地文件删除

  (3)调用POST /staging/buildpack_cache/guid 接口完成 将依赖包保存到该路径

/var/vcap/data/cloud_controller_ng/tmp/staged_droplet_uploads然后将其保存到blobstore

    /var/vcap/nfs/shared/cc-droplets/buildpack_cache

   保存完成后,将本地的文件删除

 

当stage 完毕后,使用deaClient启动该应用,首先查找最优的DEA,CloudController指定DEA发送消息dea.#{dea_id}.start,DEA接收该应用的信息,调用CloudController的接口(/staging/droplets/guid/download\"),下载droplet到DEA

阅读(1060) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~