从卷还原的Kubernetes PVC Napshot为空

从卷还原的Kubernetes PVC Napshot为空,kubernetes,volume,persistent-volume-claims,Kubernetes,Volume,Persistent Volume Claims,我正在尝试使用VolumeSnapshot备份,该备份在kubernetes中升级为beta从1.17 以下是我的设想: 创建nginx部署及其使用的PVC apiVersion:apps/v1 种类:部署 元数据: 名称:nginx部署 规格: 选择器: 火柴标签: app:nginx 副本:1份 模板: 元数据: 标签: app:nginx 规格: 容器: -姓名:nginx 图片:nginx:1.14.2 端口: -集装箱港口:80 体积数量: -姓名:我的pvc 挂载路径:/root/t

我正在尝试使用
VolumeSnapshot
备份,该备份在
kubernetes
中升级为
beta
1.17

以下是我的设想:

创建nginx部署及其使用的PVC

apiVersion:apps/v1 种类:部署 元数据: 名称:nginx部署 规格: 选择器: 火柴标签: app:nginx 副本:1份 模板: 元数据: 标签: app:nginx 规格: 容器: -姓名:nginx 图片:nginx:1.14.2 端口: -集装箱港口:80 体积数量: -姓名:我的pvc 挂载路径:/root/test 卷数: -姓名:我的pvc persistentVolumeClaim: 索赔名称:nginx pvc apiVersion:v1 种类:PersistentVolumeClaim 元数据: 终结器:null 标签: 名称:nginx pvc 名称:nginx pvc 名称空间:默认值 规格: 访问模式: -读写 资源: 请求: 储存量:8Gi storageClassName:premium rwo 将Exec放入正在运行的
nginx
容器中,将cd放入PVC装入路径并创建一些文件

▶ k exec-it nginx-deployment-84765795c-7hz5n bash
root@nginx-部署-84765795c-7hz5n:/#cd/根/测试
root@nginx-部署-84765795c-7hz5n:~/test#touch{1..10}.txt
root@nginx-部署-84765795c-7hz5n:~/test#ls
1.txt 10.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt丢失+找到
root@nginx-部署-84765795c-7hz5n:~/测试#
使用
nginx pvc

apiVersion:snapshot.storage.k8s.io/v1beta1 种类:卷快照 元数据: 名称空间:默认值 名称:nginx卷快照 规格: volumeSnapshotClassName:pd retain vsc 资料来源: persistentVolumeClaimName:nginx pvc 使用的
VolumeSnapshotClass
如下

apiVersion:snapshot.storage.k8s.io/v1beta1 删除策略:保留 驱动程序:pd.csi.storage.gke.io 种类:VolumeSnapshotClass 元数据: creationTimestamp:“2020-09-25T09:10:16Z” 世代:1 名称:pd retain vsc 然后等待它变为
readyToUse:true

apiVersion:v1 项目: -apiVersion:snapshot.storage.k8s.io/v1beta1 种类:卷快照 元数据: creationTimestamp:“2020-11-04T09:38:00Z” 定稿人: -snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection 世代:1 名称:nginx卷快照 名称空间:默认值 资源版本:“34170857” selfLink:/api/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/nginx-volume-snapshot uid:ce1991f8-a44c-456f-8b2a-2e12f8df28fc 规格: 资料来源: persistentVolumeClaimName:nginx pvc volumeSnapshotClassName:pd retain vsc 地位: boundVolumeSnapshotContentName:snapcontent-ce1991f8-a44c-456f-8b2a-2e12f8df28fc 创建时间:“2020-11-04T09:38:02Z” 准备使用:正确 恢复大小:8Gi 种类:列表 元数据: 资源版本:“ 自链接:“ 删除
nginx
部署和初始PVC

▶ k删除pvc,部署--全部
persistentvolumeclaim“nginx pvc”已删除
deployment.apps“nginx部署”已删除
使用先前创建的
VolumeSnapshot
作为其
数据源,创建一个新的PVC

apiVersion:v1 种类:PersistentVolumeClaim 元数据: 终结器:null 标签: 名称:nginx pvc 名称:nginx pvc 名称空间:默认值 规格: 访问模式: -读写 资源: 请求: 储存量:8Gi 数据源: 名称:nginx卷快照 种类:卷快照 apiGroup:snapshot.storage.k8s.io
将新(恢复的)PVC的名称设置为nginx部署

apiVersion:apps/v1 种类:部署 元数据: 名称:nginx部署 规格: 选择器: 火柴标签: app:nginx 副本:1份 模板: 元数据: 标签: app:nginx 规格: 容器: -姓名:nginx 图片:nginx:1.14.2 端口: -集装箱港口:80 体积数量: -姓名:我的pvc 挂载路径:/root/test 卷数: -姓名:我的pvc persistentVolumeClaim: 索赔名称:nginx pvc 然后再次创建
部署

▶ k create-f nginx-deployment-restored.yaml
deployment.apps/nginx-deployment已创建
cd
进入PVC安装目录。它应该包含以前创建的文件,但其为空

▶ k exec-it nginx-deployment-67c7584d4b-l7qrq bash
root@nginx-部署-67c7584d4b-l7qrq:/#cd/根/测试
root@nginx-部署-67c7584d4b-l7qrq:~/test#ls
失物招领
root@nginx-部署-67c7584d4b-l7qrq:~/test#

这是一个社区维基答案,旨在更清楚地说明当前的问题。请随意扩展

如@pkaramol所述,这是一个在以下线程下注册的持续问题:

发生了什么:在默认为intree驱动程序的集群中 storageclass,如果您尝试使用快照数据源和 忘了把csi storageclass放进去,那么一个空的PVC就会被删除 使用默认的storageclass设置

您预期会发生什么:PVC创建不应继续,并且 而是有一个带有不兼容错误的事件,类似于 检查csi供应器中的正确csi驱动程序


在撰写本回答时,此问题尚未得到解决。

除了丢失的文件外,GKE上的卷快照的其他方面对您来说是否正常?恢复的卷正是您在快照过程中创建的卷?实际上,
k8s
sig storage
▶ k create -f nginx-pvc-restored.yaml
persistentvolumeclaim/nginx-pvc-restored created

▶ k get pvc
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nginx-pvc-restored   Bound    pvc-56d0a898-9f65-464f-8abf-90fa0a58a048   8Gi        RWO            standard       39s
▶ k version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.12", GitCommit:"5ec472285121eb6c451e515bc0a7201413872fa3", GitTreeState:"clean", BuildDate:"2020-09-16T13:39:51Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"17+", GitVersion:"v1.17.12-gke.1504", GitCommit:"17061f5bd4ee34f72c9281d49f94b4f3ac31ac25", GitTreeState:"clean", BuildDate:"2020-10-19T17:00:22Z", GoVersion:"go1.13.15b4", Compiler:"gc", Platform:"linux/amd64"}