CKA [Storage] – StorageClass的讲解

有了PV和PVC为什么还需要StorageClass呢?

  • 如果看回上一个文章的话,只有PV和PVC每次都需要手动创建好了PV,然后PVC才能够连接到PV
  • 这就非常麻烦了,每次都必须手动,那么StorageClass就类似于存储的Spec模版

自动创建PV的流程讲解(使用StorageClass)

  • StorageClass就是存储的种类Spec, 有:EBS, EFS 等等。需要搭配k8s的csi driver来创建的
  • Pod 是通过 PVC 来申请存储的,一开始pod需要写PVC的条件,比如StorageClass使用的是EBS,容量1GB
  • 这个时候K8s就会check 是否有空闲的PV并且StorageClass是EBS和容易是1GB的,如果没有符合条件的 PV,且 PVC 指定了一个有效的 StorageClass,K8s 才会根据 StorageClass 的参数动态创建一个新的 PV。
  • 如果符合条件的PV是已存在的话,那么Pod就直接跟这个PV做连接了
  • 必须在PVC当中指定有效的StorageClass否则K8s是无法创建PV的

各个云端的Kubernetes StorageClass

以下是阿里云的ACK和AWS的EKS 默认自带的StorageClass, 每一个StorageClass都绑定了各自自己的存储类型,想要使用这些StorageClass都必须安装CSI Driver的,比如EKS默认是没有这些的,都必须自行在Addon当中去安装CSI Driver才行。

实践创建StorageClass

以下的教程是在本机minikube安装rancher Local Path Provisioner

Rancher Local Path Provisioner 是一个 Kubernetes 动态存储卷(Dynamic Volume)Provisioner,由 Rancher 开源,用于在 单节点或小型集群 中通过节点本地文件系统自动创建和管理持久化存储(Persistent Volume,简称 PV)。

1. 在minikube 安装Rancher Local Path Provisioner

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.32/deploy/local-path-storage.yaml

2. 安装完毕之后,就会看到local-path的storageclass,你会看到BindingMode是WaitForFirstConcumer,意思是就算你创建了PVC使用这个StorageClass,也不会创建相对于的PV。这个PVC必须挂在到Pod当中,那么PV才会被创建。

kubectl get storageclass

3. 创建PVC

kubectl apply -f pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-path-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 128Mi

4. 创建Pod

kubectl apply -f pod.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-path-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 128Mi

5. 创建了Pod之后,你查看PV的话就会被创建了

kubectl get pv

RetainPolicy的讲解

我们根据以上的PV的Reclaim Policy是Delete ,所有如果当你把PVC给删除的话,那么原本绑定的PV也会被跟着一起被删除。如果PV的Reclaim Policy是Retain的话,那么即使PVC被删除了,PV还是依旧会被保留。

Loading

Facebook评论