zoukankan      html  css  js  c++  java
  • k8s的pv和pvc简述

    pvc:资源需要指定:
    1.accessMode:访问模型;对象列表:
        ReadWriteOnce – the volume can be mounted as read-write by a single node:  RWO - ReadWriteOnce一人读写
        ReadOnlyMany – the volume can be mounted read-only by many nodes:          ROX - ReadOnlyMany 多人只读
        ReadWriteMany – the volume can be mounted as read-write by many nodes:     RWX - ReadWriteMany多人读写
    2.resource:资源限制(比如:定义5GB空间,我们期望对应的存储空间至少5GB。)    
    3.selector:标签选择器。不加标签,就会在所有PV找最佳匹配。
    4.storageClassName:存储类名称:
    5.volumeMode:指后端存储卷的模式。可以用于做类型限制,哪种类型的PV可以被当前claim所使用。
    6.volumeName:卷名称,指定后端PVC(相当于绑定)

    PV和PVC是一一对应关系,当有PV被某个PVC所占用时,会显示banding,其它PVC不能再使用绑定过的PV。
    PVC一旦绑定PV,就相当于是一个存储卷,此时PVC可以被多个Pod所使用。(PVC支不支持被多个Pod访问,取决于访问模型accessMode的定义)。
    PVC若没有找到合适的PV时,则会处于pending状态。
    PV是属于集群级别的,不能定义在名称空间中。
    PVC时属于名称空间级别的。
    PV的reclaim policy选项:
       默认是Retain保留,保留生成的数据。
       可以改为recycle回收,删除生成的数据,回收pv
       delete,删除,pvc解除绑定后,pv也就自动删除。

    例:在nfs服务器上,使用nfs创建多个数据卷,在k8s集群中定义PV/PVC,让pod关联PVC
    1.在/data/volumes/创建多个目录:v1,v2,v3,v4,v5,修改/etc/exports文件,使数据卷单独输出。

    1 /data/volumes/v1  192.168.1.0/24(rw,no_root_squash)
    2 /data/volumes/v2  192.168.1.0/24(rw,no_root_squash)
    3 /data/volumes/v3  192.168.1.0/24(rw,no_root_squash)
    4 /data/volumes/v4  192.168.1.0/24(rw,no_root_squash)
    5 /data/volumes/v5  192.168.1.0/24(rw,no_root_squash)

    exportfs -arv:显示nfs当前输出的可以挂载的数据卷。
    showmount -e :显示nfs导出的数据卷
    2.在k8s集群中定义pv:

     1 vim pv-demo.yaml
     2 apiVersion: v1
     3 kind: PersistentVolume
     4 metadata:
     5   name: pv001
     6   labels:
     7     name: pv001
     8 spec:
     9   nfs:
    10     path: /data/volumes/v1
    11     server: k8s-node2
    12   accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
    13   capacity:
    14     storage: 2Gi  
    15 ---
    16 ...pv002
    17 ---
    18 ...pv003
    19     ...创建5个以上内容,修改name和path等参数

    应用:kubectl apply -f pv-demo.yaml
    查看:kubectl get pv

    1 NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
    2 pv001   2Gi        RWO,ROX,RWX    Retain           Available                                           56m
    3 pv002   5Gi        RWO,ROX        Retain           Available                                           56m
    4 pv003   3Gi        ROX,RWX        Retain           Available                                           56m
    5 pv004   10Gi       RWO            Retain           Available                                           56m
    6 pv005   15Gi       ROX            Retain           Available                                           56m

    3.创建PVC和pod

     1 vim pod-pvc.yaml
     2 apiVersion: v1
     3 kind: PersistentVolumeClaim
     4 metadata:
     5   name: mypvc
     6   namespace: default
     7 spec:
     8   accessModes: ["ReadWriteOnce"]  ##注:这个访问模型必须是PV中存在的访问模型的子集,否则会找不到合适的PV,会一直Pending。
     9   resources:
    10     requests:
    11       storage: 6Gi
    12 ---
    13 apiVersion: v1
    14 kind: Pod
    15 metadata:
    16   name: myapp-pv
    17   namespace: default
    18 spec:
    19   containers:
    20   - name: myapp
    21     image: ikubernetes/myapp:v1
    22     imagePullPolicy: IfNotPresent
    23     ports:
    24     - name: html
    25       containerPort: 80
    26     volumeMounts:
    27     - name: nfs
    28       mountPath: "/usr/share/nginx/html"    
    29   volumes:
    30   - name: nfs
    31     persistentVolumeClaim:
    32       claimName: mypvc

    应用:kubectl apply -f pod-pvc.yaml

     1 查看pvc:kubectl get pvc
     2 NAME    STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
     3 mypvc   Bound    pv004    10Gi       RWO                           4s
     4 查看pv:kubectl get pv
     5 NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
     6 pv001   2Gi        RWO,ROX,RWX    Retain           Available                                           56m
     7 pv002   5Gi        RWO,ROX        Retain           Available                                           56m
     8 pv003   3Gi        ROX,RWX        Retain           Available                                           56m
     9 pv004   10Gi       RWO            Retain           Bound       default/mypvc                           56m
    10 pv005   15Gi       ROX            Retain           Available                                           56m 、

    如此pvc就绑定在合适的pv上了。绑定的pv是pv004,说明pod的/usr/share/nginx/html挂载在nfs服务器/data/volumes/v4目录下。
    4.查看pod:kubectl get pods -owide

    1 NAME       READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
    2 myapp-pv   1/1     Running   0          24s   10.244.1.141   k8s-node2   <none>           <none>

    5.在nfs服务器上,找到/data/volumes/v4目录,写个测试文件:

    1 vi /data/volumes/v4/index.html
    2 <h1>Smbands</h1>

    测试:访问podIP

    1 curl 10.244.1.141
    2 <h1>Smbands</h1>
  • 相关阅读:
    PHP设计模式——迭代模式
    采用navicat导出表结构及数据insert声明
    [Angular] Protect The Session Id with https and http only
    [D3] Creating a D3 Force Layout in React
    [D3] Animate Chart Axis Transitions in D3 v4
    [D3] Animate with the General Update Pattern in D3 v4
    [Web Security] JSON Hijacking
    [Angular] Progress HTTP Events with 'HttpRequest'
    [RxJS] How To get the results of two HTTP requests made in sequence
    [RxJS] Avoid mulit post requests by using shareReplay()
  • 原文地址:https://www.cnblogs.com/Smbands/p/10858145.html
Copyright © 2011-2022 走看看