Kubernetes Pods
malong 发布于 2021-02-27
pod是Kubernetes集群节点中容器及其存储的集合。可以创建一个内有多个容器的pod。Pods是Kubernetes中可以创建和管理的最小的可部署计算单元。
Pod内容始终位于同一位置,并在共享主机中运行。Pod为特定于应用程序的逻辑主机建模。它包含一个或多个相对紧密耦合的应用程序。在非云上下文中,在同一物理或虚拟机上执行的应用程序与在同一逻辑主机上执行的云应用程序类似。如果我们经常部署单个容器,我们可以用container替换单词pod。

Pods的运行比单个容器高一个级别,因为一组容器协同工作以产生一组工作流程是非常常见的。

Kubernetes比Docker支持更多的容器运行时。Docker是最常见的术语,它有助于使用Docker的一些术语来描述Pods。
Pod的共享上下文是一组Linux名称空间、组以及隔离Docker容器的其他方面。在Pod的上下文中,各个应用程序可能具有进一步的子隔离。
在Docker中,Pod类似于一组具有共享名称空间和共享文件系统卷的Docker容器。

Pod的类型

Kubernetes Pods有两种类型,例如:
单容器pod:“每个pod一个容器”模型是最常见的Kubernetes用例。它们可以用kubctl run命令创建,我们在Docker注册表上有一个已定义的映像,我们将在创建pod时提取该映像。库伯内特斯管理豆荚而不是容器。
多容器pod:这些pod是使用带有容器定义的YAML邮件创建的。Pod可以封装一个由多个紧密耦合且需要共享资源的容器组成的应用程序。
Pod将这些容器、存储资源和临时网络标识包装在一起,作为一个单一的、内聚的服务单元。

Pods做什么?

pod表示在集群上运行的进程。通过将pod限制为单个进程,Kubernetes可以报告集群中每个进程的运行状况。
pod有一个唯一的IP地址,允许它们相互通信。
pod具有持久性存储卷。
pod具有确定容器应该如何运行的配置信息。

尽管许多pods只包含一个容器,而且许多pod都会有几个容器紧密协作以执行所需的功能。
我们还可以将Pod视为一个独立的、独立的逻辑主机,其中包含它所服务的应用程序的系统需求。
Pod意味着在集群上运行应用程序的单个实例。但是,不建议直接创建单独的pod。相反,我们创建了一组相同的pod(称为副本)来运行应用程序。这样一组复制的pod由控制器创建和管理。控制器管理其组成吊舱的生命周期,还可以执行水平缩放,根据需要更改吊舱的数量。
尽管我们偶尔会直接与pod交互以调试、排除故障或检查它们,但我们建议使用控制器来管理pod。
pod在集群中的节点上运行。Pod将保留在其节点上,直到其进程完成。由于资源不足,pod被逐出或从节点中删除,或者节点出现故障。如果一个节点出现故障,节点上的pod将被自动安排删除。

Pod生命周期

Pods 是短暂的。它们不是设计为永远运行的,当一个Pod被终止时,它不能被带回来。在用户或控制器删除pod之前,pod不会消失。
Pods 不能自我修复。例如,如果一个Pod被安排在一个稍后失败的节点上,它就会被删除。类似地,如果一个Pod由于任何原因被逐出一个节点,Pod不会替换自己。
每个Pod都有一个PodStatus API对象,由Pod的status字段表示。pod将其阶段发布到status阶段字段。Pod的阶段是Pod当前状态的高级摘要。
当我们运行kubect1,让pod检查集群上运行的pod时,pod可能处于以下可能的阶段之一:
挂起:Pod已创建并被集群接受,但一个或多个容器未运行。此阶段包括在节点上安排和下载图像所花费的时间。
正在运行:Pod已启动已绑定到节点,并且已创建所有容器。至少有一个容器正在运行、正在启动或正在重新启动。
成功:所有容器在Pod中成功终止。终止的pod不会重新启动。
失败:所有容器在Pod中,至少有一个容器因故障而终止。如果容器以非零状态退出,则容器“失败”。
未知:无法确定Pod的状态。

Pods是怎么工作的?

Pods是由名为controllers的工作负载资源创建的,这些资源管理集群中的卷展、复制和pod的运行状况。例如,如果群集中的一个节点出现故障,控制器会检测到该节点上的pod没有响应,并在其他节点上创建替换pod。有三种最常见的控制器类型,例如:
批处理类型的作业是临时的,将运行任务直至完成。
为无状态和持久化的应用程序部署,例如web服务器(HPPT服务器)。
有状态集合,用于有状态和持久的应用程序,如数据库。
如果一个pod有多个容器,那么它们都被安排在集群中的同一个服务器上,无论是VM还是物理服务器。pod中的所有容器共享它们的资源和依赖关系,并且可以协调它们的执行和终止。
例如,pods可以包含在应用程序容器运行之前运行的init容器,为随后的应用程序设置环境。
pod几乎总是由控制器创建的,控制器可以自动管理pod的生命周期,包括替换失败的pod、在必要时复制pod,以及在pod完成时从集群节点中逐出不再需要的pod。
控制器使用pod模板中的信息来创建pod,并且控制器确保正在运行的pod与pod模板中定义的部署相匹配,例如,通过创建副本来匹配部署中定义的编号。

Pods如何管理多个容器

pod被设计成支持多个协作过程(如容器),这些过程形成一个内聚的服务单元。Pod容器在集群中的同一个物理或虚拟机上自动进行共同定位和共同调度。
这些容器可以共享资源和依赖项,相互通信,并协调终止它们的时间和方式。

例如,作为共享卷中文件的web服务器的容器,以及从远程源更新这些文件的单独sidecar容器,如下图所示:




一些pod必须初始化容器以及应用程序容器。初始化容器在应用程序容器启动之前运行并完成。
pod本机为其组成容器提供两种共享资源,例如:
网络:pod被自动分配唯一的IP地址。Pod容器共享相同的网络名称空间,包括IP地址和网络端口。Pod中的容器在本地主机上的Pod内相互通信。
存储:Pods可以指定一组可在容器之间共享的共享存储卷。

Pod的优点

当pod包含多个容器时,它们之间的通信和数据共享就简化了。由于pod中的所有容器共享相同的网络名称空间,因此它们可以通过localhost进行定位和通信。
pod可以通过使用另一个pod的IP地址或引用驻留在另一个pod中的资源来相互通信。
pod可以包含在pod启动时运行的容器,并在应用程序容器运行之前执行初始化。此外,pod简化了可伸缩性,允许创建副本pod并根据需求变化自动关闭。


malong
关注 私信
文章
35
关注
0
粉丝
0