Concepts

Detailed explanations of Kubernetes system concepts and abstractions.

Edit This Page

Pod Overview

这章概述了在 Kubernetes 对象模式里最小的可部署单元 Pod

##什么是 Pod

Pod 是 Kubernetes 最基本的组成块 – 这是 Kubernetes 最小、最简单的可用来创建和部署的单元。 一个 Pod 代表了一个运行在集群里的进程。

Pod 里封装了一个(或者多个)应用容器,存储资源,以及惟一的网络 IP,和指导容器如何运行的选贤。 一个 Pod 表示这样一组部署: 由一个容器或者一组紧耦合容器组成共享资源的 Kubernets 应用实例

Docker是 Kubernetes Pod 里最常见的运行环境, 当然 Pod 也支持其他的容器环境。

Kubernetes 运用 pod 的方式:

更多关于 Pod 应用场景可以在Kubernetes 博客里找到。 详细内容如下:

每一个 Pod 都是一个指定应用的实例。 如果想水平扩展某个应用(比如说:跑多个实例),应该部署多个 Pod 每个 pod 对应一个实例。 在 Kubernet 术语里, 这种方式被称为_replication_。 Replicated Pod 通常是由一个被称为 Controller 的抽象来创建和管理的。更多信息请参见 Pods and Controllers

Pod 如何管理多个容器

Pod 被设计成支持用多个相互协作的进程(比如说:容器)来构成一组高粘性的服务。 Pod 的容器能在集群里的物理或者虚拟机上自动协同寻址、协同调度到同一台机器上。 容器之间能够共享资源和依赖,能相互通信,还能相互协调容器终止的方式和终止的时间点。

在高级应用中我们将一组协同寻址,协同管理的容器放到一个单独的 Pod 里. 这种模式往往被运用在容器紧耦合的场景里。比如说:你可以部署一个容器充当共享卷里文件的 web 服务器同时用 “sidecar” 容器来更新文件, 示例图如下:

pod 图

Pod 为它的容器们提供了两类共享资源: 网络存储

网络

每一个 Pod 都被分配了一个唯一的 IP 地址。pod 里的所有容器共享着一个网络空间,这个网络空间包含了 IP 地址和网络端口。Pod 内部的容器彼此之间可以通过 localhost 相互通信。 但当 Pod 里的容器需要与Pod 以外实体进行通信时,就要使用到这个共享网络资源了(比如说:端口)。

####存储

Pod 可以指定一系列的共享存储。Pod 里所有的容器都由权限访问这个共享卷,同时也可以使用这个共享卷来分享数据。 卷的出现使 Pod 能够支持数据持久性,这样就算是在 Pod 内部容器需要重启的场景里,数据也可以长期保持。 更多关于卷的内容请参见[Kubernets 如何在 Pod 上实现共享存储]。

在 Kubernets 里很少直接创建一个单独的 Pod - 就算是在只有一个 pod 的场景里也是这样。 从设计上来说 Pod 是一个一次性的、短暂的实体,在创建一个 Pod(直接被创建,或者是通过 Controller 间接创建)时,这个 pod 会被调用到集群里某一个节点上。 除非 Pod 进程被终止,或者 pod 对象被删除,或者由于缺少资源、节点失败等原因 pod 被驱逐,Pod 将一直存在在这个节点上。

从 pod 本身而言,它不具备自我恢复的功能。如果 pod 被调度到一个宕机的节点,或者调度的操作本身就失败了,那么这个 pod 立刻会被删除;这个场景同样适用于缺少资源或者节点宕机的情况。Kubernetes 使用一个称作 Controller 高度抽象来管理相对可删除 pod。因此与单独直接使用一个 pod 相比,在 Kubernets 里更常见的情况是使用一个 Controller来管理所有的 pod。 更多关于 Kubernetes 如何使用Controllers 实现 Pod 扩展和自我恢复的内容请参见 Pods and Controllers

Pods and Controllers

一个 Controllers 可以创建和管理很多个 Pod, 也提供复制、初始化,以及提供集群范围的自我恢复的功能。比如说: 如果一个节点宕机,Controller 将调度一个在其他节点上完全相同的 pod 来自动取代当前的 pod。

下面这些是 Controllers 里包含多个 pod 的具体例子:

普遍来说,Controllers 使用用户提供的 Pod 模版来创建、控制 pod。

Pod 模版

Pod 模版是为 pod 量身定制的,其中也包含了一些额外的对象,比如说:Replication Controllers, Jobs, 和 DaemonSets. Controllers 使用 pod 模版生成 pod.

与指定当前理想状态副本的方式相比, pod 模版更像一个饼干模具:一旦饼干出炉就与模具没有任何关系。 模版和实例之间不会互相纠缠, 随后在模版上的改动,或者切换到新模版都不会对已创建成功的 pod 产生影响。同样的, 通过 replication controller 创建的 pod 随后就可以直接更新。 这种方法从根本上简化了系统语义,同时增加了灵活性。

What’s next

Analytics

Create an Issue Edit this Page