容器设计 Kubernetes 容器设计模式概述

栏目:游戏 2021-10-09 02:30:05
分享到:

云原生应用运行在各种复杂的分布式环境中,一些独特的容器设计模式可以帮助适应环境。本文介绍了几种常见的容器设计模式,希望对大家有所帮助。

翻译:巴赫

Kubernetes是一个开源容器编排引擎,用于自动化容器化应用程序的部署、扩展和管理。Pod是kubernetes应用程序的基本构件。Kubernetes管理封装容器的Pod。Pod可以包含一个或多个容器、存储和IP地址,并控制容器的操作。

包含容器的Pod称为单容器Pod,这是kubernetes最常见的用例。包含多个相关容器的Pod是指多容器Pod。Pod运行在不同的复杂环境中,一些独特的容器设计模式可以帮助适应环境。本文介绍了几种常见的容器设计模式。

K8sMeetup

初始化容器

Init容器是一个应该在启动容器中的主容器之前运行并完成的容器。它为初始化提供了一个独立的生命周期,因此可以分离应用程序中的问题。例如,当我们需要在运行应用程序之前安装一些特定的软件时,我们可以将其安装在Pod的Init容器中。

我们可以为Init容器定义n个容器,在所有Init容器成功终止之前,主容器不会启动。所有初始化容器都将按顺序执行。如果初始化容器中有错误,Pod将重新启动,所有初始化容器将再次执行。因此,最好简单快速地设计Init容器。

在某些情况下,我们可以使用这种模式:

应用程序或主容器需要一些先决条件。

您想要延迟主容器的启动。

K8sMeetup

边车集装箱

边车容器是与Pod中的主容器一起运行的容器。Sidecar模式可以在不改变的情况下扩展和增强当前容器的功能。

当带有单个容器的Pod正常运行时,我们希望在不接触或改变的情况下向当前容器添加或扩展一些功能。在这种情况下,Sidecar容器模式会有所帮助。

我们可以为Sidecar容器定义任意数量的容器,并且可以使用主容器。所有容器并行执行,并且只有当两种类型的容器都成功运行时,整个功能才起作用。大多数情况下,Sidecar容器简单小巧,消耗的资源比main容器少。

在某些情况下,我们可以使用这种模式:

我想扩展或增强单个容器的现有Pod功能,但我不想更改现有的Pod功能。

想要将主容器代码与git服务器请求同步。

向外部服务器发送日志事件。

用于网络相关任务时。

K8sMeetup

适配器容器

本质上,许多应用程序是异构的,这意味着它们没有相同的接口或者与其他系统不一致。

想象一下,一个容器Pod正在运行,但它与其他系统没有相同的接口,因为它不能集成或使用。如何让容器有一个标准化格式的统一接口,让其他系统可以连接到容器?适配器容器模式在这种情况下可以发挥作用。

我们可以为适配器容器定义任意数量的容器,主容器可以与它一起使用。

K8sMeetup

大使集装箱

大使容器是一个特殊的Sidecar容器,可以简化Pod外部服务。在kubernetes上运行应用程序时,外部服务可能会访问数据。大使容器隐藏了复杂性,并提供了一个统一的接口来访问这些外部服务。

当我们需要访问外部服务时,外部服务可能是动态的,并返回到不同的格式,或者由于一些其他原因,我们不想在主容器中处理这种复杂性,所以大使容器可以处理这种情况。

在某些情况下,我们可以使用这种模式:

您希望隐藏主容器的复杂性,例如服务发现。

当容器化的服务想要与外部服务对话时,我们可以使用这种模式来处理这些服务的请求和响应。

每当外部服务响应的格式需要转换或标准化时。

原始链接:https://medium . com/bb-教程-和-想法/Kubernetes-learn-init-container-pattern-7a 757742 de6b