简单的方式

在deployment是mout挂载的方式映射到物理机,然后使用name管理,例如容器的name和物理机的name相同,就可以进行挂载,类似于bindmount。有个缺点,受容器影响,当容器删除,数据也就没有了。

emptyDir方式持久化

在相同的pod中,所有容器使用同一个持久卷,生命周期和pod一致,不受容器的影响,把容器删掉数据也不会丢失。

apiVersion: v1
kind: Pod
metadata:
  name: busy111-busy222
spec:
  containers:
  - name: busy111
    image: busybox
    volumeMounts:
    - name: share-volume
      mountPath: /busy111_dir # 创建卷的目录
    args:
    - /bin/sh
    - -c 
    - echo "that's busybox111" > /busy111_dir/busy111; sleep 30000000
 
  - name: busy222
    image: busybox
    volumeMounts:
    - name: share-volume
      mountPath: /busy111_dir # 同一个券
    args:
    - /bin/sh
    - -c
    - cat /busy111_dir/busy111; sleep 30000   # 看第一个容器创建的文件
    
  volumes:
  - name : share-volume
    emptyDir: {}    # 类型,在pod内共享

运行结果:
在这里插入图片描述
目录在这里
在这里插入图片描述

外部存储,创建PV

可以是Fsadfs、NFS等

PV : 连接外部层出
PVC: 申请外部存储的空间

  1. yum -y install nfs-utils.x86_64 rpcbind.x86_64 -y
  2. mkdir -p /nfsdata/pv1
  3. echo "/nfsdata *(rw,no_root_squash,sync)" > /etc/exports # 设置’NFS共享
  4. 创建PV.yaml
apiVersion: v1
kind: PersistentVolume #设置 PV
metadata:
  name: mypv1
spec:
  capacity:   # 设置PV容量
    storage: 1Gi
  accessModes:
    - ReadWriteOnce  #连接权限
     # 三种连接权限 1. ReadWriteOnce :单节点可读写  2.ReadOnlyMany 多节点只读 3. ReadWriteMany 多节点可读写
  persistentVolumeReclaimPolicy: Recycle  #数据回收策略
     # 两种策略 1. Recycle 可回收循环使用 2. Retain 保留的,当删掉PV或者PVC数据会被保留。
  storageClassName: nfs-test #定义当前存储的名字
  nfs: # 用的什么协议,如果是fsdtdfs,就不能写nfs
    path: /nfsdata/pv1 #nfs的路径
    server: 192.168.42.122  # nfs服务器地址

创建成功,可以看到状态是 Available 可用,如果是 Bound 则说明是被绑定,不可用。
在这里插入图片描述

  1. 申请数据,创建PVC
apiVersion: v1
kind: PersistentVolumeClaim #创建PVC
metadata:
  name: mypvc1
spec:
  accessModes:
    - ReadWriteOnce # 权限
  resources: # 资源
    requests:
      storage: 1Gi
  storageClassName: nfs-test #请求PV 资源,这里是PV的名字

可以看到已经pv与pvc已经绑定
在这里插入图片描述

  1. 创建Pod使用pvc name进行挂载
apiVersion: v1
kind: Pod
metadata:
  name: mypod1
spec:
  containers:
  - name: mypod1
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 3000000
    volumeMounts: # 挂载
    - name: mydata
      mountPath: /mydata

  volumes:
  - name: mydata
    persistentVolumeClaim:
      claimName: mypvc1 # pvc的name

在这里插入图片描述

删除的顺序

删除 pod > pvc > pv
删除pvc之前数据都在

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐