k8s1.13版本
PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: filesystem-pvc
spec:
capacity: #未來的屬性可能包括 IOPS、吞吐量等
storage: 5Gi
volumeMode: Filesystem #volumeMode 的有效值可以是“Filesystem”或“Block”。如果未指定,volumeMode 將默認為“Filesystem”。這是一個可選的 API 參數
accessModes: #ReadWriteOnce——該卷可以被單個節點以讀/寫模式掛載,ReadOnlyMany——該卷可以被多個節點以只讀模式掛載,ReadWriteMany——該卷可以被多個節點以讀/寫模式掛載
- ReadWriteOnce #一個卷一次只能使用一種訪問模式掛載,即使它支持很多訪問模式
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow #可選,一個特定類別的 PV 只能綁定到請求該類別的 PVC。沒有 storageClassName
的 PV 就沒有類,它只能綁定到不需要特定類的 PVC。
mountOptions: - hard
- nfsvers=4.1 nfs:
path: /tmp
server: 172.17.0.2
--volumeMode為Block,目前只有如下PV支持
AWSElasticBlockStore
AzureDisk
FC (Fibre Channel)
GCEPersistentDisk
iSCSI
Local volume
RBD (Ceph Block Device)
VsphereVolume (alpha)
--回收策略persistentVolumeReclaimPolicy
Retain(保留)——手動回收 Recycle(回收)——基本擦除(rm -rf /thevolume/*) Delete(刪除)——關聯的存儲資產(例如 AWS EBS、GCE PD、Azure Disk 和 OpenStack Cinder 卷)將被刪除 當前,只有 NFS 和 HostPath 支持回收策略。AWS EBS、GCE PD、Azure Disk 和 Cinder 卷支持刪除策略。
卷可以處於以下的某種狀態:
Available(可用)——一塊空閑資源還沒有被任何聲明綁定
Bound(已綁定)——卷已經被聲明綁定
Released(已釋放)——聲明被刪除,但是資源還未被集群重新聲明
Failed(失敗)——該卷的自動回收失敗
PVC
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: filesystem-pvc #pvc和pv通過名字進行匹配 spec: accessModes: #與pv一樣,注意:這里pv和pvc一樣才會匹配上 - ReadWriteOnce volumeMode: Filesystem #與pv一樣 resources: #與pv一樣 requests: storage: 8Gi storageClassName: slow selector: matchLabels: release: "stable" matchExpressions: - {key: environment, operator: In, values: [dev]}
--selector
matchLabels:volume 必須有具有該值的標簽
matchExpressions:這是一個要求列表,通過指定關鍵字,值列表以及與關鍵字和值相關的運算符組成。有效的運算符包括 In、NotIn、Exists 和 DoesNotExist。
所有來自 matchLabels 和 matchExpressions 的要求都被“與”在一起——它們必須全部滿足才能匹配。
--storageClassName
PVC不一定要請求類。其storageClassName 設置為 "" 的PVC始終被解釋為沒有請求類的PV
與 PVC 具有相同 storageClassName 的 PV 才能綁定到 PVC
pod使用聲明
apiVersion: v1 kind: Pod metadata: name: pod-with-filesystem-volume spec: containers: - name: fc-container image: fedora:26 command: ["/bin/sh", "-c"] args: [ "tail -f /dev/null" ] volumeDevices: - name: data devicePath: /dev/xvda volumes: - name: data persistentVolumeClaim: claimName: filesystem-pvc
或者直接在staefulset中定義pvc
apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 3 volumeClaimTemplates: - metadata: name: test spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 5Gi template: metadata: labels: app: nginx spec: containers: - name: magine1989 image: nginx:1.11.10 volumeMounts: - mountPath: "/mnt/rbd" name: test
Storeclass
StorageClass
為管理員提供了描述存儲 "class(類)" 的方法。 不同的 class 可能會映射到不同的服務質量等級或備份策略,或由群集管理員確定的任意策略。 Kubernetes 本身不清楚各種 class 代表的什么。這個概念在其他存儲系統中有時被稱為“配置文件”。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: standard provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain mountOptions: - debug
具體參考:https://kubernetes.io/docs/concepts/storage/storage-classes/