We couldn't find a match for given <KEYWORD>, please try again.

什么是 Kubernetes Pod?

Pod 是 Kubernetes 中最小的执行单元。一个 Pod 可封装一个或多个应用。Pod 在本质上是非常短暂的,如果 Pod(或在其上运行 Pod 的节点)发生故障,Kubernetes 可以自动创建该 Pod 的新副本以继续运行。Pod 包括一个或多个容器(例如 Docker 容器)。

Pod 还提供环境依赖关系,包括持久存储卷(对集群中的所有 Pod 都是永久性且可用的存储)以及在 Pod 内运行容器所需的配置数据。

5 分钟了解 Kubernetes

Kubernetes 使用现状 2021

Pod 的作用是什么?

Pod 代表在集群上运行的进程。通过将 Pod 限制为单个进程,Kubernetes 可以报告在集群中运行的每个进程的运行状况。Pod 具有:

  • 唯一的 IP 地址(允许它们相互通信)
  • 持久存储卷(根据需要)
  • 用于确定容器应如何运行的配置信息

尽管大多数 Pod 均包含单个容器,但许多 Pod 会包含一些容器,这些容器紧密协作以执行所需的功能。

Pod 具有哪些优势?

当 Pod 包含多个容器时,它们之间的通信和数据共享将得到简化。由于 Pod 中的所有容器均共享同一网络 Namespace,因此它们可以通过 localhost 相互定位并进行通信。Pod 可以通过使用另一个 Pod 的 IP 地址或引用驻留在另一个 Pod 中的资源来相互通信。

Pod 可以包括当 Pod 启动时运行的容器,例如在应用容器运行之前执行所需的启动。此外,Pod 还可简化可扩展性,支持根据需求变化自动创建和关闭副本 Pod。

Pod 的工作原理是什么?

Pod 由称为控制器的工作负载资源创建,这些控制器可管理集群中 Pod 的部署、复制和运行状况。例如,如果集群中的一个节点发生故障,则控制器会检测到该节点上的 Pod 无响应,并在其他节点上创建替换 Pod。

三种最常见的控制器类型是:

  • 适用于临时性批处理类型的作业,将运行任务直至完成
  • 适用于无状态和持久性应用的部署,例如 Web 服务器(HPPT 服务器)
  • 适用于有状态和持久性应用的 StatefulSet,例如数据库

如果一个 Pod 拥有多个容器,则可在集群中的同一台服务器(无论是虚拟机还是物理服务器)上对这些容器进行调度。Pod 中的所有容器均共享其资源和依赖关系,并且可以协调它们的执行和终止。例如,Pod 可以包含在应用容器运行之前运行的“init”容器,从而为后续应用设置环境。

Pod 几乎始终由控制器创建,然后控制器可以自动管理 Pod 生命周期,包括替换发生故障的 Pod、在必要时复制 Pod,以及在完成或不再需要 Pod 时将 Pod 从集群节点中清除。

控制器使用 Pod 模板中的信息来创建 Pod,控制器可确保正在运行的 Pod 与 Pod 模板中定义的部署相匹配,例如,通过创建副本来匹配部署中定义的数量。

Pod 如何相互通信?

创建 Pod 时,会为其分配自己的唯一 IP 地址。如果 Pod 中有多个容器,则它们只需使用 localhost 即可相互通信。Pod 外部的通信是通过公开端口来实现的。集群中的 Pod 之间的通信充分利用以下事实:Kubernetes 为集群中的每个 pid 分配一个集群专用 IP 地址,从而无需在 Pod 之间明确创建链路或将容器端口映射到主机端口。通过这种方式,集群中的每个 Pod 都可以“看到”彼此,而无需 NAT。

基本的 kubectl 命令有哪些?

Kubectl 提供了许多命令,允许用户创建 Pod、使用部署运行它们、检查正在运行的 Pod 的状态以及停止不再需要的 Pod。JSON(JavaScript 对象表示法)或 YAML(YAML 不是标记语言)命令对编码命令均有效。

下面列出了常用的 kubectl 命令:

获取

kubectl get 命令将显示有关一个或多个资源的表格信息。可以使用标签选择器筛选信息。可以仅显示现有 Namespace 中的信息,也可以显示集群中所有 Namespace 的信息。
命令“kubectl api-resources”将生成您可以“获取”有关信息的所有受支持资源的列表。kubectl get 命令的一般格式为:

$ kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...](TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...)[flags]

创建 Pod

使用 create 命令创建 Pod,格式为:

$ kubectl create -f FILENAME。

例如,命令:

kubectl create -f ./mypod.yaml 将从 YAML 文件“mypod”创建一个新的 Pod

删除 Pod

命令“kubectl delete -f ./mypod.yaml”将从集群中删除 Pod“mypod”。删除 Pod 是一个正常的过程;Pod 将在被强制终止之前持续运行一段宽限期(默认为 30 秒)。如果需要,可以使用 –grace-period 标记覆盖宽限期值。

相关解决方案和产品

企业就绪型 Kubernetes 运行时

跨多云基础架构简化运维。

Kubernetes 与 Docker

您应该选择哪些工具来成功使用容器?

Kubernetes 上的 Docker 容器

了解什么是容器Kubernetes 之后,下一步就是了解这两者如何协同运行。