【Cloud Foundry】Cloud Foundry学习(五)——Cloud Controller

概述

Cloud Controller负责管理应用程序的生命周期。当开发者将一个应用发布到Cloud Foundry时也就是指发布到了Cloud Controller中,CC将存储原始应用程序部分,并创建一个记录来追踪应用程序的数据、并且通知DEA打包运行应用。CC还会保存orgs、spaces、services、service实例、user角色等信息。

架构

Cloud_Controller_ng架构图

从ccng架构图中可以看出ccng可以分为以下多个模块:

  • DEA模块,主要负责与DEA组件进行交互;
  • Stager模块,主要负责与DEA组件的staging部分进行交互;
  • Blobstore模块,主要负责创建一个blobstore的存储,以供Cloud Foundry存储应用所需的静态文件;
  • HealthManager(HM)模块,主要负责与HealthManager组件进行交互;
  • CCDB模块,负责维护cloud_controller的数据库;
  • collector_registrar模块,负责作为component向Collector组件注册;
  • router_registrar模块,负责将cloud controller组件的域名注册至Router组件;
  • legacy_api部分,负责接管ccng关于info,bulk以及services等的RESTful请求;
  • 其他部分。

功能:

Cloud Controller是CloudFoundry的管理模块。主要工作包括:

a)     对apps的增删改读;

b)     启动、停止应用程序(通过DEA);

c)      Stagingapps(把apps打包成一个droplet,通过Stager);

d)     修改应用程序运行环境,包括instance、mem等等;

e)     管理service,包括service与app的绑定等;

f)      Cloud环境的管理;

g)     修改Cloud的用户信息(通过UAA,ACM);

h)     查看CloudFoundry,以及每一个app的log信息。

这似乎有点复杂,但简单的说,可以很简单:就是与VMC和STS交互的服务器端。VMC和STS与CloudFoundry通信采用的是restful接口,另一方面Cloud Controller是一个典型的Ruby on Rails项目,从VMC或者STS接到JSON格式的协议,然后写入Cloud ControllerDatabase,并发消息到各模快去控制管理整个云。

我们以部署一个App到CloudFoundry为例,在我们在敲完那条简单的push命令后,VMC开始工作,在做完一轮的用户鉴权、查看所部署的apps数量是否超过预定数额,问了一堆相关app的问题后,需要发4个指令:

a)     发一个POST到“apps”,创建一个app;

b)     发一个PUT到“apps/:name/application”,上传app;

c)      发一个GET到“apps/:name/”,取得app状态,看看是否已经启动;

d)     如果没有启动,发一个PUT到“apps/:name/”,使其启动。

第一版的CloudController是基于Ruby On Rails的,在新版中,为了与CloudFoundry其他模块一致,并且让架构更加简单,CloudController用Sinatra进行了重写,并且加入了更多的模块去细化CloudController的工作。

另外一个重要的改进是,第一个版本的Droplet是通过NFS共享的,但这样会带来安全、性能等问题,而新版中进行了两大改进:

a)     移除NFS,采用自己开发的,简单的blobstore来存放Droplet;

b)     为Ruby项目进行了优化,把常用的Gem保存在package cache里面。所以在打包Ruby项目的时候不需要到公网上下载Gem文件,而是从CloudFoundry内部的Cache获得,大大加速了Stage过程。

随着CloudFoundry的逐渐成熟,权限管理功能在新的版本进行了很大的加强,在原有的用户模型基础上,加入了组织、用户空间的概念。

用户模型的认证是由UAA模块实现的,它可以与企业已有的认证系统进行整合,例如LDAP,CAS等;鉴权是由ACM模块实现的。

上图示例了一个用户访问CloudController的API的过程。我们可以分别看到UAA与ACM模块在一套鉴权流程各自扮演的角色。

时间: 2024-10-07 08:10:41

【Cloud Foundry】Cloud Foundry学习(五)——Cloud Controller的相关文章

Beaglebone Back学习五(PWM测试)

PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2Using PWM on the Beaglebone Black 3 Beaglebone Coding 101: Buttons and PWM 4 Using PWM outputs 5 beaglebone-black-cpp-PWM 6 Enabling PWM Support in the kernel 7 Beaglebone Back学习五(PWM测试

TweenMax动画库学习(五)

目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            TweenMax动画库学习(四)            TweenMax动画库学习(五)  

NodeJS学习五 之网页显示

我们新建一个Server.js. 然后运行cmd 找到server.js 路径.  node server.js 浏览器中输入http://localhost:8888/ 你会发现,网页上出现了 Hello World NodeJS学习五 之网页显示,布布扣,bubuko.com

Cmdlet开发与学习(五)

Parameter       在声明cmdlet参数的时候,我们使用了Parameter标识符,在这个标识符中,有些参数需要了解到. 强制参数 设置Mandatory=true即可. 对于强制参数,不管是在命令行中绑定,还是通过管道输入,在命令逻辑执行之前,它就必须绑定好.如果强制参数没有参数值的话,PowerShell会弹出对话框,要求用户提供参数值. 位置参数.       Position= n       有时,我们在使用Powershell的时候,发现仅仅是输入参数值,并没有指定具体

Objective C 快速入门学习五

<一>继承和多态 @class Complex 声明类(同C++) 子类函数成员 super 访问父类 同C++类似 1.通过继承 在子类中添加新方法 2.通过继承 在子类中添加新成员 3.通过继承 实现多态(实现比较简单,通过Id通用类型作为父类) 4.重载 5.抽象类abstract作用:创建子类更容易:提供了处理所有派生子类的公共接口:抽象方法制定了标准协议,规范子类必须实现. 6.通用类型id,编译时不会做类型检查,在运行时才会动态绑定具体类型,指出错误. 静态类型在编译阶段就会指出错

【git学习五】git基础之git分支

1.背景 最早用github的时候,我傻傻的问舍友大神,git里面的branch是干什么的,他用了很直白的解释,我至今还记得."branch就是你可以自己建立一个分支,随便乱搞而不影响整个项目".git分支应该是git最nb的特色吧,分支的建立和合并都十分方便. 大体的原理是这样的(图借用progit),比如说我们有一个master,还有一个分支是testing,git用head指针标记哪个分支正在被执行操作. 2.分支管理 首先来说下我们的现有的master,它是一个readme文件

mongodb学习(五) 查询

1. 按条件查询: db.users.find({"name":"MM1"}) 2.find的第二个参数可以指定要返回的字段:这里1 表示要显示的字段,0 表示要剔除的字段 db.users.find({"name":"MM1"},{"name":1,"age":1}) db.users.find({"name":"MM1"},{"nam

springMVC3学习(五)--MultiActionController

Spring提供一个多动作控制器,使用它你可以将几个动作合并在一个控制器里,这样可以把功能组合在一起. 多动作控制器存在在一个单独的包中--org.springframework.web.mvc.multiaction--它能够将请求映射到方法名, 然后调用正确的方法.比如当你在一个控制器中有很多公共的功能,但是想多个入口到控制器使用不同的行为, 使用多动作控制器就特别方便. MultiActionController类实现 类定义:public class MultiActionControl

qt学习 (五) 登陆界面之连接按钮

登陆步骤是比对输入的账号密码与数据库中的表项目是否一致 一样,  跳出mainwidget对话框 不一样,跳出消息错误框 今天就是要进去, 因为进去以后是widget的窗口,所以把用来核对消息的数据库放在MAINwidget.cpp中, 再拿一个用户点击连接的子类 login.cpp, 就在这里面画用户登录账号密码textEdit 1 除了textEdit 基本都是button 慢慢加. 登录界面可以学的东西很多. 2 在widget.h文件中加入数据库所需要的头文件, #include <Qt

蜗牛—ORACLE基础之事务学习(五)

---------------事务---当执行到commit时 事务才算是完成,不然 会执行rollback操作. declare v_money acount.money%type:=1223; ex exception; begin update acount set money=money-v_money where id=1; raise ex; update acount set money=money+v_money where id=2; commit; exception whe