k8s存储
存储[*]pod运行存储,删除pod的时候,pod里面写入的数据就没有了
一、本地存储
1、emptydir类型
[*]在pod所在的物理主机上生成的一个随机目录,也就是临时目录
[*]pod容器删除后,临时目录也会被删除
# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
resources: {}
volumeMounts:
- name: v1# 挂载v1的目录
mountPath: /data1 # 挂载到容器里面的/data1目录,不存在,会自动创建
volumes:
- name: v1 # 临时目录的名字为v1
emptyDir: {} # 创建一个临时目录
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
# 创建pod之后,查看pod调度在哪一个节点上面了
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod1 1/1 Running 0 4m50s 10.244.82.181 k-node1 <none> <none>
# 然后在node1上面查看pod1容器的详细信息
# crictl inspect 1a04aed59dd91 |grep -i mount -C3
"io.kubernetes.container.terminationMessagePolicy": "File",
"io.kubernetes.pod.terminationGracePeriod": "30"
},
"mounts": [
{
"containerPath": "/data1",
"hostPath": "/var/lib/kubelet/pods/99036af5-21a9-4af9-ac1c-f04e9c23dbed/volumes/kubernetes.io~empty-dir/v1",# node1上面创建的临时目录
--
"value": "443"
}
],
"mounts": [
{
"container_path": "/data1",
"host_path": "/var/lib/kubelet/pods/99036af5-21a9-4af9-ac1c-f04e9c23dbed/volumes/kubernetes.io~empty-dir/v1"
--
"root": {
"path": "rootfs"
},
"mounts": [
{
"destination": "/proc",
"type": "proc",
--
"path": "/proc/13150/ns/uts"
},
{
"type": "mount"
},
{
"type": "network",
# 进入这个临时目录即可
# pwd
/var/lib/kubelet/pods/99036af5-21a9-4af9-ac1c-f04e9c23dbed/volumes/kubernetes.io~empty-dir/v1
# ls
test
# pod删除后,临时目录也就被删除了2、hostPath
[*]有一个缺点,当删除了node1上面的pod后,node1上面有一个挂载目录,当再次创建pod后,调度在node2上面,因此就不行了,不能实现挂载,因为挂载目录在node1上面
[*]就是不能在各个节点上面进行同步
# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
resources: {}
volumeMounts:
- name: v1
mountPath: /data1
volumes:
- name: v1
hostPath:
path: /d1# 宿主机上不存在的话,会自动创建
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod1 1/1 Running 0 4m2s 10.244.82.182 k-node1 <none> <none>
# 这个宿主机目录是在节点上面创建,删除了pod这个目录依然存在
# ls -d d1
d1二、网络存储
1、NFS
[*]就是不管我的pod在哪一个节点上面运行,都能存储数据,因此NFS服务就可以实现了
1、搭建一个nfs服务器
[*]我是在master机器上面搭建的
# systemctl enable nfs-server --now
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
# mkdir /nfsdata
mkdir /test
chmod o+w /test # 需要加上权限,才能写入进去
# 编写一个配置文件
# cat /etc/exports
/nfsdata *(rw)
# 重启服务2、客户端挂载nfs
# 测试NFS服务器是否正常了
# mount 192.168.50.100:/nfsdata /test
# df -hT /test
Filesystem TypeSizeUsed Avail Use% Mounted on
192.168.50.100:/nfsdata nfs4 50G5.7G 44G12% /test3、编写一个pod
# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
resources: {}
volumeMounts:
- name: v1
mountPath: /data1
volumes:
- name: v1
nfs:
path: /nfsdata# nfs服务器挂载的目录,将这个目录挂载到容器里面了,
server: 192.168.50.100# nfs服务器地址
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}4、查看nfs挂载目录
# ls /nfsdata/
1.txt2.txt4.txt2、isccsi存储
[*]分一个区20G
[*]防火墙要关闭
# lsblk
NAME MAJ:MIN RMSIZE RO TYPE MOUNTPOINT
sr0 11:0 1 12.8G0 rom
nvme0n1 259:0 0 50G0 disk
├─nvme0n1p1 259:1 0500M0 part /boot
└─nvme0n1p2 259:2 0 49.5G0 part
└─cs_docker-root 253:0 0 49.5G0 lvm/
nvme0n2 259:3 0 20G0 disk
└─nvme0n2p1 259:4 0 20G0 part 2、安装target包
# yum -y install target*
# systemctl enable target --now
Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /usr/lib/systemd/system/target.service.3、配置iscsi
# 刚分区的盘不需要做格式化
# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls /
o- / ......................................................... [...]
o- backstores .............................................. [...]
| o- block ..................................
| o- fileio .................................
| o- pscsi ..................................
| o- ramdisk ................................
o- iscsi ............................................
o- loopback .........................................
# 创建一个block1
/> /backstores/blockcreate block1 /dev/nvme0n2p1
Created block storage object block1 using /dev/nvme0n2p1.
/> ls /
o- / ......................................................... [...]
o- backstores .............................................. [...]
| o- block ..................................
| | o- block1 ..
| | o- alua ...................................
| | o- default_tg_pt_gp .......
| o- fileio .................................
| o- pscsi ..................................
| o- ramdisk ................................
o- iscsi ............................................
o- loopback .........................................
/>
# 添加一个iscsi驱动器,有严格的格式要求
/> /iscsicreate iqn.2023-03.com.memeda:memeda
Created target iqn.2023-03.com.memeda:memeda.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/>
/> cd iscsi/iqn.2023-03.com.memeda:memeda/tpg1/
/iscsi/iqn.20...a:memeda/tpg1> ls
o- tpg1 .....................................
o- acls ................................................
o- luns ................................................
o- portals ..........................................
o- 0.0.0.0:3260 ...........................................
/iscsi/iqn.20...a:memeda/tpg1>
/iscsi/iqn.20...a:memeda/tpg1> luns/ create /backstores/block/block1
Created LUN 0.
/iscsi/iqn.20...a:memeda/tpg1> ls
o- tpg1 .....................................
o- acls ................................................
o- luns ................................................
| o- lun0 .....
o- portals ..........................................
o- 0.0.0.0:3260 ...........................................
/iscsi/iqn.20...a:memeda/tpg1>
/iscsi/iqn.20...a:memeda/tpg1> acls/ create iqn.2023-03.com.memeda:acl
Created Node ACL for iqn.2023-03.com.memeda:acl
Created mapped LUN 0.
/iscsi/iqn.20...a:memeda/tpg1> ls
o- tpg1 .....................................
o- acls ................................................
| o- iqn.2023-03.com.memeda:acl .................
| o- mapped_lun0 ......................
o- luns ................................................
| o- lun0 .....
o- portals ..........................................
o- 0.0.0.0:3260 ...........................................
/iscsi/iqn.20...a:memeda/tpg1>
/iscsi/iqn.20...a:memeda/tpg1> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json4、客户端安装iscsi客户端
# yum -y install iscsi*
# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:56a1ef745c4e
# 修改这个iscsi号
# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2023-03.com.memeda:acl
# 重启iscsid服务5、编写pod配置文件
# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
resources: {}
volumeMounts:
- name: v1
mountPath: /data
volumes:
- name: v1
iscsi:
lun: 0
targetPortal: 192.168.50.100:3260
iqn: iqn.2023-03.com.memeda:memeda
readOnly: false
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
# lun映射到node1上面的sad,然后映射到容器里面
# lsblk
NAME MAJ:MIN RMSIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G0 disk /var/lib/kubelet/pods/0a64972c-
sr0 11:0 1 12.8G0 rom
nvme0n1 259:0 0 50G0 disk
├─nvme0n1p1 259:1 0500M0 part /boot
└─nvme0n1p2 259:2 0 49.5G0 part
└─cs_docker-root
253:0 0 49.5G0 lvm/三、持久化存储
[*]pv和pvc
[*]底层用的还是传统存储
[*]pv就是一个一个块,pvc就是使用这个块的
[*]pvc与pv进行绑定
1、pv和pvc
[*]pv底层还是使用的存储,nfs或者iscsi存储,或者其他的,把他做成了一个pv
[*]pv做成了之后,是公共的,所有名称空间下都能看到,全局可见的
[*]在一个名称空间下面创建一个pvc绑定pv
[*]在一个名称空间下面创建一个pod绑定pvc就能使用了
2、pv和pvc实验(静态创建)
[*]nfs充当底层存储
[*]首先搭建一个nfs服务
1、创建pv
# cat pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
spec:
capacity: # 指定这个pv的大小
storage: 5Gi
accessModes: # 模式
- ReadWriteOnce
nfs:
server: 192.168.50.100 # 这个pv使用的就是nfs的存储
path: /nfsdata
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv01 5Gi RWO Retain Available 2m19s
# Retain 是回收的策略
# Available 可用的
# RWO 权限
# claim为空的,表示pvc还没有绑定1、pv的策略
[*]persistentVolumeReclaimPolicy 字段控制
[*]retain策略,保留策略
[*]删除pod,pvc,里面的数据是保留的,pv也是保留的
[*]静态的创建pv和pvc的话,策略默认是reatin
# 首先删除pod,然后删除pvc,pv状态就变成了released状态了
# 如果在创建一个pvc的话,就不能绑定了,因为状态必须是available
# 如果还要再次使用这个pv的话,就删除这个pv,在创建一个pv,绑定底层的nfs数据
[*]delete策略
[*]删除了pod,pvc的话,pv也会被删除掉
[*]里面的数据也会被删除掉
[*]delete策略,只能用动态配置,静态配置不能
[*]recycle策略被弃用了
2、pv的状态
状态名含义常见触发场景Available尚未被任何 PVC 绑定,可被申领刚创建出来,或回收策略为 Retain 且已被解除绑定Bound已与某条 PVC 成功绑定kubectl get pv 最常见的状态Released绑定的 PVC 已被删除,但 PV 尚未被回收ReclaimPolicy=Retain 时,PVC 删除后 PV 进入此状态Failed自动回收(Recycle/Delete)操作失败例如底层存储删除卷时返回错误3、pv的访问模式
[*]ReadWriteOnce RWO单节点读写
[*]ReadOnlyManyROX多节点只读
[*]ReadWriteManyRWX多节点读写
[*]ReadWriteOncePod单节点pod读写
访问模式全称含义典型场景ReadWriteOnceRWO单节点读写大多数块存储(EBS、Ceph RBD、iSCSI);一个节点挂载,可读写。ReadOnlyManyROX多节点只读共享文件存储(NFS、CephFS、GlusterFS);多个节点可同时挂载读取。ReadWriteManyRWX多节点读写分布式文件系统(NFS、CephFS、Portworx);多个节点同时挂载读写。ReadWriteOncePodRWOP单节点单 Pod 读写1.22+ 引入,针对 CSI 卷;同一节点上只允许一个 Pod 挂载读写,适合 StatefulSet 精细化调度。2、创建pvc
[*]一个pv只能与一个pvc进行绑定
# cat pvc1.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-1
spec:
accessModes:
- ReadWriteOnce # 权限
resources:
requests:# 需要的大小
storage: 5Gi
# 通过权限和大小进行匹配pv
# 多个相同的pvc的话,就是随机匹配pvc
# 一个pv只能被一个pvc进行绑定
# pvc的容量小于等于pv的容量才能匹配到
# 如果有多个pvc的话,那就需要看谁创建的快,就先匹配
# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-1 Bound pv01 5Gi RWO 52s
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv01 5Gi RWO Retain Bound default/pvc-1 7m14s1、pvc的状态
状态名含义常见触发场景Pending尚未找到/绑定到合适的 PV集群里没有匹配容量、AccessMode、StorageClass 的 PV;或动态供给未就绪Bound已成功绑定到一个 PV正常使用的常态Lost所绑定的 PV 意外消失(对象被删除或后端存储不可用)手动删除 PV 或底层存储故障TerminatingPVC 正在删除中(对象处于 metadata.deletionTimestamp 非空)执行 kubectl delete pvc 后,等待回收或 finalizer 完成3、pv和pvc绑定
[*]受到权限和大小和storagename(存储类名称,标识)这个三个参数的影响
[*]storagename是优先级最高的,即使满足权限和大小,pvc没有这个storageClassName的话,就不能绑定,只有pvc有这个storageClassName的才能绑定
# cat pv2.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02
spec:
storageClassName: abc# 存储卷的名称为abc
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.50.100
path: /nfsdata
# cat pvc2.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-2
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv02 5Gi RWO Retain Available abc 49s
# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-2 Pending 25s
# 只有这个pvc有storageClassName才能匹配到4、pod使用pvc
# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
resources: {}
volumeMounts:
- name: mypv
mountPath: /var/www/html# 挂载到容器里面的/var/www/html目录下
restartPolicy: Always
volumes:
- name: mypv# 卷的名字
persistentVolumeClaim:# 用pvc来做这个卷
claimName: pvc-1# pvc的名字
status: {}
# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod2 1/1 Running 0 2m22s
# kubectl exec -ti pod2 -- /bin/bash
# 查看挂载点
root@pod2:/var/www/html# df -hT /var/www/html/
Filesystem TypeSizeUsed Avail Use% Mounted on
192.168.50.100:/nfsdata nfs4 50G5.7G 44G12% /var/www/html
# 写入数据
root@pod2:/var/www/html# echo 1 > 1.txt
# 发现,最底层的作为pv的nfs存储里面也有数据
# ls /nfsdata/
1.txt
# 这个pod调度在node1节点上,也可以查看到挂载的情况
# 这个pod的挂载目录也会创建出来的
# df -hT| grep -i nfs
192.168.50.100:/nfsdata nfs4 50G5.7G 44G12% /var/lib/kubelet/pods/2ce30dc7-4076-482f-9d78-d5af92d03967/volumes/kubernetes.io~nfs/pv01
# cd /var/lib/kubelet/pods/2ce30dc7-4076-482f-9d78-d5af92d03967/volumes/kubernetes.io~nfs/pv01
# ls
1.txt2.txt5、删除pod,pv的状态
[*]怎么处理
# kubectl delete -f pod2.yaml
pod "pod2" deleted
# kubectl delete -f pvc1.yaml
persistentvolumeclaim "pvc-1" deleted
# pv的状态为released
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv01 5Gi RWO Retain Released default/pvc-1 81s
# 删除relf下面的字段,就能重新变成available了
# kubectl edit pv pv01
persistentvolume/pv01 edited
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv01 5Gi RWO Retain Available 2m26s
# 或者删除pv,然后重新创建即可3、pv和pvc和pod
[*]首先pv是一个块,底层使用的是一个存储,用来做成pv,使用nfs也可以,或者其他的
[*]pvc用来绑定一个pv,一个pv只能绑定一个pvc
[*]pod的持久化存储的话,就是使用的pvc来实现的,pvc挂载到容器的目录下
[*]在这个目录下面写入数据的话,就写入到了最底层的存储里面了
[*]其实pv和pvc都是虚拟出来的,最底层的还是一个存储
[*]pv和pvc方便集中管理
[*]最底层的nfs或者其他的也可以管理,也就是分权管理
[*]也就是多级映射关系,抽象出来的
[*]最底层的nfs,映射到pv,pv映射到pvc,最后以卷的形式挂载到pod里面即可
3、nfs配置动态卷的供应流程
[*]就是在定义pvc的时候,自动的创建出pv
[*]依靠的就是nfs驱动器
[*]默认的pv策略是delete,可以修改的为retain
[*]创建一个存储类,映射到nfs存储,然后创建一个pvc就会自动的创建一个pv
1、配置nfs服务器
# cat /etc/exports
/nfsdata *(rw)2、配置nfs驱动
# 先git clone 一些这个文件
# git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
# 进入到deploy目录下
# pwd
/root/volume/nfs-deploy/nfs-subdir-external-provisioner/deploy
# 如果名称空间不是默认的default的话,需要修改名称空间,如果是默认的则无需操作
# ls
class.yaml kustomization.yamlrbac.yaml test-pod.yaml
deployment.yamlobjects test-claim.yaml
# kubectl apply -f rbac.yaml
serviceaccount/nfs-client-provisioner created
clusterrole.rbac.authorization.k8s.io/nfs-client-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/run-nfs-client-provisioner created
role.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
rolebinding.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
# 修改了deployment.yaml
- name: nfs-client-provisioner
image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
# 如果可以拉取到这个镜像,就无需修改,不行的话,就需要更换镜像
registry.cn-hangzhou.aliyuncs.com/cloudcs/nfs-subdir-external-provisioner:v4.0.2
# 这个是别人的网络仓库
# 修改驱动文件中的nfs的一些配置,修改deployment.yaml
- name: NFS_SERVER
value: 192.168.50.100
- name: NFS_PATH
value: /nfsdata
volumes:
- name: nfs-client-root
nfs:
server: 192.168.50.100
path: /nfsdata
# kubectl apply -f deployment.yaml
deployment.apps/nfs-client-provisioner created
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-9f74c968-2lm9k 1/1 Running 0 15s
# 这个pod就跟nfs存储做了一个映射,当创建一个pvc(使用的存储类是nfs-client)的时候,就会自动的创建一个pv3、创建一个存储类
# cat class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiverOnDelete: "false"
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-client k8s-sigs.io/nfs-subdir-external-provisioner Delete Immediate false 37s
# 4、创建一个pvc
[*]创建一个pvc就会自动的创建一个pv
# cat pvc3.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc3
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs-client# 使用的存储类是nfs-client,就会自动的创建pv
resources:
requests:
storage: 5Gi
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-37889731-cc0f-4485-8647-0bc46a435faf 5Gi RWO Delete Bound default/pvc3 nfs-client 9s
# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc3 Bound pvc-37889731-cc0f-4485-8647-0bc46a435faf 5Gi RWO nfs-client 13s5、创建一个pod
# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
resources: {}
volumeMounts:
- name: mypv
mountPath: /var/www/html
restartPolicy: Always
volumes:
- name: mypv
persistentVolumeClaim:
claimName: pvc3
status: {}
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-9f74c968-2lm9k 1/1 Running 0 20m
pod2 1/1 Running 0 70s
# 就会在nfsdata这个目录创建一个目录用来存储数据
# ls /nfsdata/
1.txt2.txtdefault-pvc3-pvc-37889731-cc0f-4485-8647-0bc46a435faf
# 写入一些数据
# ls /nfsdata/default-pvc3-pvc-37889731-cc0f-4485-8647-0bc46a435faf/
1122
# 删除pod和pvc
# kubectl delete -f pod2.yaml
pod "pod2" deleted
# kubectl delete -f pvc3.yaml
persistentvolumeclaim "pvc3" deleted
# 这个nfs的目录的名字就会修改
# ls /nfsdata/
archived-default-pvc3-pvc-3cd12cad-47a5-43f3-93a0-8e9a9d4a490c
# 因为这个是delete策略导致的,防止数据立即丢失四、总结
[*]本地存储的话,比较笨重
[*]静态逻辑
[*]先有一个最底层的nfs服务器,可以让别人挂载这个目录
[*]然后创建一个pv,pvc之间进行绑定
[*]创建一个pod绑定pvc,从而写数据,写的数据存储在nfs这个目录下
[*]动态的逻辑
[*]创建一个nfs服务器
[*]创建一个nfs的驱动器,映射到nfs存储,使用的还是nfs存储
[*]然后创建一个存储类,驱动器使用的是上面创建的
[*]创建一个pvc,存储类使用的nfs-client,这个驱动器就会自动的创建一个pv,也就是在nfs存储目录里面划分一个目录用于存储
[*]创建一个pod进行绑定pvc即可
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]