Pod是生命周期是短暂,容器销毁时,保存在容器内部文件系统中的数据都会被清除。
为了持久化保存容器的数据,这里引入了kubernetes Volume,k8s volume是独立于容器,pod中容器被销毁或重建,但volume会被保留。本质上k8s volume是一个目录,k8s提供了各种backend后端的抽象,用户在使用的时候不需要关心数据存放在本地节点还是cloud上,对用户来说,所有volume只是一个目录。
重要概念:
emptyDir(基于node节点本地存储和pod同生同灭),hostPath(基于node节点本地存储,独立于pod),外部Storage Provider(云磁盘,如AWS,Azure,Ali等),没有PV/PVC的概念
PV和PVS:
k8d给出自己的云磁盘解决方案: Presistent Volume(外部存储空间,由管理员创建和维护,独立于pod) 和 Presistent Volume Cliam(是对PV的cliam申请,由普通用户创建和维护,分配给pod)
1. emptyDir Volume的生命周期和Pod一致, pod删除的同时,k8s的node节点上的共享卷也会自动删除。initcontainer的volume会使用。
2.HostPath需要使用k8s或docker内部数据的应用则需要使用
运行一个需要访问 Docker 引擎内部机制的容器,挂载 /var/lib/docker 路径。
在容器中运行 cAdvisor 时,以 hostPath 方式挂载 /sys。
比如 kube-apiserver 和 kube-controller-manager 就是这样的应用,通过
kubectl edit --namespace=kube-system pod kube-apiserver-k8s-master
个人示例:
(weops) [root@node201 volume]# cat hostpathvolume.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-hostpath-volume
spec:
containers:
- name: pod-hostpathvolume
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- name: hostpath-dir-volume #挂载hostpath目录
mountPath: /usr/share/nginx/html
- name: hostpath-file-volume #挂载hostpath目录下文件
mountPath: /tmp/test.conf
volumes:
- name: hostpath-dir-volume
hostPath:
# 宿主机目录
path: /root/k8s/volume/hostpath_dir
type: DirectoryOrCreate # 如果目录不存在则创建(可创建多层目录)
- name: hostpath-file-volume
hostPath:
# 宿主机文件
path: /root/k8s/volume/hostpath_dir/test.conf
type: FileOrCreate # 如果文件不存在则创建。 前提:文件所在目录必须存在,目录不存在则不能创建文件
3.localvolume