Cloud Foundry:主要组件介绍

Cloud Foundry

Cloud Foundry(以下称为cf)是PaaS中的一种,其提供抽象IaaS提供平台服务。可以用一句话总结cf的特性:“这是我的代码,给我在云平台上跑。不要告诉我其他细节上的问题。”

Here is my source code, run it one the cloud platform for me. I do not care how.

为了实现与IaaS的解耦,cf并不直接与IaaS交互,而是通过扩展运行的集群环境中的service和DEA组件(新版本由Diego替代),实现动态扩展和管理。cf的组件众多,下面依据《Cloud Foundry: The Definitive Guide》以及官方文档介绍cf主要的功能组件。

cf_architecture_block

Routing

Router(路由)主要包括:GoRouter、TCPRouter、External Load Balancer。所有基于http的流量首先从外部负载均衡(External Load Balancer)进入,然后负载均衡再将请求指向GoRouter。

(Go)Router起到反向代理的功能,将所有来路HTTP流量指路到合适的组件(比如Cloud Controller、运行在Diego cell上的应用)。路由采用round-robin的方式将请求发送给后续组件。并且路由还会周期性地向Diego BBS(Bulletin Board System)查询每个应用当前运行的cells、containers,以便维护自身的路由表。路由表以cell's IP以及host-side port for the cell's containers 的形式构成。

Auth and User Management

cf使用UAA组件(user account and authentication)作为安全验证组件,其管理开发者、客户、应用的访问和身份验证。

  • OAuth2 authorization(授权访问):请求获取资源时通过访问凭证(tokens)进行授权

  • authentication(身份认证):使用凭证(credentials)对用户身份存储和管理。

  • SSO:单点登录

  • endpoint manager:端点管理

此外,用户身份存储还分为:内部存储和外部存储并通过LDAP、SAML访问。

App LifeCycle and System State

应用生命周期以及系统状态管理是Cloud Controller组件(以下简称cc)的功能。

cc services

cc对开发者暴露REST API以提供应用的部署功能(代替原来的DEA,Droplet Execution Agent)。当用户向cf提交应用后,cc会通过CC-Brige连接Diego Brain。Diego Brain会协助Diego cells进行软件的stage(部署到类生产环节环境)和run。

cc会使用两个组件进行系统状态的存储:一个是Blobstore,一个是ccdb(Cloud Controller Database)。

Blobstore用来存储大型二进制文件,例如:

  • 源码包
  • 资源文件
  • buildpacks
  • Droplets(pack + staging) and other container images

而ccdb存储cc的元数据。

此外还有提一下cc的监控同步组件。在cf中的任务分为Tasks(一次性)和LRP(Long Running Processes,长期执行)的概。对于LRP,我们需要依据用户调用所设置的实例数量,实时管理应用实例。

监控和同步的组件有nsync, BBS, and Cell Reps,进行持续监控状态并reconcile app(代替原来的HM9000组件)。

  • nsync:收到cc消息,更新DesiredLRP
  • bbs:launch or kill 实例,将ActualLRP匹配DesiredLRP
  • cell rep:监控容器并提供AcutalLRP

App exec

cf中执行应用和tasks的组件为上面提及的Diego。Diego的意思是用go语言实现的DEA组件,可以说是cf的弹性运行时(elastic runtime)子系统,位于cf的核心。提供应用或者tasks的制定、编排和布局(scheduling、orchestration and placement)。

Garden是cf的容器(container)管理API。

Messaging

消息通讯走的是http或者https协议。有两个组件进行消息的存储。

一个是consul:存储长期存活的;另一个是上述监控同步使用的BBS(Bulletin Board System),存储的是实时更新的应用状态数据。

系统的路由触发器组件依然使用NATS Message Bus传输,用来广播最新的路由表。

Metrics and Logging

将系统组件的性能指标、应用日志聚合在一起的组件,名叫Loggregator(log aggregator)。Loggregator通过每个vm上部署的metron agent组件收集指标和日志。

Loggregator内部使用Firehose将日志聚合成结构化、易于使用的格式;使用Nzzle进行监控数据的分析。而Loggegator最后可以通过stream的形式将日志数据发送给开发者。

Others

Stack:拥有rootfs文件系统,与Droplets一起使用;Stack提供Container运行应用需要的文件系统。

Service Brokers:该组件与cc交互,支持第三方或者用户自己开发的服务。