原文:https://blog.csdn.net/little_crab_0924/article/details/78022391
Cloud Foundry 组件概述
Cloud Foundry 组件包括了一个自服务的应用执行引擎、一个用于应用部署和生命周期管理的自动化引擎、一个脚本命令行接口(CLI)、以及与开发工具的集成以简化部署过程。Cloud Foundry 有一个开放的架构,其中包括一个用于添加框架的 buildpack 机制、应用服务接口和云提供商接口(CPI)。
路由
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
为了使应用可用,云部署必须不断地监控它们的状态,并将它们与预期的状态进行协调,并根据需要启动和停止进程。
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。