本文已发布超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

基于容器的应用程序设计原则

如今,几乎可以将任何应用程序放入容器中并运行它。然而,创建云原生应用程序,即由 Kubernetes 等云原生平台有效自动化和编排的容器化应用程序,需要额外的努力。云原生应用程序会预料到失败;即使其基础设施出现故障,它们也能可靠地运行和扩展。为了提供这些功能,Kubernetes 等云原生平台会对应用程序施加一组合同和约束。这些合同确保它们运行的应用程序符合某些约束,并允许平台自动化应用程序管理。

我概述了七个原则,容器化应用程序应遵循这些原则才能完全实现云原生。

| ----- | | | | 容器设计原则 |

这七个原则涵盖了构建时和运行时的问题。

构建时

  • 单一关注点:每个容器都解决一个单一的关注点,并且做得很好。
  • 自我包含:容器仅依赖于 Linux 内核的存在。在构建容器时添加其他库。
  • 镜像不可变性:容器化应用程序应该是不可变的,并且一旦构建完成,就不应在不同环境之间更改。

运行时

  • 高度可观察性:每个容器都必须实现所有必要的 API,以帮助平台以最佳方式观察和管理应用程序。
  • 生命周期一致性:容器必须有一种方法来读取来自平台的事件,并通过对这些事件做出反应来保持一致性。
  • 进程可处置性:容器化应用程序必须尽可能短暂,并随时准备被另一个容器实例替换。
  • 运行时限制:每个容器都必须声明其资源需求,并将资源使用限制在指示的需求内。构建时原则确保容器具有正确的粒度、一致性和结构。运行时原则规定了为了使容器化应用程序具有云原生功能而必须实现的功能。遵守这些原则有助于确保您的应用程序适合在 Kubernetes 中进行自动化。

白皮书可免费下载

要了解更多关于为 Kubernetes 设计云原生应用程序的信息,请查看我的Kubernetes Patterns一书。

Twitter:
博客:http://www.ofbizian.com
领英

Bilgin Ibryam (@bibryam) 是 Red Hat 的首席架构师、ASF 的开源提交者、博客作者、作家和演讲者。他是《Camel Design Patterns》和《Kubernetes Patterns》两本书的作者。在他的日常工作中,Bilgin 喜欢指导、培训和领导团队在分布式系统、微服务、容器和云原生应用程序方面取得成功。