zoukankan      html  css  js  c++  java
  • k8s 的存储PVC与PV

    PVC 相关的定义

    kubectl explain persistentVolumeClaim
    KIND:     PersistentVolumeClaim
    VERSION:  v1
    
    DESCRIPTION:
         PersistentVolumeClaim is a user's request for and claim to a persistent
         volume
    
    FIELDS:
       apiVersion	<string>
         APIVersion defines the versioned schema of this representation of an
         object. Servers should convert recognized schemas to the latest internal
         value, and may reject unrecognized values. More info:
         https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
    
       kind	<string>
         Kind is a string value representing the REST resource this object
         represents. Servers may infer this from the endpoint the client submits
         requests to. Cannot be updated. In CamelCase. More info:
         https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
    
       metadata	<Object>
         Standard object's metadata. More info:
         https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
    
       spec	<Object>
         Spec defines the desired characteristics of a volume requested by a pod
         author. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
    
       status	<Object>
         Status represents the current information/status of a persistent volume
         claim. Read-only. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
    # kubectl explain persistentVolumeClaim.spec
    KIND:     PersistentVolumeClaim
    VERSION:  v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
         Spec defines the desired characteristics of a volume requested by a pod
         author. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
    
         PersistentVolumeClaimSpec describes the common attributes of storage
         devices and allows a Source for provider-specific attributes
    
    FIELDS:
       accessModes	<[]string>   #访问模型是否支持多人访问
         AccessModes contains the desired access modes the volume should have. More
         info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
    
       dataSource	<Object>    #是否启动数据卷快照
         This field requires the VolumeSnapshotDataSource alpha feature gate to be
         enabled and currently VolumeSnapshot is the only supported data source. If
         the provisioner can support VolumeSnapshot data source, it will create a
         new volume and data will be restored to the volume at the same time. If the
         provisioner does not support VolumeSnapshot data source, volume will not be
         created and the failure will be reported as an event. In the future, we
         plan to support more data source types and the behavior of the provisioner
         may change.
    
       resources	<Object>  # 最小资源限制
         Resources represents the minimum resources the volume should have. More
         info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
    
       selector	<Object>  #标签选择器用来选择拥有指定标签的bv 里选取pv
         A label query over volumes to consider for binding.   
    
       storageClassName	<string>  #存储累名称
         Name of the StorageClass required by the claim. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
    
       volumeMode	<string>  # 后端存储卷模式
         volumeMode defines what type of volume is required by the claim. Value of
         Filesystem is implied when not included in claim spec. This is a beta
         feature.
    
       volumeName	<string>  # 后端存储卷名称,如果给定就会指定帮在哪个存储卷上
         VolumeName is the binding reference to the PersistentVolume backing this
         claim.
    

      在NFS 存储创建几个目录

    [root@ES ~]# cd /data/kubernetes/
    [root@ES kubernetes]# mkdir pv{1,2,3,4,5,6} 
    [root@ES kubernetes]# ls
    html  pv1  pv2  pv3  pv4  pv5  pv6
    [root@ES kubernetes]# cat /etc/exports
    /data/activemq  192.168.10.31(rw,sync,no_root_squash,no_all_squash)
    /data/activemq  192.168.10.4(rw,sync,no_root_squash,no_all_squash)
    /data/kubernetes/pv1  192.168.10.0/24(rw,sync,no_root_squash,no_all_squash)
    /data/kubernetes/pv2  192.168.10.0/24(rw,sync,no_root_squash,no_all_squash)
    /data/kubernetes/pv3  192.168.10.0/24(rw,sync,no_root_squash,no_all_squash)
    /data/kubernetes/pv4  192.168.10.0/24(rw,sync,no_root_squash,no_all_squash)
    /data/kubernetes/pv5  192.168.10.0/24(rw,sync,no_root_squash,no_all_squash)
    /data/kubernetes/pv6  192.168.10.0/24(rw,sync,no_root_squash,no_all_squash)
    [root@ES kubernetes]# systemctl restart nfs
    测试
    [root@node01 ~]# mount -t nfs 192.168.10.16:/data/kubernetes/pv1 /kubernetes/pod  测试完取消挂载
    

        定义PV;不能定义名称空间因为数据集群级别

    [root@master ~]# kubectl explain pv
    KIND:     PersistentVolume
    VERSION:  v1
    
    DESCRIPTION:
         PersistentVolume (PV) is a storage resource provisioned by an
         administrator. It is analogous to a node. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes
    
    FIELDS:
       apiVersion	<string>
         APIVersion defines the versioned schema of this representation of an
         object. Servers should convert recognized schemas to the latest internal
         value, and may reject unrecognized values. More info:
         https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
    
       kind	<string>
         Kind is a string value representing the REST resource this object
         represents. Servers may infer this from the endpoint the client submits
         requests to. Cannot be updated. In CamelCase. More info:
         https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
    
       metadata	<Object>
         Standard object's metadata. More info:
         https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
    
       spec	<Object>
         Spec defines a specification of a persistent volume owned by the cluster.
         Provisioned by an administrator. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
    
       status	<Object>
         Status represents the current information/status for the persistent volume.
         Populated by the system. Read-only. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
    
    [root@master ~]# kubectl explain pv.spec
    KIND:     PersistentVolume
    VERSION:  v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
         Spec defines a specification of a persistent volume owned by the cluster.
         Provisioned by an administrator. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
    
         PersistentVolumeSpec is the specification of a persistent volume.
    
    FIELDS:
       accessModes	<[]string>   可以写多个;但要看存储设备是否支持
         AccessModes contains all ways the volume can be mounted. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes
    ReadWriteOnce –该卷可以通过单个节点以读写方式安装
    ReadOnlyMany –该卷可以被许多节点只读安装
    ReadWriteMany –该卷可以被许多节点读写安装
    简写
    RWO-ReadWriteOnce
    ROX-ReadOnlyMany
    RWX-ReadWriteMany
    
       awsElasticBlockStore	<Object>
         AWSElasticBlockStore represents an AWS Disk resource that is attached to a
         kubelet's host machine and then exposed to the pod. More info:
         https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
    
       azureDisk	<Object>
         AzureDisk represents an Azure Data Disk mount on the host and bind mount to
         the pod.
    
       azureFile	<Object>
         AzureFile represents an Azure File Service mount on the host and bind mount
         to the pod.
    
       capacity	<map[string]string>   定义空间大小
         A description of the persistent volume's resources and capacity. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
    
       cephfs	<Object>
         CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
    
       cinder	<Object>
         Cinder represents a cinder volume attached and mounted on kubelets host
         machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
    
       claimRef	<Object>
         ClaimRef is part of a bi-directional binding between PersistentVolume and
         PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName
         is the authoritative bind between PV and PVC. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding
    
       csi	<Object>
         CSI represents storage that is handled by an external CSI driver (Beta
         feature).
    
       fc	<Object>
         FC represents a Fibre Channel resource that is attached to a kubelet's host
         machine and then exposed to the pod.
    
       flexVolume	<Object>
         FlexVolume represents a generic volume resource that is
         provisioned/attached using an exec based plugin.
    
       flocker	<Object>
         Flocker represents a Flocker volume attached to a kubelet's host machine
         and exposed to the pod for its usage. This depends on the Flocker control
         service being running
    
       gcePersistentDisk	<Object>
         GCEPersistentDisk represents a GCE Disk resource that is attached to a
         kubelet's host machine and then exposed to the pod. Provisioned by an
         admin. More info:
         https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
    
       glusterfs	<Object>
         Glusterfs represents a Glusterfs volume that is attached to a host and
         exposed to the pod. Provisioned by an admin. More info:
         https://examples.k8s.io/volumes/glusterfs/README.md
    
       hostPath	<Object>
         HostPath represents a directory on the host. Provisioned by a developer or
         tester. This is useful for single-node development and testing only!
         On-host storage is not supported in any way and WILL NOT WORK in a
         multi-node cluster. More info:
         https://kubernetes.io/docs/concepts/storage/volumes#hostpath
    
       iscsi	<Object>
         ISCSI represents an ISCSI Disk resource that is attached to a kubelet's
         host machine and then exposed to the pod. Provisioned by an admin.
    
       local	<Object>
         Local represents directly-attached storage with node affinity
    
       mountOptions	<[]string>
         A list of mount options, e.g. ["ro", "soft"]. Not validated - mount will
         simply fail if one is invalid. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options
    
       nfs	<Object>
         NFS represents an NFS mount on the host. Provisioned by an admin. More
         info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
    
       nodeAffinity	<Object>
         NodeAffinity defines constraints that limit what nodes this volume can be
         accessed from. This field influences the scheduling of pods that use this
         volume.
    
       persistentVolumeReclaimPolicy	<string>
         What happens to a persistent volume when released from its claim. Valid
         options are Retain (default for manually created PersistentVolumes), Delete
         (default for dynamically provisioned PersistentVolumes), and Recycle
         (deprecated). Recycle must be supported by the volume plugin underlying
         this PersistentVolume. More info:
         https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
    
       photonPersistentDisk	<Object>
         PhotonPersistentDisk represents a PhotonController persistent disk attached
         and mounted on kubelets host machine
    
       portworxVolume	<Object>
         PortworxVolume represents a portworx volume attached and mounted on
         kubelets host machine
    
       quobyte	<Object>
         Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
    
       rbd	<Object>
         RBD represents a Rados Block Device mount on the host that shares a pod's
         lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md
    
       scaleIO	<Object>
         ScaleIO represents a ScaleIO persistent volume attached and mounted on
         Kubernetes nodes.
    
       storageClassName	<string>
         Name of StorageClass to which this persistent volume belongs. Empty value
         means that this volume does not belong to any StorageClass.
    
       storageos	<Object>
         StorageOS represents a StorageOS volume that is attached to the kubelet's
         host machine and mounted into the pod More info:
         https://examples.k8s.io/volumes/storageos/README.md
    
       volumeMode	<string>    是可选的API参数。 Filesystem是volumeMode省略参数时使用的默认模式;您可以设置的值volumeMode以Block将卷用作原始块设备。这样的卷作为一个块设备呈现在Pod中,上面没有任何文件系统。此模式对于为Pod提供最快的访问卷的方式很有用,而Pod和卷之间没有任何文件系统层。另一方面,在Pod中运行的应用程序必须知道如何处理原始块设备。
         volumeMode defines if a volume is intended to be used with a formatted
         filesystem or to remain in raw block state. Value of Filesystem is implied
         when not included in spec. This is a beta feature.
    
       vsphereVolume	<Object>
         VsphereVolume represents a vSphere volume attached and mounted on kubelets
         host machine
    

      

      编写PV的yaml文件

    [root@master vml]# cat pv.yaml 
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv01
      labels: 
        name: pv01
    spec:
      accessModes: 
      - ReadWriteMany
      capacity: 
        storage: 2Gi
      nfs:
       path: /data/kubernetes/pv1
       server: 192.168.10.16
    [root@master vml]# kubectl apply -f pv.yaml  
    persistentvolume/pv01 created
    [root@master vml]# kubectl describe pv pv01  查看pv
    Name:            pv01
    Labels:          name=pv01
    Annotations:     kubectl.kubernetes.io/last-applied-configuration:
                       {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"labels":{"name":"pv01"},"name":"pv01"},"spec":{"access
    Modes":["...Finalizers:      [kubernetes.io/pv-protection]
    StorageClass:    
    Status:          Available
    Claim:           
    Reclaim Policy:  Retain
    Access Modes:    RWX
    VolumeMode:      Filesystem
    Capacity:        2Gi
    Node Affinity:   <none>
    Message:         
    Source:
        Type:      NFS (an NFS mount that lasts the lifetime of a pod)
        Server:    192.168.10.16
        Path:      /data/kubernetes/pv1
        ReadOnly:  false
    Events:        <none>
    

      编写PVC与pod的文件

    [root@master vml]# cat hostpath.yaml 
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata: 
      name: pv01
      namespace: default
    spec:
      accessModes: 
      - ReadWriteMany
      resources: 
        requests:  最小限制;可以指定义最小限制或做大限制
          storage: 2Gi
        limits:  最大限制
          storage: 2Gi
    
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: host-1
      namespace: default
      labels:
        app: myapp
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
        - name: https 
          containerPort: 443
        volumeMounts:
        - name: html
          mountPath: /chenxi/cx
      - name: busybox
        image: busybox:latest
        imagePullPolicy: IfNotPresent
        command:
        - "/bin/sh"
        - "-c"
        - "echo 'chenxi1234' >> /cx/html "
        volumeMounts:
        - name: html
          mountPath: /cx
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: pv01  这边引用名字
    

      创建后查看NFS

    [root@master vml]# kubectl apply -f hostpath.yaml 
    persistentvolumeclaim/pv01 created
    pod/host-1 created
    [root@ES kubernetes]# ls /data/kubernetes/pv2/
    html
    [root@ES kubernetes]# cat /data/kubernetes/pv2/html 
    chenxi1234
    chenxi1234
    chenxi1234
    chenxi1234
    chenxi1234
    chenxi1234
    chenxi1234
    

      

     

  • 相关阅读:
    基于mpvue实现微信小程序区间选择(range-slider)
    node.js实现上传excel/读取excel/批量导入mysql
    java实现利用阿里巴巴开源的easyexcel进行对excel表格的导入和导出[附完整代码]
    [已解决]SpringDataJPA+Hibernate在执行executeUpdate()的时候报错 Executing an update/delete query
    重写bean类的toString()方法为JSON格式|idea设置toString()方法为JSON格式模板|idea设置toString()的模板
    [已解决]报异常java.io.InvalidClassException的解决方法|对象序列化实现Serializable会出现java.io.InvalidClassException的异常
    Invalid char (/) found at index (10) in sheet name异常原因|导出excel出现Invalid char (/) found at index (10)
    JDK各个版本的特性分析|JDK7|JDK8|JDK9|JDK10|JDK11|JDK12|JDK13特性分析
    springBoot导入本地jar并且要求通过maven打包到项目的jar中|Unable to open nested jar file 'BOOT-INF/lib/xxxxxx.jar'
    【教程】好多好看好酷的代码注释,喜欢就选一个;还可以将自己喜欢的图片一键生成代码注释
  • 原文地址:https://www.cnblogs.com/rdchenxi/p/12784966.html
Copyright © 2011-2022 走看看