以下是由「Kubernetes patterns」一书综合而成的初学者必须知道的十大设计模式。熟悉这些模式将帮助您理解基本的Kubernetes概念,从而在讨论和设计基于Kubernetes的应用程序时帮助到您。
Kubernetes中有很多重要的概念,但理解这些设计模式是最重要的:
来源:Kubernetes设计模式为了帮助您理解,受GoF设计模式的启发,下面将模式组织为以下几个类别。
这些模式代表了容器化应用程序必须遵守的原则和最佳实践,以便成为优秀的云原生公民。无论应用程序的性质如何,您都应该遵循以下指导原则。遵循这些原则将有助于确保您的应用程序适合于Kubernetes上的自动化。
运行状况探测要求每个容器都应该实现特定的api,以帮助平台以尽可能健康的方式观察和管理应用程序。为了实现完全自动化,本地云应用程序必须具有高度可观察性,允许推断其状态,以便Kubernetes能够检测应用程序是否已启动并准备好为请求提供服务。这些观察结果会影响Pods的生命周期管理以及何时将应用程序对外提供服务。
可声明的需求解释了为什么每个容器都应该声明其资源概要文件,并将其限制在指定的资源需求中。成功的应用程序部署、管理和在共享云环境上共存的基础依赖于识别和声明应用程序的资源需求和运行时依赖关系。此模式描述您应该如何声明应用程序需求,无论它们是运行时强依赖项还是资源需求。声明您的需求对于Kubernetes在集群中为您的应用程序找到合适的位置至关重要。
自动放置解释了如何影响多节点集群中的工作负载分布。放置是Kubernetes调度程序的核心功能,用于将新的pod分配给满足容器资源请求和执行调度策略的节点。该模式描述了Kubernetes调度算法的原理以及如何从外部影响内部调度决策。
拥有良好的云原生容器是第一步,但还不够。下一步是重用容器并将它们组合到Pod中,以实现预期的结果。这个类别中的模式关注于在Pod中构造和组织容器,以满足不同的用例。为了影响Pod中的容器导致产生了这些模式。
Init容器为与初始化相关的任务和主应用程序容器引入了一个单独的生命周期。Init容器通过与初始化相关的任务提供与主应用程序容器不同的独立生命周期,最终实现了关注点的分离。该模式引入了一个基本的Kubernetes概念,当需要初始化逻辑时,都可以使用这个设计模式。
Sidecar描述了如何在不更改现有容器的情况下扩展和增强其功能。该模式是一种基本的容器模式,允许单一用途的容器紧密合作。
这些模式描述了管理平台确保了Pods的生命周期。根据工作负载的类型,Pod可以作为批处理作业运行到完成为止,或者被安排定期运行。它也可以作为守护进程服务或单例运行。选择正确的生命周期管理原语将帮助您以所需的方式运行Pod。
Batch Job描述如何运行独立的原子工作单元直到完成。此模式适合于在分布式环境中管理孤立的原子工作单元。
StatefulSet描述如何使用Kubernetes创建和管理分布式有状态应用程序。这类应用程序需要诸如持久标识、网络、存储和序数等特性。StatefulSet原语为这些构建提供了强有力的保证,非常适合管理有状态应用程序。
服务发现解释了客户机如何访问和发现提供应用程序服务的实例。为此,Kubernetes提供了多种机制,这取决于服务使用者和生产者是位于集群上还是集群外。
这个类别中的模式更复杂,代表更高级别的应用程序管理模式。这里的一些模式(如Controller)是永恒的,Kubernetes本身就是建立在它们之上的。
Controller是一种模式,它主动监视和维护一组处于所需状态的Kubernetes资源。Kubernetes的核心本身由一系列控制器组成,这些控制器定期监视并协调应用程序的当前状态与声明的目标状态。此模式描述了如何利用这个核心概念为我们自己的应用程序扩展平台。
Operator是一个控制器,它使用CustomResourceDefinitions将特定应用程序的操作知识封装为特定结构和自动化形式。Operator模式允许我们扩展控制器模式以获得更大的灵活性和表现力。Kubernetes的Operator越来越多,这种模式正成为操作复杂分布式系统的主要形式。
如今,Kubernetes是最受欢迎的容器编排平台。它是由前沿软件公司共同开发和支持的,并由所有主要的云提供商作为服务提供。Kubernetes支持Linux和Windows系统,以及所有主要的编程语言。这个平台还可以编排和自动化无状态和有状态的应用程序、批处理作业、定期任务和无状态服务工作负载。这里描述的模式是Kubernetes提供的更广泛模式中最常用的模式,如下所示。
Kubernetes模式组织在不同的类别Kubernetes是应用程序可移植层、也是云上每个应用程序的共同基础设施。如果你是一个软件开发人员或架构师,Kubernetes很可能会以这样或那样的形式成为你生活的一部分。学习这里描述的Kubernetes模式将改变您对这个平台的看法。我相信Kubernetes和由此产生的概念将成为面向对象编程概念的基础。
这里的模式是用于容器编排的GoF设计模式。阅读这篇文章一定不是结束,而是你Kubernetes之旅的开始。kubectl-ing快乐!
深入探究 K8S ConfigMap 和 Secret
Kubernetes入门培训(内含PPT)
详解Kubernetes存储体系