技术深度剖析
架构与工作流
BOSH Bootloader(bosh-bootloader)本质上是一个围绕Terraform的封装器,通过基于Go的CLI编排BOSH director的创建。核心工作流如下:
1. `bbl up`:用户运行此命令,并指定IaaS(例如`--iaas aws`)、区域以及可选的状态目录。该工具会生成一个Terraform计划,创建必要的IaaS资源:VPC、子网(公有和私有)、互联网网关、NAT网关、安全组、BOSH director虚拟机的IAM角色/策略,以及一个SSH密钥对。然后,它会应用这个计划。
2. BOSH Director虚拟机:基础设施就绪后,bosh-bootloader使用BOSH CLI将BOSH director虚拟机部署到新创建的网络中。它会上传stemcell(一个包含BOSH代理的基础操作系统镜像)、编译release,并配置director的manifest。
3. 状态管理:该工具维护一个状态文件(默认存储在本地目录,也可选择存储在S3存储桶中),用于跟踪Terraform状态和BOSH director凭据。这保证了操作的幂等性——重新运行`bbl up`会检测现有资源,仅进行必要的更改。
4. 拆除:`bbl destroy`会逆向整个过程,删除所有IaaS资源和BOSH director。
底层机制:Terraform与BOSH集成
Bosh-bootloader并非重新发明轮子。它依赖于两个久经考验的工具:
- Terraform:负责所有IaaS资源供应。该工具内置了针对AWS和GCP的预构建Terraform模板。这些模板经过版本控制,并针对特定Terraform版本进行了测试。对于AWS,模板会创建`aws_vpc`、`aws_subnet`、`aws_iam_role`、`aws_security_group`以及用于director虚拟机的`aws_instance`等资源。对于GCP,则会创建等效资源。
- BOSH CLI:负责部署director本身。Terraform完成后,bosh-bootloader会调用`bosh create-env`,并附带一个引用新创建IaaS资源(例如子网ID、安全组ID以及跳板机的公网IP)的manifest。
关键设计决策
1. 强约定网络:Bosh-bootloader强制使用特定的网络拓扑——一个包含公有和私有子网、NAT网关以及堡垒机/跳板机的VPC。对于大多数Cloud Foundry部署来说,这是一个合理的默认配置,但对于拥有现有网络基础设施或自定义路由需求的团队来说,这可能是一种限制。
2. 每个环境一个Director:该工具设计为每个状态目录仅管理一个BOSH director。这对于简单设置来说没问题,但大型组织通常为不同环境(开发、预发布、生产)或不同区域运行多个director,这就需要单独的状态目录或复杂的脚本。
3. Terraform状态锁定:该工具原生不支持Terraform状态锁定(例如通过AWS的DynamoDB)。如果多个团队成员同时对同一个状态文件运行`bbl up`,可能会导致状态损坏。
性能与基准测试
虽然bosh-bootloader本身不是一个对性能敏感的工具(它不常运行),但部署速度对CI/CD流水线和灾难恢复至关重要。我们在AWS(us-east-1)和GCP(us-central1)上使用默认设置测试了`bbl up`:
| IaaS | 总时间(分钟) | Terraform Apply(分钟) | BOSH Create-env(分钟) | 资源成本(每小时) |
|---|---|---|---|---|
| AWS(t3.medium director) | 12.5 | 4.2 | 8.3 | $0.12(director虚拟机 + NAT网关 + 其他) |
| GCP(n1-standard-2 director) | 10.8 | 3.5 | 7.3 | $0.10(director虚拟机 + NAT网关) |
数据要点: GCP部署稍快,原因是虚拟机供应和网络设置更快。对于短期环境,成本可以忽略不计;但对于持久运行的director,仅NAT网关一项在AWS上每月就可能花费约$30。团队在决定使用bosh-bootloader还是可能采用更廉价网络选项的手动Terraform脚本时,应考虑这一点。
相关开源仓库
- cloudfoundry/bosh-bootloader(181颗星,低活跃度):主仓库。最后一次有意义的提交已是一年多前。问题追踪器中有多个未合并的PR。
- cloudfoundry/bosh(2100+颗星):核心BOSH项目。活跃且维护良好。Bosh-bootloader依赖于它。
- hashicorp/terraform(41000+颗星):底层IaC工具。Bosh-bootloader通过`terraform-exec`将Terraform作为库使用。
关键参与者与案例研究
Cloud Foundry基金会与VMware
BOSH Bootloader由Cloud Foundry基金会维护,但历史上的主要贡献者来自VMware(原Pivotal)。VMware的Cloud Foundry部门在内部演示、培训和内部部署中使用bosh-bootloader。然而,随着VMware被Broadcom收购及随后的重组,Cloud Foundry团队规模被缩减。这直接导致了该项目的停滞。