这是从Kubernetes Patterns本书综合的初学者必知的十大设计模式。熟悉这些模式将帮助您理解Kubernetes的基本概念,从而在讨论和设计基于Kubernetes的应用程序时为您提供帮助。
Kubernetes中有许多重要的概念,但是这些是最重要的概念:
为帮助您理解,这些图案受“Gang of Four”设计图案的启发,分为以下几类。
基础模式
这些模式代表了容器化应用程序必须遵循的原则和最佳实践,才能成为良好的云原生公民。无论应用程序的性质如何,您都应遵循这些准则。遵循这些原则将有助于确保您的应用程序适合Kubernetes上的自动化。
Health Probe 模式
Health Probe要求每个容器都应实现特定的API,以帮助平台以最健康的方式观察和管理应用程序。为了完全自动化,云原生应用程序必须通过允许推断其状态来实现高度可观察性,以便Kubernetes可以检测到该应用程序是否已启动并准备服务请求。这些观察结果影响Pod的生命周期管理以及将流量路由到应用程序的方式。
可预测的需求模式
可预测的需求解释了为什么每个容器都应声明其资源配置文件并保持在指示的资源要求范围内。在共享云环境上成功进行应用程序部署,管理和共存的基础取决于识别和声明应用程序的资源要求和运行时依赖项。此模式描述了应如何声明应用程序需求,无论它们是硬运行时依赖项还是资源需求。声明您的要求对于Kubernetes在集群中找到适合您的应用程序的正确位置至关重要。
自动调度模式
自动调度介绍了如何影响多节点群集中的工作负载分配。调度是Kubernetes调度程序的核心功能,用于将新Pod分配给满足容器资源请求并遵守调度策略的节点。该模式描述了Kubernetes调度算法的原理以及从外部影响调度决策的方式。
结构模式
拥有良好的云原生容器是第一步,但还不够。下一步是重复使用容器并将其组合到Pod中以实现所需的结果。此类别中的模式着重于在Pod中构造和组织容器以满足不同的用例。影响Pod中容器的力会导致这些模式。
初始化容器模式
初始化容器为与初始化相关的任务和主应用程序容器引入了单独的生命周期。初始化容器通过为与初始化相关的任务提供与主应用程序容器不同的单独生命周期,从而实现关注点分离。这种模式引入了基本的Kubernetes概念,当需要初始化逻辑时,该概念可在许多其他模式中使用。
Sidecar 模式
Sidecar描述了如何在不更改容器的情况下扩展和增强其功能。此模式是允许单一用途容器紧密协作的基本容器模式之一。
行为模式
这些模式描述了管理平台确保的Pod的生命周期保证。根据工作负载的类型,Pod可能会作为批处理作业运行直到完成,或者被安排为定期运行。它可能作为守护程序服务或单例运行。选择正确的生命周期管理原语将帮助您以所需的保证来运行Pod。
Batch Job 模式
批处理作业描述了如何运行隔离的原子工作单元直到完成。此模式适用于管理分布式环境中孤立的原子工作单元。
Stateful 服务 模式
有状态服务描述了如何使用Kubernetes创建和管理分布式有状态应用程序。此类应用程序需要诸如永久性身份,网络,存储和常规性之类的功能。 StatefulSet原语为这些构建块提供了强有力的保证,是有状态应用程序管理的理想选择。
服务发现模式
服务发现解释了客户端如何访问和发现正在提供应用程序服务的实例。为此,Kubernetes提供了多种机制,具体取决于服务使用者和生产者位于集群内部还是集群之外。
高级模式
此类别中的模式更复杂,代表更高级别的应用程序管理模式。这里的一些模式(例如Controller)是永恒的,而Kubernetes本身就是建立在它们之上的。
Controller 模式
控制器是一种模式,可以在所需状态下主动监视和维护一组Kubernetes资源。 Kubernetes本身的核心由一组控制器组成,这些控制器定期监视并协调应用程序的当前状态与声明的目标状态。该模式描述了如何利用这一核心概念为我们自己的应用程序扩展平台。
Operator 模式
Operator是使用CustomResourceDefinitions来以算法和自动化形式封装特定应用程序的操作知识的控制器。 Operator模式允许我们扩展Controller模式,以获得更大的灵活性和更高的表现力。 Kubernetes的运营商越来越多,这种模式正在变成操作复杂分布式系统的主要形式。
总结
今天,Kubernetes是最流行的容器编排平台。它由所有主要软件公司联合开发和支持,并且由所有主要云提供商提供为服务。 Kubernetes支持Linux和Windows系统,以及所有主要的编程语言。该平台还可以协调和自动化无状态和有状态应用程序,批处理作业,定期任务和无服务器工作负载。此处描述的模式是Kubernetes随附的一组更广泛的模式中最常用的模式,如下所示。
Kubernetes是新的应用程序可移植性层,也是云中每个人之间的共同点。如果您是软件开发人员或架构师,则很有可能Kubernetes将以一种或另一种形式成为您生活的一部分。学习此处描述的Kubernetes模式将改变您对该平台的看法。我相信Kubernetes及其起源的概念将与面向对象的编程概念一样基本。
PS:本文属于翻译,原文
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。