pv與pvc

目的: 爲了屏蔽底層存儲實現的細節, 讓用戶方便使用同時讓管理員方便管理, 引入了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

  1. 安裝nfs:省略 2.建立pv
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
相關文章
相關標籤/搜索