目的: 爲了屏蔽底層存儲實現的細節, 讓用戶方便使用同時讓管理員方便管理, 引入了pv與pvc兩種資源對象實現對存儲的管理子系統 pv: 對底層網絡共享存儲的抽象, 將共享存儲定義爲一種資源 pvc: 用戶對存儲資源的一個神奇, 就像pod消費node資源同樣, pvc可以消費pv資源, pvc能夠申請特定存儲空間和訪問模式html
StorageClass :標記存儲資源的特性和性能, 在1.6版本, StorageClass與動態資源供應的機制獲得了完善, 實現了存儲卷的按需建立node
###pv詳解nginx
apiVersion: v1 kind: PersistentVolume metadata: name: pv1 spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle mountOptions: - hard - nolock - nfsvers=3 nfs: path: /tmp server: 172.17.0.2
配置參數api
capacity:存儲空間 volume mode: 存儲模式, volumeMode=Filesystem, 包含Filesystem(文件系統)和Block(塊設備) accessModes訪問模型 ReadWriteOnce: 讀寫權限, 而且只能被單個node掛載 ReadOnlyMany : 只讀權限, 容許被多個node掛載 ReadWriteMany : 讀寫權限,容許被多個node掛載 reclaim policy: 回收策略, pvc和pv解綁,刪除了pvc, pv裏面的數據是否還保留 Retain: 保留數據, 須要手工刪除 recycle: 回收, 刪除裏面的數據 delete: pv自殺 mountOptions:掛載參數
pv生命週期網絡
available : 表示當前的pv沒有被綁定 bound: 已經被pvc掛載 released: pvc沒有在使用pv, 須要管理員手工釋放pv failed: 資源回收失敗
###pvc詳解app
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim spec: accessModes: - ReadWriteOnce resources: requests: storage: 8Gi storageClassName: slow selector: matchLabels: release: "stable" matchExpressions: - {key: environment, operator: In, values: [dev]}
參數詳解性能
accessModes: 申請的訪問模式必須與pv相同 resources: 資源請求, 既空間大小 storageClassName: 存儲類別, selector: 根據標籤選擇器把pvc與pv進行綁定, 動態建立pv不適合配置選擇器, 注意: pv與pvc都受限於namespace, 只有相同namespace的pv丶pvc才能綁定, 一樣pod與pvc和pv在同一個namespace才能掛載
###案例演示: 手工建立pv與pvcspa
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv001 labels: name: nfs-pv001 spec: nfs: path: /data/nfs/vol1 server: 192.168.1.48 accessModes: ["ReadWriteMany","ReadWriteOnce"] persistentVolumeReclaimPolicy: Recycle capacity: storage: 2Gi --- apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv002 labels: name: nfs-pv002 spec: nfs: path: /data/nfs/vol2 server: 192.168.1.48 accessModes: ["ReadWriteOnce"] capacity: storage: 5Gi --- apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv003 labels: name: nfs-pv003 spec: nfs: path: /data/nfs/vol3 server: 192.168.1.48 accessModes: ["ReadWriteOnce"] capacity: storage: 10Gi
3.建立pvccode
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc001 namespace: default spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi
4.建立podserver
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: default labels: app: nginx spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.12 imagePullPolicy: IfNotPresent ports: - containerPort: 80 volumeMounts: - name: html mountPath: /usr/share/nginx/html volumes: - name: html persistentVolumeClaim: claimName: pvc001