Jump to section

Kubernetes 模式简介

复制 URL

模式是一种可重复利用的解决方案。Kubernetes 模式即基于容器的应用和服务的设计模式。  

Kubernetes 可以帮助开发人员编写云原生应用,并且可以提供一个应用编程接口(API)库和用来构建应用的工具。 

但是,Kubernetes 并没有为开发人员和架构师提供指导,告知其如何使用这些内容来构建满足业务需求和目标的完整系统。 

模式能够让您重新利用系统架构。您可以使用现有的 Kubernetes 模式来代替完全自行创建架构,同时确保一切按预期的方式运行。 

当您尝试在 Kubernetes 上提供重要的业务服务时,试错的学习方式会非常耗时,而且可能导致停机和中断等问题。 

您可以将模式视为一幅蓝图,它会向您展示解决所有类似问题的方法。模式不仅仅是解决某个特定问题的分步说明。

使用模式可能会带来不同的结果,它们的本意就不是提供相同的解决方案。即使使用相同的模式,您和他人的系统也会有所不同。但是,两个系统之间会有共同的特征。 

借助 Kubernetes 模式,开发人员可以使用 Kubernetes 作为运行时平台来创建云原生应用。

模式是 Kubernetes 开发人员的必备工具,它们会告诉您如何构建系统。

  • 基础模式涵盖了 Kubernetes 的核心概念。这些模式是构建基于容器的云原生应用的基本原则和实践。 
  • 行为模式是基础模式之上的模式,对管理各种容器和平台交互的概念做了进一步细化。 
  • 结构模式关注的是如何组织 Kubernetes 容器集内的容器。 
  • 配置模式用于设计 Kubernetes 中处理应用配置的不同方式。上述模式都包含将应用连接至其配置的具体步骤。 
  • 高级模式则提供了一些高级概念,例如如何扩展平台本身或如何直接在集群中构建容器镜像。

可预测需求模式

可预测需求模式属于 Kubernetes 基础模式。此类模式可确保您的应用符合容器化应用的基本原理,以便可以使用 Kubernetes 对其进行自动化。 

可预测需求模式会说明为什么每个容器需要声明应用资源需求和运行时依赖项。定义这些需求后,Kubernetes 可以选择合适的位置在集群中部署相应的应用。 

可使用这种模式定义的项目包括:运行时依赖项、资源配置文件、容器集优先级和项目资源。

示例:资源配置文件

您需要为容器的资源需求(如 CPU 和内存)指定请求和限制的形式。请求是指所需的最少资源量,而限制则是指容器可以消耗的最大资源量。 

将容器集放置到节点上时,调度程序会用到请求量。调度程序只会把容器集调度到具有足够容量的节点上。  

如果未设置资源需求,就会视为该容器的优先级较低,如节点的可用资源即将耗尽,则会首先停止该容器。

配置模式

所有应用都需要配置。尽管在源代码中存储配置是个简单易行的选择,但它缺乏灵活性,没办法在不重新创建应用镜像的情况下来调整配置。外部配置可以让您根据环境做出调整。

配置模式将帮助您针对不同开发、集成和生产环境的外部配置来自定义和调整应用。 

示例:EnVar 配置

EnVar 配置模式最适合少量配置变量的情况,在这些变量中,可以使用通用支持的环境变量来实现配置的外部化。 

与需要重新构建应用的硬编码配置相比,将应用配置外部化可以在应用构建后再对配置进行更改。

使用环境变量来外部化配置的效果很好,因为任何操作系统都可以定义这些变量,而且任何编程语言都可以访问它们。 

对于环境变量而言,通常是在构建期间定义硬编码的默认值,然后在运行时进行覆盖。

在 Kubernetes 中,您可以在控制器(如 deployment 或 replica set)的容器集规范中直接设置变量。您可以直接将值附加至环境变量,而后者可独立于容器集定义单独管理。

您也可以使用对 Kubernetes Secrets(用于敏感数据)和 ConfigMap(用于非敏感配置)的委派。

高级模式

这些模式包含了复杂的主题和最新的模式实施。控制器、操作器、弹性扩展和镜像构建器模式都是 Kubernetes 高级模式的示例。

示例:弹性扩展

弹性扩展模式可用于通过调整容器集副本的数量(横向)、调整容器集的资源需求(纵向)来扩展应用,并可通过更改集群节点的数量来扩展集群本身。

您可以手动扩展,也可使用弹性扩展模式让 Kubernetes 根据负载进行自动扩展。 

借助 Kubernetes,您可以更改容器的资源、所需的服务副本或集群的节点数。此外,它还可以监控外部负载和与容量有关的事件、分析容器状态,并根据性能需求进行扩展。 

横向容器集自动扩展功能可让您定义一个应用容量,该容量不固定,但足以处理变化的负载。横向容器集自动扩展器可用于容器集扩缩容。 

为了使用横向容器集自动扩展器,需要启用指标服务器(一个资源使用数据的集群内聚合器),并需要定义 CPU 资源限制。您可以通过命令行创建横向容器集自动扩展器的定义。 

横向容器集自动扩展器容控制器会根据您先前确定的定义(在命令行中设置)连续检索与扩展有关的容器集指标。 

同时,它还会根据当前值和意向值来计算所需的副本数,并更改声明的副本以保持新的意向状态

红帽® OpenShift® 是一个企业就绪型 Kubernetes 平台。它为开发人员提供了一种自助服务环境,可以在任何基础架构上打造并实现全堆栈自动化运维。

红帽 OpenShift 汇集了所有相关的先进技术,旨在将 Kubernetes 打造成为可供企业使用的强大平台,这些技术包括:注册表、联网、遥测、安全性、自动化和服务。

借助红帽 OpenShift 的可扩展性以及控制和编排功能,开发人员可以构建新的容器化应用、对其进行托管并在云端加以部署,从而轻松快速地将各种奇思妙想转变为新业务。

继续阅读

文章

有状态 VS 无状态

要判断一个应用为有状态或无状态,取决于交互状态的记录时长以及该信息所需的存储方式。

文章

什么是 Quarkus?

Quarkus 是一个为 Java 虚拟机(JVM)和原生编译而设计的 Kubernetes 原生 Java 堆栈,专门根据容器而对 Java 进行了优化。

文章

什么是无服务器?

无服务器是一种云原生开发模型,可使开发人员专注构建和运行应用,而无需管理服务器。

详细了解云原生应用

产品

企业级应用平台,包含一系列久经测试的服务,可在您选择的基础架构上将应用推向市场。

相关资源

培训

免费培训

利用微服务架构开发云原生应用