CSI 驱动程序和卷快照
概述
本教程将介绍如何在 minikube 中设置 CSI Hostpath 驱动程序并创建卷快照。
先决条件
- 最新版本的 minikube
- Kubernetes v1.28 或更高版本
您需要什么
minikube 中对卷快照的支持是通过 volumesnapshots 插件提供的。此插件预配所需的 CRD 并部署卷快照控制器。它默认禁用。
此外,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启用插件
启用 volumesnapshots 和 csi-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