CSI 驱动程序和卷快照
概述
本教程解释了如何在 minikube 中设置 CSI Hostpath 驱动程序并创建卷快照。
先决条件
- 最新版本的 minikube
- kubernetes v1.20 或更高版本
你需要什么
minikube 中对卷快照的支持通过 volumesnapshots
插件提供。此插件提供所需的 CRD 并部署卷快照控制器。它默认禁用。
此外,minikube 中的默认存储提供程序不实现 CSI 接口,因此无法创建/处理卷快照。为此,您必须首先部署 CSI 驱动程序。为了简化此步骤,minikube 提供了 csi-hostpath-driver
插件,它部署了 CSI Hostpath 驱动程序。此插件也默认禁用。
因此,要利用卷快照功能,您必须
1) 启用 volumesnapshots
插件 AND
2a) 启用 csi-hostpath-driver
插件 OR
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
,在每个节点上运行 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检查卷快照类
创建卷快照时,您必须将卷快照类注册到您的集群。名为 csi-hostpath-snapclass
的默认 VolumeSnapshotClass
已由 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