Notice: Constant WP_DEBUG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 12

Notice: Constant WP_DEBUG_LOG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 13

Notice: Constant WP_DEBUG_DISPLAY already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 14
【转载】在生产环境中使用Kubernetes部署可编程的基础设施 – zoues

LOADING

Follow me

【转载】在生产环境中使用Kubernetes部署可编程的基础设施
五月 7, 2017|DockerPaaS

【转载】在生产环境中使用Kubernetes部署可编程的基础设施

【转载】在生产环境中使用Kubernetes部署可编程的基础设施

基础设施除了提供高可用、高稳定性的资源外,还要对外提供接口,让应用以一种“可编程”的方式更方便的使用基础设施;应用层需要将复杂脆弱的单体应用拆分成微服务,在容器时代,可编程的基础设施为微服务改造提供了广阔的想象空间。


导读:

这周我们聊聊自动化的与可编程的基础设施并且列举一个真实的例子。我们将继续使用Mircobadger服务,通过我们自己定义的调度器实现部分自动化。我们调度程序的代码是开源的,可以从https://github.com/microscaling/microscaling上获取。它可以使用KubernetesDeployment API来扩展。

在生产环境中使用Kubernetes部署可编程的基础设施

1
Mircobadger做什么

Microbadger是个SaaS服务,可以让您浏览Docker Hub上的任何公共镜像的元数据。您提供镜像的名称,我们会从Docker Hub获取数据,整理并显示出来。

2
Mircobadger如何工作?

想象一下,用户请求一个尚未缓存的新镜像,有很多我们需要获取和显示的数据。虽然Docker Hub在大多数请求时都很快的返回,但某些时候却需要很长时间,尤其是进行获取镜像深度信息(Inspect)的时候,比如获取下载镜像的大小和向工程师展示镜像的分层信息。

我们决定尽快显示内容以保持客户的使用体验,只要涉及缓慢的过程,我们可以通过分开数据请求和处理来加速这个过程。

所有的内容都展示在下图的橘色框内:

在生产环境中使用Kubernetes部署可编程的基础设施

  • 容器化,无状态化,并在KubernetesAWS集群中编排

  • 一个AWS服务SQS,用户队列服务

它主要由三个部分组成:

  • API服务(Go)处理来自网络的API请求,并提供缓存的内容,或者在检查队列上删除新数据的请求。Web客户端轮询API直到请求完全完成。

  • 一个单线程执行Inspector服务(Go),轮询Inspection队列获取新的任务,从Docker Hub请求快速数据。它处理和缓存响应,并且还会把较慢数据的请求放在Size队列上。

  • 一个单线程执行Size服务(Go),轮询Size队列获取新的任务和请求,从Docker Hub请求较慢的数据,处理和缓存请求。

每个Go程序都是单线程的,我们通过运行更多的Pod来弹性扩展,每个Pod中只包含一个容器。Size服务和Inspector服务共享物理的基础设施,它们都运行在相同的AWS的基础设施和节点上。

起初,我们在两个AWS T2实例上运行10个InspectorPod和10个SizePod,虽然容易,但有些乏味,过度的配置超出了大多数时间处理峰值的需求。我们可以不可以使用一个可编程的基础设施,来帮我们节省一些成本?

3
Mircobadger主要特性

Mircobadger有一下主要特性:

  • API服务至关重要,所以要能过快速的弹性扩展

  • Size服务也是至关重要的。我们通过使用云队列服务来处理,这是非常昂贵的。Size队列服务用于保存状态,使Kubernetes集群无状态,这让应用更容易配置。

  • Inspector服务对于新的镜像是迫切需要的,这对于我们宝贵的新用户是至关重要的。

Size服务不是那么紧急——如果它一段时间不可用,Microbadger将不会很好,但是仍然可以正常工作。

4

理想的可编程基础设施

在生产环境中使用Kubernetes部署可编程的基础设施

这个相当标准的架构非常适合一可编程的方式进行优化和演进。为此,Microbadger使用我们为Kubernetes自定义的调度器,它需要三个输入:

  • 需求度量,在这种情况下,我们使用了两个队列的长度

  • 高优先级服务(容器标识符),用于Inspector服务

  • 低优先级服务(容器标识符),用于Size服务

自定义的调度器只需创建Inspector服务的容器,直到满足主要的需求指标(Inspector未备份)。通过杀死Size服务的容器(记住他们共享相同的机器),从而释放空间。当Inspector队列长度下降是,自定义调度程序将关闭部分Inspector服务,并启动足够的Size服务的容器以保持Size服务恢复正常进行。

这种可编程的基础设施有几个很好的特性:

  • 它确保我们仅运行最少数量的服务,这将我们的昂贵的成本:SQS轮询操作较少了大约70%。

  • 它减少了我们大量使用的资源总量,这有可能在以后多租户集群中减少我们的账单。

5
背后的哲学

节省成本是好的,但是我们感兴趣的是理念的转变。在单一的应用中,所有这些组件都将在一个巨大的服务(单体服务)内部,这可能会在内部完成所有这些自定义的调度(监视内部队列和启动/停止线程)。我们需要做得是将一个庞大的单体应用,拆分成微服务的应用。

我们将服务拆成微服务的原因:

  • 更加容易部署和管理,可以持续交付的小组件 + API + 小团队 + 减少冲突,这些可以与Kubernetes的滚动部署天然的结合。

  • 劳动分工,专业的人员提供专业的服务,可以提高第三方服务的质量和效率(例如:SQS服务)

然而,Mircoservices的缺点是失去了可以构建成一个整体的、无所不知的内部视图和控制,这通常意味着过度供应。现在,自定义的调度器和编排器,我们杜绝了过度供应的可能。

Mircoservices可以是一个非常好的架构,使用我们自定义的调度器来获取资源,而无需重构我们的应用,这是非常好的!

6
加入容器时代

容器时代公众号的目的是希望能够传播容器技术和理念,让更多的人能够享受到这场技术革命带来的好处。虽然我们不是大牛,对容器技术生态的了解和认识也还不够深刻,但是我们乐于分享,乐于交流。不管读者的你是学生,还是工程师,甚至都不是,我们都欢迎你加入进来,可以一起写文章、翻译文章,也可以一起分享经验、聊聊踩过的那些坑!为此特意建立了一个微信群,长按识别下方二维码加入,我们以梦为马,一起前行!

在生产环境中使用Kubernetes部署可编程的基础设施

在生产环境中使用Kubernetes部署可编程的基础设施

7
架构真经

《架构真经:互联网技术架构的设计原则(原书第2版)》即将震撼上市,关注容器时代公众号可以有机会获得亲笔签名图书,赶快关注!!

在生产环境中使用Kubernetes部署可编程的基础设施

版权声明:任何转载需全文转载并保留来源(微信公众号容器时代),同时转载容器时代的二维码,否则视作侵权。

no comments
Share