k8s持久化存储:emptyDir
k8s**emptyDir类型的Volume是在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。**
创建一个pod,挂载临时目录emptyDir
vim emptydir.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-empty
spec:
containers:
- name: container-empty
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /cache
name: cache-volume ##与volumes中的name保持一致
volumes:
- emptyDir: {}
name: cache-volume
持久化存储:hostPath
hostPath Volume是指Pod挂载宿主机上的目录或文件。 hostPath Volume使得容器可以使用宿主机的文件系统进行存储,hostpath(宿主机路径):节点级别的存储卷,在pod被删除,这个存储卷还是存在的,不会被删除,所以只要同一个pod被调度到同一个节点上来,在pod被删除重新被调度到这个节点之后,对应的数据依然是存在的。
创建一个pod,挂载hostPath存储卷
vim hostpath.yaml

用 kubectl get pod -owide 查看挂在哪个node上,在该node上的挂载目录上创建文件或写入内容,
再回到master服务器上查看kubectl exec test-hostpath -- ls /usr/share/nginx/html


**hostpath存储卷缺点 **
单节点,pod删除之后重新创建必须调度到同一个node节点,数据才不会丢失
k8s持久化存储:nfs
nfs支持多个客户端挂载,可以创建多个pod,挂载同一个nfs服务器共享出来的目录;但是nfs如果宕机了,数据也就丢失了,所以需要使用分布式存储,常见的分布式存储有glusterfs和cephfs
以k8s的控制节点作为NFS服务端(每个节点都要安装)
yum install -y nfs-utils
在宿主机创建NFS需要的共享目录mkdir /data
配置nfs共享服务器上的/data目录 vim /etc/exports
/data 192.168.166.0/24(rw,sync,no_root_squash,no_subtree_check)
启服务:systemctl start nfs
查看共享节点是否启用exportfs -arv

再node节点上查看showmount -e 192.168.11.160

*创建Pod,挂载NFS共享出来的目录
vim nfs.yml


k8s持久化存储: PVC
PersistentVolume(PV)是群集中的一块存储,由管理员配置或使用存储类动态配置。 它是集群中的资源,就像pod是k8s集群资源一样。 PV是容量插件,如Volumes,其生命周期独立于使用PV的任何单个pod。
pv是集群级别资源
PersistentVolumeClaim(PVC)是用户使用存储的请求。 它类似于pod。Pod消耗节点资源,PVC消耗存储资源。 pod可以请求特定级别的资源(CPU和内存)。 pvc在申请pv的时候也可以请求特定的大小和访问模式(例如,可以一次读写或多次只读)
在宿主机创建NFS需要的共享目录 mkdir /data/v{1..10} -p
配置nfs共享宿主机上的/data/v1..v10目录 vim /etc/exports

重新加载配置,使配置成效 exportfs -arv
创建pv vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: v1
spec:
capacity:
storage: 1Gi #pv的存储空间容量
accessModes: ["ReadWriteOnce"]
nfs:
path: /data/v1 #把nfs的存储空间创建成pv
server: 192.168.11.160 #nfs服务器的地址
apiVersion: v1
kind: PersistentVolume
metadata:
name: v2
spec:
capacity:
storage: 2Gi
accessModes: ["ReadWriteMany"]
nfs:
path: /data/v2
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v3
spec:
capacity:
storage: 3Gi
accessModes: ["ReadOnlyMany"]
nfs:
path: /data/v3
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v4
spec:
capacity:
storage: 4Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/v4
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v5
spec:
capacity:
storage: 5Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/v5
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v6
spec:
capacity:
storage: 6Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/v6
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v7
spec:
capacity:
storage: 7Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/v7
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v8
spec:
capacity:
storage: 8Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/v8
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v9
spec:
capacity:
storage: 9Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/v9
server: 192.168.11.160
apiVersion: v1
kind: PersistentVolume
metadata:
name: v10
spec:
capacity:
storage: 10Gi
accessModes: ["ReadWriteOnce","ReadWriteMany"]
nfs:
path: /data/v10
server: 192.168.11.160
更新资源清单文件 kubectl apply -f pv.yaml

创建pvc,和符合条件的pv绑定 *vim pvc.yml


vim pod-pvc.yml

kubectl create -f pod-pvc.yml
