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启用插件
启用 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