美文网首页CKA认证
【K8s 精选】CKA - 存储

【K8s 精选】CKA - 存储

作者: 熊本极客 | 来源:发表于2021-11-01 21:46 被阅读0次

    1 了解 StorageClass、persistentVolume 和 PersistentVolumeClaim

    考点:了解 StorageClass、persistentVolume

    1.1 StorageClass

    参考:Kubernetes 文档 - 存储类

    # 样例1:存储后端是 AWS EBS
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    # provisioner 制备器,用来决定使用哪个 CSI 插件,来创建 PV
    # aws-ebs 表示 AWS EBS
    provisioner: kubernetes.io/aws-ebs
    # parameters 是由 provisioner 制备器,至少有 1 个字段 type 
    parameters:
      type: gp2
    # reclaimPolicy 回收策略:Delete 或者 Retain,默认是 Delete
    reclaimPolicy: Retain
    # allowVolumeExpansion 是否支持扩展
    allowVolumeExpansion: true
    # mountOptions 挂载选项
    mountOptions:
      - debug
    # volumeBindingMode 卷绑定和动态制备的时候。
    # Immediate 模式表示一旦创建了 PersistentVolumeClaim 也就完成了卷绑定和动态制备
    # WaitForFirstConsumer 表示延迟 PersistentVolume 的绑定和制备,直到使用该 PersistentVolumeClaim 的 Pod 被创建
    volumeBindingMode: Immediate
    
    -------
    # 样例1:存储后端是本地
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    

    1.2 PersistentVolume 和 PersistentVolumeClaim

    参考:Kubernetes 文档 - 持久卷

    PersistentVolume 和 PersistentVolumeClaim 的生命周期如下:
    创建方式:PV 有静态创建、动态创建。

    静态创建:管理员创建的 PV 带有真实存储的细节信息,可供用户直接使用。

    image.png
    #### Persistent Volume example
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-local
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 200Mi
      local:
        path: /data/pv/disk
      persistentVolumeReclaimPolicy: Retain
      # PV 采用静态创建 
      volumeMode: Filesystem
    --------
    
    #### Persistent Volume Claim example
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-local
    spec:
      accessModes:
      - ReadWriteOnce
      # PV 采用静态创建 
      resources:
        requests:
          storage: 100Mi
    

    动态创建:所有静态 PV 无法与 PVC 匹配,集群基于 StorageClass 为 PVC 创建 PV,即属性 storageClassName 相同的 PV 和 PVC 会自动绑定。

    image.png

    绑定:用户创建了带有特定存储容量和特定访问模式的 PVC 对象,接着匹配 PV,并将两者绑定在一起。
    使用:Pod 根据 PVC 找到所绑定的 PV,并为 Pod 挂载该劵。
    保护使用中的存储对象:确保仍被 Pod 使用的 PVC 及其所绑定的 PV 在系统中不会被删除。
    回收:PV 的回收策略有保留(Retain)、删除(Delete)。配置字段为 persistentVolumeReclaimPolicy
    预留 PV:PV 通过设置 claimRef,确保该 PV 只能绑定指定的 PVC。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: foo-pv
    spec:
      # 此处须显式设置空字符串,否则会被设置为默认的 StorageClass,同时相当于为自身禁止使用动态创建的卷
      storageClassName: ""
      claimRef:
        # 确保该 PV 只能绑定指定的 PVC,即  foo-pvc
        name: foo-pvc
        namespace: foo
      ...
    

    扩充 PVC:将 PVC 的 allowVolumeExpansion 设置为 true,可以扩充该 PVC,即可以编辑 PVC 来设置一个更大的尺寸值。

    PersistentVolume

    考点
    了解持久卷 PersistentVolume
    了解卷模式、访问模式和卷的回收策略

    持久卷(PersistentVolume,PV)是集群中的一块存储。 PersistentVolume 的名称必须是合法的 DNS 子域名。持久卷是集群资源,就像节点也是集群资源一样

    PersistentVolume 的主要配置如下:

    容量:PV 有确定的存储容量,使用 capacity 属性来设置的。 参考 Kubernetes 资源模型(Resource Model)
    卷模式:针对 PV 持久卷,支持两种卷模式 volumeModes:Filesystem 和 Block,默认 Filesystem

    volumeMode 属性设置为 Filesystem 的卷会被 Pod 挂载(Mount) 到某个目录。

    访问模式:每个 PV 卷的访问模式都会设置为对应卷所支持的模式值,例如,NFS 可以支持多个读写客户。

    ReadWriteOnce:卷可以被同一个节点的多个 Pod 以读写方式访问。
    ReadOnlyMany:卷可以被多个节点以只读方式挂载。
    ReadWriteMany:卷可以被多个节点以读写方式挂载。
    ReadWriteOncePod:卷只能被单个 Pod 以读写方式挂载。

    所属 storageClass:PV 属于某个类(Class),通过将其 storageClassName 属性设置为某个 StorageClass 的名称来指定。
    回收策略:通过 persistentVolumeReclaimPolicy 属性设置回收策略,Retain 表示手动回收,Recycle 表示基本擦除 (rm -rf /thevolume/*),Delete 表示直接删除。

    目前,仅 NFS 和 HostPath 支持回收(Recycle)。 AWS EBS、GCE PD、Azure Disk 和 Cinder 卷都支持删除(Delete)。

    节点亲和性:使用这些卷的 Pod 只会被调度到节点亲和性规则所选择的节点上执行。 要设置节点亲和性,配置 PV 卷 .spec 中的 nodeAffinity

    下面以本地存储 HostPath 为例,编辑 PersistentVolume 的配置文件:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: sc-local-host
    provisioner: kubernetes.io/no-provisioner
    reclaimPolicy: Retain
    volumeBindingMode: WaitForFirstConsumer
    --------
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-local-host
      labels:
        type: local
    spec:
      storageClassName: sc-local-host
      volumeMode: Filesystem
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      hostPath:
        path: "/mnt/data"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: pv_local_host_node
              operator: In
              values:
              - "yes"
    

    PersistentVolumeClaim

    考点了解持久卷声明 PersistentVolumeClaim

    持久卷声明(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。

    PersistentVolumeClaim 的主要配置如下:

    容量:PVC 有确定的存储容量,使用 capacity 属性来设置的。 参考 Kubernetes 资源模型(Resource Model)
    卷模式:针对 PVC,支持两种卷模式 volumeModes:Filesystem 和 Block,默认 Filesystem

    volumeMode 属性设置为 Filesystem 的卷会被 Pod 挂载(Mount) 到某个目录。

    访问模式:每个 PVC 的访问模式都会设置为对应 PV 所支持的模式值。

    所属 storageClass:PVC 属于某个类(Class),通过将其 storageClassName 属性设置为某个 StorageClass 的名称来指定。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-local-host
      namespace: ns-test
    spec:
      storageClassName: sc-local-host
      volumeMode: Filesystem
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      # 只有 PV 的 label 带有 type: local,该 PV 才能绑定到此 PVC
      selector:
        matchLabels:
          type: local
    

    2 配置 Pod 以使用卷进行存储

    考点了解应用程序如何配置持久化存储

    #### Storage Class example
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: sc-local-host
    provisioner: kubernetes.io/no-provisioner
    reclaimPolicy: Retain
    # WaitForFirstConsumer 表示延迟 PersistentVolume 的绑定和制备,直到使用该 PersistentVolumeClaim 的 Pod 被创建
    volumeBindingMode: WaitForFirstConsumer
    --------
    
    #### Persistent Volume example
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-local
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 200Mi
      local:
        path: /data/pv/disk
      persistentVolumeReclaimPolicy: Retain
      # PV 采用动态创建,即通过 storageClassName 自动绑定 PV 和 PVC 
      storageClassName: sc-local-host
      volumeMode: Filesystem
    --------
    
    #### Persistent Volume Claim example
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-local
    spec:
      accessModes:
      - ReadWriteOnce
        # PV 采用动态创建,即通过 storageClassName 自动绑定 PV 和 PVC 
      storageClassName:  sc-local-host
      resources:
        requests:
          storage: 100Mi
    --------
    
    ####  Pod using the pvc
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
          - name: local-persistent-storage
            mountPath: /var/nginx/data
      volumes:
        - name: local-persistent-storage
          persistentVolumeClaim:
            claimName: pvc-local
    

    相关文章

      网友评论

        本文标题:【K8s 精选】CKA - 存储

        本文链接:https://www.haomeiwen.com/subject/fvdgaltx.html