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 

更多推荐