Cloud Foundry 组件

本文简单介绍以下内容:


Cloud Foundry 组件概述

Cloud Foundry 组件包括了一个自服务的应用执行引擎、一个用于应用部署和生命周期管理的自动化引擎、一个脚本命令行接口(CLI)、以及与开发工具的集成以简化部署过程。Cloud Foundry 有一个开放的架构,其中包括一个用于添加框架的 buildpack 机制、应用服务接口和云提供商接口(CPI)。

Cloud Foundry 组件

路由

Router

Router 将传入的流量路由到适当的组件,要么是一个Cloud Controller 组件,要么是在Diego Cell 上运行的托管应用。

Router 定期查询 Diego Bulletin Board System(BBS),以确定每个应用当前运行的 cell 和容器。使用这些信息,Router 根据每个cell 虚拟机(VM)的IP地址和 cell 容器的主机端端口号重新计算新的路由表。

认证

OAuth2 Server (UAA) 和 Login Server

OAuth2 Server (UAA) 和 Login Server 一起工作以提供身份管理。

应用生命周期

Cloud Controller 和 Diego Brain

Cloud Controller (CC) 指导应用的部署。为了将一个应用发布到 Cloud Foundry 上,需要target Cloud Controller。然后,Cloud Controller 通过CC-Bridge 组件将 Diego Brain 引导到协调各个Diego cell 来stage和运行应用。

Cloud Controller 还维护orgs、spaces、user roles、services 等的记录。

nsync、BBS 和 Cell Reps

为了使应用可用,云部署必须不断地监控它们的状态,并将它们与预期的状态进行协调,并根据需要启动和停止进程。

Cloud Foundry 组件

nsync、BBS和Cell Rep组件一起工作在一个链上,以保持应用的运行。一端是用户,另一端是在广泛分布的vm上运行的应用实例,它们可能会崩溃或不可用。

  • 当用户scale应用时,nsync会从Cloud Controller 收到一条消息,它会将实例的数量写入Diego BBS数据库的DesiredLRP中。
  • BBS使用它的convergence进程来监控DesiredLRP和ActualLRP的值。它将启动或杀死应用实例,以确保ActualLRP数量与DesiredLRP数量匹配。
  • Cell Rep监视容器并提供ActualLRP值。

应用存储和执行

Blobstore

blobstore是大型二进制文件的存储库,Github无法轻松管理,因为Github是为代码设计的。Blobstore二进制文件包括:

  • 应用代码包
  • Buildpacks
  • Droplets

可以将blobstore配置为一个内部服务器或一个外部S3或与S3兼容的端点。

Diego Cell

应用实例、应用任务和staging任务都在Diego Cell VM 上作为Garden容器运行。Diego cell rep 组件管理这些容器的生命周期,并在它们中运行进程,将它们的状态报告给Diego BBS,并将它们的日志和指标发送给Loggregator。

服务

Service Brokers

应用通常依赖于诸如数据库或第三方SaaS提供商之类的服务。当开发人员提供服务并将服务绑定到应用时,该服务的service broker 负责提供服务实例。

通信

Consul 和 BBS

Cloud Foundry组件虚机内部通过HTTP和HTTPS协议相互通信,共享存储在两个位置的临时消息和数据:

  • Consul server 存储较长期的控制数据,例如组件IP地址和分布式锁,这些锁可以防止组件复制操作。
  • Diego 的Bulletin Board System (BBS)存储了更频繁的更新和一次性数据,如cell和应用状态、未分配的工作和心跳消息。BBS在MySQL中存储数据,使用MySQL驱动程序。

route-emitter组件使用NATS协议将最新的路由表广播到router。

指标和日志

Loggregator

Loggregator (log aggregator)系统将应用日志记录给开发人员。

Metrics Collector

Metrics Collector 从组件收集指标和统计信息。操作人员可以使用这些信息来监控Cloud Foundry 的部署。

Cloud Foundry使用GitHub上的git系统来版本控制源代码、buildpack、文档和其他资源。平台上的开发人员也可以使用GitHub用于自己的应用、自定义配置和其他资源。为了存储大型二进制文件,例如droplets,CF维护一个内部或外部的blobstore。为了存储和共享临时信息,例如内部组件状态,CF使用MySQL、Consul和etcd。