PersistentVolume(簡(jiǎn)稱PV)是由管理員設(shè)置的
存儲(chǔ)邦邦,它同樣是集群中的一類資源,PV是容量插件鬼店,如Volumes(卷)黔龟,但其生命周期獨(dú)立使用PV的任何Pod,PV的創(chuàng)建可使用NFS巍棱、iSCSI蛋欣、GFS、CEPH等陷虎。
PersistentVolumeClaim(簡(jiǎn)稱PVC)是用戶對(duì)存儲(chǔ)的
請(qǐng)求,類似于Pod窝稿,Pod消耗節(jié)點(diǎn)資源凿掂,PVC消耗PV資源,Pod可以請(qǐng)求特定級(jí)別的資源(CPU和內(nèi)存)潮梯,PVC可以請(qǐng)求特定的大小和訪問(wèn)模式惨恭。例如耙旦,可以以一次讀/寫(xiě)或只讀多次的模式掛載萝究。
雖然PVC允許用戶使用抽象存儲(chǔ)資源锉罐,但是用戶可能需要具有不同性質(zhì)的PV來(lái)解決不同的問(wèn)題,比如使用SSD硬盤(pán)來(lái)提高性能栽连。所以集群管理員需要能夠提供各種PV侨舆,而不僅是大小和訪問(wèn)模式,并且無(wú)須讓用戶了解這些卷的實(shí)現(xiàn)方式熔恢,對(duì)于這些需求可以使用StorageClass資源實(shí)現(xiàn)臭笆。
目前PV的提供方式有兩種:靜態(tài)或動(dòng)態(tài)。
靜態(tài)PV由管理員提前創(chuàng)建愁铺,動(dòng)態(tài)PV無(wú)需提前創(chuàng)建,只需指定PVC的StorageClasse即可衅谷。
PV的回收策略
當(dāng)用戶使用完卷時(shí)似将,可以從API中刪除PVC對(duì)象,從而允許回收資源玷氏∫干啵回收策略會(huì)告訴PV如何處理該卷,目前卷可以保留赞辩、回收或刪除授艰。
? Retain:保留,該策略允許手動(dòng)回收資源淮腾,當(dāng)刪除PVC時(shí),PV仍然存在洲押,volume被視為已釋放,管理員可以手動(dòng)回收卷体箕。
? Recycle:回收挑童,如果volume插件支持,Recycle策略會(huì)對(duì)卷執(zhí)行rm -rf清理該P(yáng)V争群,并使其可用于下一個(gè)新的PVC大年,但是本策略已棄用,建議使用動(dòng)態(tài)配置翔试。
? Delete:刪除垦缅,如果volume插件支持,刪除PVC時(shí)會(huì)同時(shí)刪除PV壁涎,動(dòng)態(tài)卷默認(rèn)為Delete。
PV的訪問(wèn)策略
ReadWriteOnce:可以被單節(jié)點(diǎn)以讀寫(xiě)模式掛載嚼酝,命令行中可以被縮寫(xiě)為RWO竟坛。
ReadOnlyMany:可以被多個(gè)節(jié)點(diǎn)以只讀模式掛載,命令行中可以被縮寫(xiě)為ROX担汤。
ReadWriteMany:可以被多個(gè)節(jié)點(diǎn)以讀寫(xiě)模式掛載,命令行中可以被縮寫(xiě)為RWX隅很。
NFS安裝配置
NFS服務(wù)器安裝服務(wù)端: yum install nfs* rpcbind -y
所有K8s節(jié)點(diǎn)安裝NFS客戶端:yum install nfs-utils -y
NFS服務(wù)端:mkdir /data/k8s -p
NFS服務(wù)器創(chuàng)建共享目錄:vim /etc/exports
/data/k8s/ *(rw,sync,no_subtree_check,no_root_squash)
exportfs -r
systemctl restart nfs rpcbind
掛載測(cè)試:mount -t nfs nfs-serverIP:/data/k8s /mnt/
一驾荣、創(chuàng)建PV
1)基于NFS創(chuàng)建
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity: # 容量配置
storage: 5Gi
volumeMode: Filesystem # 卷的模式,目前支持Filesystem(文件系統(tǒng)) 和 Block(塊)审编,其中Block類型需要后端存儲(chǔ)支持歧匈,默認(rèn)為文件系統(tǒng)
accessModes: # PV的訪問(wèn)模式
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle # 回收策略
storageClassName: nfs-slow # PV的類,一個(gè)特定類型的PV只能綁定到特定類別的PVC
nfs: # NFS服務(wù)配置
path: /data/k8s
server: 172.17.0.2
2)基于hostPath創(chuàng)建
kind: PersistentVolume
apiVersion: v1
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: hostpath
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
3)基于CephRBD創(chuàng)建
apiVersion: v1
kind: PersistentVolume
metadata:
name: ceph-rbd-pv
spec:
capacity:
storage: 1Gi
storageClassName: ceph-fast
accessModes:
- ReadWriteOnce
rbd:
monitors: # Ceph的monitor節(jié)點(diǎn)的IP
- 192.168.1.123:6789
- 192.168.1.124:6789
- 192.168.1.125:6789
pool: rbd # 所用Ceph Pool的名稱勘究,可以使用ceph osd pool ls查看
image: ceph-rbd-pv-test # Ceph塊設(shè)備中的磁盤(pán)映像文件口糕,可以使用rbd create POOL_NAME/IMAGE_NAME --size 1024創(chuàng)建景描,使用rbd list POOL_NAME查看
user: admin # Rados的用戶名秀撇,默認(rèn)是admin
secretRef: # 用于驗(yàn)證Ceph身份的密鑰
name: ceph-secret
fsType: ext4 # 文件類型,可以是ext4棠绘、XFS等
readOnly: false # 是否是只讀掛載
二再扭、創(chuàng)建PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: task-pvc-claim
spec:
storageClassName: nfs-slow
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
三、pod使用PVC
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: default
spec:
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pvc-claim
containers:
- env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-8
image: nginx
imagePullPolicy: IfNotPresent
name: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage