Supergiant 是一个使用 Kubernetes 打造的容器托管平台,适用于分布式的有状态应用。Supergiant 是由 Qbox.io 团队所开发的,该团队同时还提供了托管版本的 Elasticsearch 。
Supergiant 是一种能够运行 Docker 容器、以托管有状态、集群化应用的框架。它的内部实现利用了 Kubernetes 的功能,但也开发了自有的结构与代码,以避免出现 Kubernetes 无法满足需求的场景,例如持久化保存以及外部的负载均衡。InfoQ 与 Qbox 的 CEO 和联合创始人,同时也是 Supergiant 的创建者 Mark Brandon 进行了一次访谈,以深入了解 Supergiant 的技术细节。
QBox.io 团队早期的业务是提供托管版本的 Elasticsearch,当时他们经历过各种问题,其中包括由于因“吵闹的邻居”效应(本意是指某个VM 由于存储而产生的大量I/O 操作对同一环境中其他VM 的影响)而难以实现扩展的情况。根据团队的博客文章所说,对于管理互联的容器与卷的管理,Docker 与Kubernetes 看起来是一种正确的选择。
部署在Supergiant 平台上的应用中所涉及的存储功能都被分配在高可用的阵列中,但它并没有使用Kubernetes 中的持久化数据卷。AWS 目前已经提供了对Supergiant 的支持,Supergiant 使用了AWS 中的Elastic Block Store(EBS),因此数据卷可随意在集群中移动。EBS 中的数据卷的行为类似于硬盘,可接入虚拟机中或者撤消(也可进行挂载与卸载)。由于EBS 数据卷的持久化可支持节点服务器的重启,因此即便某个节点变得不可用,数据也不会丢失。
Kubernetes 内置了负载均衡与高可用性方面的特性。按照 Brandon 的说法,Supergiant 特意为外部的负载均衡功能编写了代码,因为“虽然 Kubernetes 的内部负载均衡功能十分出色,但它的外部负载均衡策略对于 Elasticsearch 这样的分布式应用来说并非最佳。”
为了使你的软件作为一个 Supergiant 应用运行,它必须被打包为一个“组件”。这种组件既可以是一个 NoSQL 数据库,也可以是一个 web 服务器或 node.js 应用。根据 Brandon 所说:“任何一种可被 Docker 化的应用都可以成为一个组件”。Supergiant 还提供了一套基于 HTTP 的 API,用于组件的定义。
运行在 AWS 环境中的应用都需要满足一个要求,即可以忍受可用性地域(AZ)的故障,而对跨区域可用性的支持则是更高级别的能力。根据 Brandon 的说法,Supergiant 可管理跨多个 AWS 地域的集群。
查看英文原文: Supergiant.io - Container Platform for Stateful Applications
评论