Overview
整理卡梅拉一体化的架构, 从底层的aws -> terraform -> k8s -> spinnaker -> 主体application code
之前, 在多租户(multi tenancy)下资源很难隔离. 如,
- instance level的粒度, 提交spark jar包到Oozie, Oozie到期就submit spark job到yarn, yarn回应一个instance作为spark driver, 之后再回应一些instances作为spark executors
spark yarn cluster mode, credit: @goyalsaurabh66
- docker level的粒度, instance level的粒度过大容易造成resource的浪费. 而如果是docker level, 通过co-group和namespace可以更好地隔离划分mem,cpu. 可以做到更小的粒度更精细的掌控
spark k8s cluster mode, credit: databricks
从上面可以看到演进就是k8s replace了yarn.
Breakdown
整体arch
infra层
使用terraform来管理云机器资源, 然后使用gitlab maintain terraform code, 每次code change都会触发ci来实现terraform-apply
以CRUD云资源
orchestration层
使用k8s来编排.
- 这里可以直接使用eks(aws build好的k8s cluster)
- 或者apply一些ec2来自建k8s cluster
之后暴露k8s master接口即可
deployment层
这里是k8s master(scheduler和api-server)所接入的yaml(符合k8s格式)暂存的地方. 比如,
- 直接写成k8s-yaml然后通过kubectl submit到k8s-master
- 用spinnaker过渡, 然后gitlab maintain spinnaker code/jsonnet, spinnaker组合多方之后再submit到k8s-master
image/application层
这里是具体应用层, 通过ci将code change
打包成image, 然后存放在repo供之后的deploy调用.
这些application可以是airflow, oozie, db, spark等标准包. 也可以是自定义包, 如spark-sklearn-myOwnFunction image.
client层
对用户展示, 通常是spinnaker的ui或者自包装ui.
Reference
PREVIOUSGME gaming
NEXTserverless关注点