长久卷应用(nfs存储数据)
Kubernetes 为了使应用程序及其开发人员可能失常申请存储资源,防止解决存储设施细节,引入了 PV 和 PVC。创立 PV 有两种形式:
- 集群管理员通过手动形式动态创立利用所须要的 PV;
- 用户手动创立 PVC 并由 Provisioner 组件动态创建对应的 PV。
搭建nfs服务器(ip:192.168.0.29)
找一台服务器搭建nfs服务端, 我以centos7为例
装置nfs
yum -y install nfs-utils
#创立nfs目录
mkdir -p /nfs/data/
#批改权限
chmod -R 777 /nfs/data
#编辑export文件
vim /etc/exports
/nfs/data *(rw,no_root_squash,sync) (“*“代表所有人都能连贯,倡议换成具体ip或ip段,如192.168.20.0/24)
#配置失效
exportfs -r
#查看失效
exportfs
#启动rpcbind、nfs服务
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
#查看 RPC 服务的注册情况
rpcinfo -p localhost
#showmount测试
showmount -e 192.168.92.56
#所有node节点装置nfs客户端
yum -y install nfs-utils
systemctl start nfs && systemctl enable nfs
1.动态创立PV卷
增加pv卷对应目录,这里创立2个pv卷,则增加2个pv卷的目录作为挂载点。
#nfs服务器操作
#创立pv卷对应的目录
mkdir -p /nfs/data/pv001
mkdir -p /nfs/data/pv002
#配置exportrs
vim /etc/exports
/nfs/data *(rw,no_root_squash,sync)
/nfs/data/pv001 *(rw,no_root_squash,sync)
/nfs/data/pv002 *(rw,no_root_squash,sync)
#配置失效
exportfs -r
#重启rpcbind、nfs服务
systemctl restart rpcbind && systemctl restart nfs
第一步:集群管理员创立 NFS PV,NFS 属于 K8s 原生反对的 in-tree 存储类型。yaml 文件如下:
# cat nfs-pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv001
labels:
pv: nfs-pv001
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /nfs/data/pv001
server: 192.168.0.29
# cat nfs-pv2.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv002
labels:
pv: nfs-pv002
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /nfs/data/pv002
server: 192.168.0.29
配置阐明
配置阐明:
① capacity 指定 PV 的容量为 1G。
② accessModes 指定拜访模式为 ReadWriteOnce,反对的拜访模式有:
ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。
ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。
ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。
③ persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle,反对的策略有:
Retain – 须要管理员手工回收。
Recycle – 革除 PV 中的数据,成果相当于执行 rm -rf /thevolume/*。
Delete – 删除 Storage Provider 上的对应存储资源,例如 AWS EBS、GCE PD、Azure
Disk、OpenStack Cinder Volume 等。
④ storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 能够指定 class 申请相应 class 的 PV。
⑤ 指定 PV 在 NFS 服务器上对应的目录。
[root@vm192-168-0-79 ~]# kubectl apply -f pv1.yaml
persistentvolume/nfs-pv001 created
[root@vm192-168-0-79 ~]# kubectl apply -f pv2.yaml
persistentvolume/nfs-pv002 created
[root@vm192-168-0-79 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv001 1Gi RWO Recycle Available nfs 10m
nfs-pv002 1Gi RWO Recycle Available nfs 3m2s
# STATUS 为 Available,示意 pv就绪,能够被 PVC 申请。
第二步:用户创立 PVC,yaml 文件如下:
接下来创立一个名为pvc001,pvc002的pvc
# cat nfs-pvc1.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc001
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs
selector:
matchLabels:
pv: nfs-pv001
# cat nfs-pvc2.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc002
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs
selector:
matchLabels:
pv: nfs-pv002
[root@vm192-168-0-79 ~]# kubectl apply -f pvc1.yaml
persistentvolumeclaim/nfs-pvc001 created
[root@vm192-168-0-79 ~]# kubectl apply -f pvc2.yaml
persistentvolumeclaim/nfs-pvc002 created
[root@vm192-168-0-79 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv001 1Gi RWO Recycle Bound default/nfs-pvc001 nfs 12m
nfs-pv002 1Gi RWO Recycle Bound default/nfs-pvc002 nfs 5m
[root@vm192-168-0-79 ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-pvc001 Bound nfs-pv001 1Gi RWO nfs 15s
nfs-pvc002 Bound nfs-pv002 1Gi RWO nfs 15s
从 kubectl get pvc 和 kubectl get pv 的输入能够看到 pvc001 和pvc002别离绑定到pv001和pv002,申请胜利。留神pvc绑定到对应pv通过labels标签形式实现,也能够不指定,将随机绑定到pv。
第三步:用户创立利用,并应用第二步创立的 PVC。
# cat pod1.yaml
kind: Pod
apiVersion: v1
metadata:
name: nfs-pod001
spec:
containers:
- name: myfrontend
image: nginx:latest
volumeMounts:
- mountPath: "/var/www/html"
name: nfs-pv001
volumes:
- name: nfs-pv001
persistentVolumeClaim:
claimName: nfs-pvc001
# cat pod2.yaml
kind: Pod
apiVersion: v1
metadata:
name: nfs-pod002
spec:
containers:
- name: myfrontend
image: nginx:latest
volumeMounts:
- mountPath: "/var/www/html"
name: nfs-pv002
volumes:
- name: nfs-pv002
persistentVolumeClaim:
claimName: nfs-pvc002
与应用一般 Volume 的格局相似,在 volumes 中通过 persistentVolumeClaim 指定应用nfs-pvc001和nfs-pvc002申请的 Volume。
[root@vm192-168-0-79 ~]# kubectl apply -f pod1.yaml
pod/nfs-pod001 created
[root@vm192-168-0-79 ~]# kubectl apply -f pod2.yaml
pod/nfs-pod002 created
[root@vm192-168-0-79 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nfs-pod001 1/1 Running 0 62s
nfs-pod002 1/1 Running 0 7s
[root@vm192-168-0-79 ~]# kubectl exec nfs-pod001 touch /var/www/html/index001.html
[root@vm192-168-0-79 ~]# kubectl exec nfs-pod002 touch /var/www/html/index002.html
# 在nfs服务器验证
[root@vm192-168-0-29 pv001]# ls /nfs/data/pv001
index001.html
[root@vm192-168-0-29 pv001]# ls /nfs/data/pv002
index002.html
进入pod查看挂载状况
[root@vm192-168-0-79 ~]# kubectl exec -ti nfs-pod001 /bin/bash
root@nfs-pod001:/# df -h
...
192.168.0.29:/nfs/data/pv001 197G 2.8G 186G 2% /var/www/html
...
删除pv
删除pod,pv和pvc不会被删除,nfs存储的数据不会被删除。
[root@vm192-168-0-79 ~]# kubectl delete -f pod1.yaml
pod "nfs-pod001" deleted
[root@vm192-168-0-79 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv001 1Gi RWO Recycle Bound default/nfs-pvc001 nfs 38m
nfs-pv002 1Gi RWO Recycle Bound default/nfs-pvc002 nfs 31m
[root@vm192-168-0-79 ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-pvc001 Bound nfs-pv001 1Gi RWO nfs 26m
nfs-pvc002 Bound nfs-pv002 1Gi RWO nfs 26m
# nfs服务器查看
[root@vm192-168-0-29 pv001]# ls /nfs/data/pv001
index001.html
持续删除pvc,pv将被开释,处于 Available 可用状态,并且nfs存储中的数据被删除。
[root@vm192-168-0-79 ~]# kubectl delete -f pvc1.yaml
persistentvolumeclaim "nfs-pvc001" deleted
[root@vm192-168-0-79 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv001 1Gi RWO Recycle Available nfs 40m
nfs-pv002 1Gi RWO Recycle Bound default/nfs-pvc002 nfs 32m
# nfs服务器查看
[root@vm192-168-0-29 pv001]# ls /nfs/data/pv001
[root@vm192-168-0-29 pv001]#
持续删除pv
[root@vm192-168-0-79 ~]# kubectl delete -f pv1.yaml
persistentvolume "nfs-pv001" deleted
动态创建pv
我的项目地址:
https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client
发表回复