容器设计模式

Kubernetes可以自动执行应用程序的部署,操作和扩展,但是我们在Kubernetes项目中的目标不仅仅限于系统管理-我们也希望Kubernetes也能帮助开发人员。 Kubernetes应该使他们易于编写在云和数据中心环境中运行的分布式应用程序和服务。为此,Kubernetes不仅定义了用于管理员执行管理操作的API,而且还定义了用于容器化应用程序与管理平台进行交互的API。

我们关于后者的工作才刚刚开始,但是您已经可以在Kubernetes的一些功能中看到它的体现。例如:

  • 优雅终止”机制提供了一个在容器被杀死之前的可配置时间量的回调(由于滚动更新,用于维护的节点消耗等)。这样可以彻底关闭应用程序,例如保持内存状态并干净地建立开放连接。
  • 活力和准备情况调查 检查可配置的应用程序HTTP端点(也支持其他探针类型),以确定容器是否处于活动状态和/或准备接收流量。该响应确定Kubernetes是否将重新启动容器,将其包含在其服务的负载平衡池中等等。
  • ConfigMap 允许应用程序从Kubernetes资源读取其配置,而不是使用命令行标志。

更普遍地说,我们看到Kubernetes支持新一代的设计模式,类似于 面向对象的设计模式,但这一次用于容器化应用程序。从容器化的体系结构中浮现出设计模式就不足为奇了,就模块化/打包,抽象和重用而言,容器提供了许多与软件对象相同的好处。更好的是,由于容器通常通过HTTP和广泛使用的数据格式(如JSON)相互交互,因此可以以与语言无关的方式提供好处。

本周,Kubernetes联合创始人布伦丹·伯恩斯(Brendan Burns)提出了 概述了我们对此主题的想法 第八届Usenix云计算热点话题研讨会 (HotCloud ‘16),学术研究人员和行业从业人员汇聚一堂,讨论私有和公共云技术研究的前沿思想。本文描述了三类模式:管理模式(例如上述模式),涉及在同一节点上运行的多个协作容器的模式以及涉及在多个节点上运行的容器的模式。我们不想破坏阅读本文的乐趣,但是我们会说,您会看到 抽象是后两种模式的关键推动因素。

随着Kubernetes项目继续为我们带来十年的经验 博格 对于开源社区,我们的目标不仅是使大规模应用程序部署和操作简单可靠,而且首先使其易于创建“云原生”应用程序。我们记录有关基于容器的服务的设计模式的想法的工作以及Kubernetes启用这种模式的工作是朝这个方向迈出的第一步。我们期待与学术界和从业者社区合作,以识别和整理其他模式,以帮助容器兑现为从开发,部署到运营的整个软件生命周期带来更高的简便性和可靠性的承诺。

要了解有关Kubernetes项目的更多信息,请访问 kubernetes.io 或在Slack上与我们聊天 slack.kubernetes.io.

--Google软件工程师Brendan Burns和David Oppenheimer