CSI 驱动程序和卷快照

CSI 驱动程序和卷快照

概述

本教程介绍如何在 minikube 中设置 CSI Hostpath 驱动程序并创建卷快照。

先决条件

  • 最新版本的 minikube
  • kubernetes v1.20 或更高版本

您需要什么

通过 volumesnapshots 插件提供对 minikube 中卷快照的支持。 此插件提供所需的 CRD 并部署 Volume Snapshot Controller。 默认情况下,它是禁用的。

此外,minikube 中的默认存储提供程序未实现 CSI 接口,因此无法创建/处理卷快照。 为此,您必须首先部署 CSI 驱动程序。 为了简化此步骤,minikube 提供了 csi-hostpath-driver 插件,该插件部署了 CSI Hostpath 驱动程序。 此插件默认情况下也禁用

因此,要使用卷快照功能,您必须

1) 启用 volumesnapshots 插件,并且
2a) 启用 csi-hostpath-driver 插件,或者
2b) 部署您自己的 CSI 驱动程序

您可以使用以下命令启用/禁用上述任一插件

minikube addons enable [ADDON_NAME]
minikube addons disable [ADDON_NAME]

csi-hostpath-driver 插件将其所需资源部署到 kube-system 命名空间,并设置一个名为 csi-hostpath-sc 的专用存储类,您需要在 PVC 中引用该存储类。 该驱动程序本身是在名称 hostpath.csi.k8s.io 下创建的。 请在必要时使用它(例如,快照类定义)。

启用这两个插件后,您可以使用标准方法创建持久卷和快照(要快速测试卷快照,您可以找到一些示例 yaml 文件以及此处 的分步说明)。 该驱动程序将所有持久卷存储在 minikube 主机的 /var/lib/csi-hostpath-data/ 目录中。

多节点集群

csi-hostpath-driver 插件支持 多节点集群 卷配置。 它部署 DaemonSet,该 DaemonSet 在每个节点上运行 hostpath 以配置和声明卷(有关更多详细信息,请参见 #12360)。

教程

在本教程中,您将使用 volumesnapshots 插件 (1) 和 csi-hostpath-driver 插件 (2a)。

1启动您的集群

minikube start

2启用插件

启用 volumesnapshotscsi-hostpath-driver 插件

minikube addons enable volumesnapshots
minikube addons enable csi-hostpath-driver

您可以选择将其用作动态卷声明的默认存储类

minikube addons disable storage-provisioner
minikube addons disable default-storageclass
kubectl patch storageclass csi-hostpath-sc -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

3检查卷快照类

创建卷快照时,您必须将 卷快照类注册到您的集群。默认的 VolumeSnapshotClass 名为 csi-hostpath-snapclass,已由 csi-hostpath-driver 插件注册。您可以通过以下命令检查 VolumeSnapshotClass

kubectl get volumesnapshotclasses
NAME                     DRIVER                DELETIONPOLICY   AGE
csi-hostpath-snapclass   hostpath.csi.k8s.io   Delete           10s

4准备持久卷

创建持久卷声明以动态创建持久卷

# example-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: csi-hostpath-sc
kubectl apply -f example-pvc.yaml

您可以通过以下命令确认是否已创建持久卷

kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS      REASON   AGE
pvc-388c33e2-de56-475c-8dfd-4990d5f7a640   1Gi        RWO            Delete           Bound    default/csi-pvc   csi-hostpath-sc            60s

5拍摄卷快照

您可以为持久卷声明拍摄卷快照

# example-csi-snapshot.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: snapshot-demo
spec:
  volumeSnapshotClassName: csi-hostpath-snapclass
  source:
    persistentVolumeClaimName: csi-pvc
kubectl apply -f example-csi-snapshot.yaml

您可以获取卷快照。您可以使用以下命令确认您的卷快照

kubectl get volumesnapshot
NAME            READYTOUSE   SOURCEPVC   SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS            SNAPSHOTCONTENT                                    CREATIONTIME   AGE
snapshot-demo   true         csi-pvc                             1Gi           csi-hostpath-snapclass   snapcontent-19730fcb-c34a-4f1a-abf2-6c5a9808076b   5s             5s

6从卷快照恢复

您可以从您的卷快照恢复持久卷

# example-csi-restore.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-pvc-restore
spec:
  storageClassName: csi-hostpath-sc
  dataSource:
    name: snapshot-demo
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
kubectl apply -f example-csi-restore.yaml

您可以确认持久卷声明是从 VolumeSnapshot 创建的

kubectl get pvc
NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
csi-pvc           Bound    pvc-388c33e2-de56-475c-8dfd-4990d5f7a640   1Gi        RWO            csi-hostpath-sc   23m
csi-pvc-restore   Bound    pvc-496bab30-9bd6-4abb-94e9-d2e9e1c8f210   1Gi        RWO            csi-hostpath-sc   26s