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