目录
前言
一、Pod 基础概念
1.1 介绍
- Pod 是 kubernetes 中最小的资源管理组件,Pod 也是最小化运行容器化应用的资源对象。
- 一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着 Pod 来进行支撑和扩展 Pod 功能的,例如:
- 用于管理 Pod 运行的 StatefulSet 和 Deployment 等控制器对象;
- 用于暴露 Pod 应用的 Service 和 Ingress对象;
- 为Pod提供存储的 PersistentVolume 存储资源对象等。
1.2 Pod 使用方式
在Kubrenetes集群中 Pod 有如下两种 使用方式:
- 一个Pod中运行一个容器。每个Pod中一个容器 的模式是最常见的用法,在这种使用方式中,你可以把Pod想象成是单个容器的封装, kuberentes 管理的是 Pod 而不是直接管理容器。
- 在一个Pod中同时运行多个容器。一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个 service 单位,比如一个容器共享文件,另一个 “sidecar” 容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。
1.3 工作方式
- 一个Pod下的容器必须运行于同一节点上。现代容器技术建议一个容器只运行一个进程,该进程在容器中 PID 命令空间中的进程号为 1,可直接接收并处理信号,进程终止时容器生命周期也就结束了。
- 若想在容器内运行多个进程,需要有一个类似 Linux 操作系统 init 进程的管控类进程,以树状结构完成多进程的生命周期管理。运行于各自容器内的进程无法直接完成网络通信,这是由于容器间的隔离机制导致,k8s中的 Pod 资源抽象 正是解决此类问题,Pod 对象是一组容器的集合,这些容器共享Network、UTS 及 IPC命令空间,因此具有相同的域名、主机名
和 网络接口,并可通过IPC直接通信。
1.4 基础容器 pause
- Pod 资源中针对各容器提供网络命令空间等共享机制的是底层 基础容器 pause,基础容器(也可称为父容器) pause 就是为了管理Pod容器间的共享操作。
- 这个父容器需要能够准确地知道如何去创建共享运行环境的容器,还能管理这些容器的生命周期。为了实现这个父容器的构想,kubernetes中,用 pause容器来作为一个Pod中所有容器的父容器。
- 这个pause容器有两个核心的功能:
- 一是它提供整个Pod的Linux命名空间的基础;
- 二来启用PID命名空间,它在每个Pod中都作为PID为1进程(init进程),并回收僵尸进程。
11
pause 容器使得Pod中的所有容器可以共享两种资源:网络 和 存储。
● 网络:
- 每个Pod都会被分配一个唯一的地址。
- Pod中的所有容器共享网络空间,包括IP地址和端口。
- Pod内部的容器可以使用localhost互相通信。
- Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)。
● 存储:
- 可以 Pod指定多个共享的 Volume。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失
1.5 Pod 的分类
通常把Pod分为两类: