扩展
Kubernetes 给出的解决方案是 PersistentVolume 和 PersistentVolumeClaim。
PersistentVolume (PV) 是外部存储系统中的一块存储空间,由管理员创建和维护。
PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。
一、部署nfs
1、在k8s-master和k8s-node上下载nfs
yum -y install nfs-utils nfs-common
2、创建/nfsdata、授权
mkdir /nfsdata
chmod 666 /nfsdata
3、编辑exports文件
vim /etc/exports
/nfsdata *(rw,no_root_squash,no_all_squash,sync)(给了读写,允许root用户和普通用户访问)
4、配置生效启动rpc和nfs
systemctl start rpcbind
systemclt start nfs
二、部署pv
1、创建文件
mkdir k8s.pv && cd k8s.yaml
vim nfs-pv1.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv1
spec:
capacity: # 指定 PV 的容量
storage: 1Gi # pv容量多大
accessModes: # 访问模式
- ReadWriteOnce # Once一次读写 Modes#多次读写
persistentVolumeReclaimPolicy: Recycle #支持的策略(Recycle清除PV中的数据)
storageClassName: nfs # 存储类型 nfs分类
nfs:
path: /nfsdata
server: 192.168.153.148 #指定nfs服务器所在的机器的地址
2、创建资源
# kubectl apply -f nfs-pv1.yml
查看
# kubectl get pv
STATUS
为Available
,表示mypv1
就绪,可以被 PVC 申请。
三、创建pvc
1、vim nfs-pvs1.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc1
spec:
accessModes:
- ReadWriteOnce
resources: # 资源
requests: # 请求,申请
storage: 1Gi
storageClassName: nfs
2、创建资源
kubectl apply -f nfs-pvs1.yml
查看资源
kubectl apply -f pvc
四、创建pod
1、vim nfs-pod1.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod1
spec:
containers:
- name: mypod1
image: busybox
args: #引入变量
- /bin/sh
- -c
- sleep 30000 #睡眠3万秒
volumeMounts:
- mountPath: "/mydata"
name: mydata
volumes:
- name: mydata
persistentVolumeClaim:
claimName: mypvc1 #指定pvs的元数据名字
2、创建资源
# kubectl apply -f nfs-pod1.yml
3、验证
# kubectl exec -it mypod1 /bin/sh
/ # ls mydata/
/ # echo "youngfit" > mydata/hello.txt
/ # ls mydata/
hello.txt
/ # exit# ls /nfsdata/ #也可在nfs的共享目录中查看到,说明卷共享成功
hello.txt# cat /nfsdata/hello.txt
youngfit
五、PV的回收
一、1、删除pod、pvs
# kubectl delete pod mypod1
# kubectl selete pvs mypvs1
删除pvc之后pv的状态变为Available,,此时解除绑定后则可以被新的 PVC 申请。
/nfsdata文件中的文件被删除了
2、查看pv的状态
# kubectl get pv
二、回收策略已经变为 Retain
1、
重新创建mypvc1、重新创建pod,引用mypvc1
# kubectl apply -f nfs-pvc1.yml
# kubectl apply -f pod1.yml
2、进入pod中,创建文件
# kubectl exec -it mypod1 /bin/sh
/ # echo 'youngfit' > mydata/hello.txt
/ # ls mydata/
hello.txt
/ # exit3、在nfs目录下检验
# ls /nfsdata/
hello.txt# cat /nfsdata/hello.txt
youngfit
2、删除pod、pvs
# kubectl delete -f pod1.yml
pod "mypod1" deleted# ls /nfsdata/
hello.txt
删除pvc(mypvc1)
# kubectl delete pvc mypvc1
persistentvolumeclaim "mypvc1" deleted# ls /nfsdata/
hello.txt# cat /nfsdata/hello.txt
youngfit发现数据仍然保留