k8s数据持久化PV&PVC模板

本文详细介绍了 Kubernetes 中数据持久化的两种方式:EmptyDir 和通过 PV/PVC 使用外部存储。EmptyDir 方式在 Pod 生命周期内持久化数据,而 PV/PVC 结合 NFS 可实现跨 Pod 的持久共享存储。通过创建 PV、PVC 并配置 Pod 挂载,确保数据在容器删除后仍能保留。同时,文章讲解了 PV、PVC 的生命周期管理和删除顺序,强调了正确使用存储资源的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的方式

在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之前数据都在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

king config

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值