• PV && PVC


    一、PV、PVC图解

    一些概念:
    Volume:NFS、CEPH、GFS
    PersistentVolume:NFS、CEPG/GFS
    
    PV、PVC
    PV:由k8s配置的存储,PV同样是集群的一类资源,yaml。
    
    PVC:对PV的申请,
    PersistentVolumeClaim
    
    PV文档:https://kubernetes.io/docs/concepts/storage/persistent-volumes/
    
    
    Nfs类型的PV:
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv0003
    spec:
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle
      storageClassName: slow
      mountOptions:
        - hard
        - nfsvers=4.1
      nfs:
        path: /tmp
        server: 172.17.0.2
    
    persistentVolumeReclaimPolicy:#类型
    	Recycle: 回收,rm -rf
    		Deployment -> PVC  PV, Recycle。
    	Retain:保留。
    	Delete:PVC –-> PV,删除PVC后PV也会被删掉,这一类的PV,需要支持删除的功能,动态存储默认方式。
    
    Capacity:PV的容量。
    volumeMode:挂载的类型,Filesystem,block
    
    accessModes:这个的PV访问模式:
    	ReadWriteOnce:RWO,可以被单节点以读写的模式挂载。
    	ReadWriteMany:RWX,可以被多节点以读写的形式挂载。
    	ReadOnlyMany:ROX,可以被多个节点以只读的形式挂载。
    storageClassName:PV的类,可以说是一个类名,PVC和PV的这个名字一样,才能被绑定。
    
    Pv的状态:
    	Available:空闲的PV,没有被任何PVC绑定。
    	Bound:已经被PVC绑定
    	Released:PVC被删除,但是资源未被重新使用
    	Failed:自动回收失败。
    

    二、创建一个NFS的PV

    [root@k8s-master01 app]# cat nfs-pv.yaml                  
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv0001
    spec:
      capacity:
        storage: 5Gi   # 定义内存大小,PVC的要比这个小
      volumeMode: Filesystem  # 文件系统类型
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle  # 策略上面有介绍
      storageClassName: nfs-slow   # 这个名字是PVC创建的时候要对应的名字
      mountOptions:
        - hard
        - nfsvers=4.1
      nfs:   #对应上nfs服务器的 ip 共享的文件夹
        path: /data/nfs       
        server: 192.168.1.104
    
    # CREATE pv
    [root@k8s-master01 app]# kubectl create -f nfs-pv.yaml 
    persistentvolume/pv0001 created
    
    #  查看PV
    [root@k8s-master01 app]# kubectl get pv
    NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    pv0001   5Gi        RWO            Recycle          Available           nfs-slow                2m3s
    

    三、创建一个PVC

    # 绑定到指定类型的PV
    [root@k8s-master01 app]# cat test-pvc.yaml 
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: myclaim   # PVC的名字,可自取
    spec:
      accessModes:
        - ReadWriteMany
      volumeMode: Filesystem
      resources:
        requests:
          storage: 2Gi
      storageClassName: nfs-slow  # 名字要对应上想绑定的PV上
      
    # create PVC
    [root@k8s-master01 app]# kubectl create -f  test-pvc.yaml  
    persistentvolumeclaim/myclaim created
    
    # 查看PVC
    [root@k8s-master01 app]# kubectl get pvc
    NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    myclaim   Bound    pv0001   5Gi        RWX            nfs-slow       34s
    
    # 再次查看PV,可看到状态已经发生改变
    [root@k8s-master01 app]# kubectl get pv
    NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
    pv0001   5Gi        RWX            Recycle          Bound    default/myclaim   nfs-slow                13m
    

    四、更改deployment使用PVC类型的volume

    # 更改后的yaml,在对应位置加上以下参数调用PVC
    volumeMounts:
    - mountPath: /opt/pvc
      name: mypd
    
    volumes:
       - name: mypd
         persistentVolumeClaim:
           claimName: myclaim
           
    # 然后进入容器查看是否挂载成功
    [root@k8s-master01 app]# kubectl exec -it nginx-5bb6d88dfb-w78k8 -c nginx2 -- bash
    root@nginx-5bb6d88dfb-w78k8:/# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    overlay                   37G  4.3G   33G  12% /
    tmpfs                     64M     0   64M   0% /dev
    tmpfs                    985M     0  985M   0% /sys/fs/cgroup
    /dev/mapper/centos-root   37G  4.3G   33G  12% /mnt
    192.168.1.104:/data/nfs   37G  3.0G   35G   9% /opt/pvc   # 这就是刚刚挂载的PVC
    
    # 文件能共享
    root@nginx-5bb6d88dfb-w78k8:/opt/pvc# ls 
    pvc  qqq  test
    root@nginx-5bb6d88dfb-w78k8:/opt/pvc# echo 11 > test 
    root@nginx-5bb6d88dfb-w78k8:/opt/pvc# cat test       
    11
    
    很多情况下:
    	创建PVC之后,一直绑定不上PV(Pending):
    		1.	PVC的空间申请大小大于PV的大小
    		2.	PVC的StorageClassName没有和PV的一致
    		3.	PVC的accessModes和PV的不一致
    
    	创建挂载了PVC的Pod之后,一直处于Pending状态:
    		1.	PVC没有被创建成功,或者被创建
    		2.	PVC和Pod不在同一个Namespace
    
    删除PVC后k8s会创建一个用于回收的Pod根据PV的回收策略进行pv的回收回收完以后PV的状态就会变成可被绑定的状态也就是空闲状态其他的Pending状态的PVC如果匹配到了这个PV,他就能和这个PV进行绑定。
    
  • 相关阅读:
    systemctl
    防火墙firewalld
    k8s 基础概念
    进程
    模板问题
    自动发现
    oracle操作
    aix 10代oracle zabbix2.4.4 日志监控
    paramiko
    test
  • 原文地址:https://www.cnblogs.com/hsyw/p/14201416.html
Copyright © 2020-2023  润新知