一、前言
Pod 是 kubernetes 的最小工作单元,每个 Pod 包含一个或多个容器。
Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。
Kubernetes 引入 Pod 主要基于下面两个目的:
1. 可管理性
有些容器天生就是需要紧密联系,一起工作。
Pod 提供了比容器更高层次的抽象,将它们封装到一个部署单元中。
Kubernetes 以 Pod 为最小单位进行调度、扩展、共享资源、管理生命周期。
2. 通信和资源共享
Pod 中的所有容器使用同一个网络 namespace,即相同的 IP 地址和 Port 空间。
它们可以直接用 localhost 通信。
同样地,这些容器可以共享存储,当 kubernetes 挂载 volumn 到 Pod,
本质上是将 volumn 挂载到 Pod 中的每一个容器。
二、验证 Pod 共享存储
首先,我们创建一个 Pod,包含两个 busybox 容器,busybox.yaml 文件内容如下:
apiVersion: v1
kind: Pod
metadata:
name: busybox
spec:
containers:
- image: busybox
name: busybox-01
command: ["tail"]
args: ["-f","/etc/hosts"]
volumeMounts:
- mountPath: /cache
name: cache-volume
- image: busybox
name: busybox-02
command: ["tail"]
args: ["-f","/etc/hosts"]
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
执行如下命令,创建 Pod:
# kubectl create -f busybox.yaml
打开两个终端,分别 exec 到 busybox-01 和 busybox-02
# kubectl exec -it busybox -c busybox-01 sh
# kubectl exec -it busybox -c busybox-02 sh
A. 验证普通目录是否共享
在 busybox-01 创建 /home/ff 文件夹
在 busybox-02 查看 /home 目录
结论:普通目录不共享
B. 验证特殊文件是否共享(hosts、hostname、resolv.conf)
在 busybox-01 修改文件内容
在 busybox-02 查看文件内容
结论:特殊文件共享(hosts、hostname、resolv.conf)
C. 验证挂载目录是否共享
在 busybox-01 的 /cache 挂载目录建立文件
在 busybox-02 查看其内容
结论:挂载目录可以实现共享(hosts、hostname、resolv.conf)