pv and pvc

Objective: To shield the details of the underlying storage implementation, allowing users easy to use while allowing administrators to easily manage, introduced pv and pvc and resources to achieve the object of storage management subsystem
pv: abstraction of the underlying network shared storage, shared storage defined as a resource
pvc: user storage resources of a magical, like a pod, like consumer node resources, pvc pv can consume resources, pvc can apply for a specific storage space and access mode

StorageClass: characteristics and performance of storage resources mark, the 1.6 version, StorageClass and dynamic resource provisioning mechanism has been improved, to achieve the storage volumes created on demand

Detailed pv

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

Configuration parameters

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 life cycle

    available : 表示当前的pv没有被绑定
    bound:  已经被pvc挂载
    released:  pvc没有在使用pv, 需要管理员手工释放pv
    failed: 资源回收失败

Detailed pvc

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]}

Parameter Description

accessModes: 申请的访问模式必须与pv相同
resources: 资源请求, 既空间大小
storageClassName:  存储类别, 
selector: 根据标签选择器把pvc与pv进行绑定, 动态创建pv不适合配置选择器, 

注意: pv与pvc都受限于namespace, 只有相同namespace的pv丶pvc才能绑定, 同样pod与pvc和pv在同一个namespace才能挂载

Case presentation: manually create pv and pvc

  1. Install nfs: omit
    2. Create 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. Create pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: pvc001 
  namespace: default
spec: 
  accessModes: ["ReadWriteOnce"]
  resources: 
    requests: 
      storage: 1Gi

4. Create a pod

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

Guess you like

Origin www.cnblogs.com/lovelinux199075/p/11266294.html