卡梅拉架构一体化

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 image

    spark yarn cluster mode, credit: @goyalsaurabh66

  • docker level的粒度, instance level的粒度过大容易造成resource的浪费. 而如果是docker level, 通过co-group和namespace可以更好地隔离划分mem,cpu. 可以做到更小的粒度更精细的掌控 image

    spark k8s cluster mode, credit: databricks

从上面可以看到演进就是k8s replace了yarn.

Breakdown

image

整体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

  1. 使用 Terraform 在 AWS 中国区域实现自动化部署指南系列(一) TERRAFORM 入门
  2. Amazon EKS 用户指南
  3. terraform-aws-eks
  4. 卡梅拉white paper
  5. Spark 迁移到 K8S 在有赞的实践与经验