Aka*_*nan 31 kubernetes persistent-volumes persistent-volume-claims
我创建了一个源自Google Compute Engine永久磁盘的PersistentVolume,我已经格式化并提供了数据.Kubernetes说PersistentVolume可用.
kind: PersistentVolume
apiVersion: v1
metadata:
name: models-1-0-0
labels:
name: models-1-0-0
spec:
capacity:
storage: 200Gi
accessModes:
- ReadOnlyMany
gcePersistentDisk:
pdName: models-1-0-0
fsType: ext4
readOnly: true
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个PersistentVolumeClaim,以便我可以将此卷附加到多个节点上的多个pod.然而,kubernetes无限期地说它处于待决状态.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: models-1-0-0-claim
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 200Gi
selector:
matchLabels:
name: models-1-0-0
Run Code Online (Sandbox Code Playgroud)
任何见解?我觉得选择器可能有问题......
甚至可以预先配置一个包含数据的永久磁盘,并且多个节点上的pod都可以从中读取吗?
Aka*_*nan 43
我很快意识到PersistentVolumeClaim 在未指定时将storageClassName字段默认为standard.但是,在创建PersistentVolume时,storageClassName没有默认值,因此选择器找不到匹配项.
以下对我有用:
kind: PersistentVolume
apiVersion: v1
metadata:
name: models-1-0-0
labels:
name: models-1-0-0
spec:
capacity:
storage: 200Gi
storageClassName: standard
accessModes:
- ReadOnlyMany
gcePersistentDisk:
pdName: models-1-0-0
fsType: ext4
readOnly: true
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: models-1-0-0-claim
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 200Gi
selector:
matchLabels:
name: models-1-0-0
Run Code Online (Sandbox Code Playgroud)
Ani*_*han 12
通过动态配置,您不必单独创建PV和PVC.在Kubernetes 1.6+中,有GKE和其他一些云环境的默认配置程序,它们可以让您创建一个PVC并让它自动为您提供PV和底层永久磁盘.
有关动态配置的更多信息,请参阅:
https://kubernetes.io/blog/2017/03/dynamic-provisioning-and-storage-classes-kubernetes/
如果您使用的是 Microk8s,则必须先启用存储,然后才能成功启动 PersistentVolumeClaim。
做就是了:
microk8s.enable storage
Run Code Online (Sandbox Code Playgroud)
您需要删除部署并重新开始。
您可能还需要手动删除“待处理”的 PersistentVolumeClaims,因为我发现卸载创建它们的 Helm 图表并没有清除 PVC。
您可以通过首先查找名称列表来执行此操作:
kubectl get pvc --all-namespaces
Run Code Online (Sandbox Code Playgroud)
然后删除每个名称:
kubectl delete pvc name1 name2 etc...
Run Code Online (Sandbox Code Playgroud)
启用存储后,重新应用您的部署应该会让事情顺利进行。
我面临着同样的问题,并意识到 k8s 实际上做了一个即时供应,即
我正在使用带有 kubernetes 版本的 EKS ,其行为由StorageClass Volume Binding Mode1.16控制。
有同样的问题,但这是另一个原因,这就是我在这里分享它以帮助社区的原因。
如果你已经删除PersistentVolumeClaim然后用相同的定义重新创建它,它将永远挂起,为什么?
persistentVolumeReclaimPolicy是Retain默认情况下PersistentVolume。如果我们删除了PersistentVolumeClaim,则PersistentVolume仍然存在并且该卷被视为已释放。但它尚不可用于其他索赔,因为前一个索赔人的数据仍保留在卷上。因此您需要通过以下步骤手动回收卷:
删除 PersistentVolume(相关的底层存储资产/资源,如 EBS、GCE PD、Azure 磁盘等将不会被删除,仍然存在)
(可选)相应地手动清理关联存储资产上的数据
(可选)手动删除关联的存储资产(EBS、GCE PD、Azure 磁盘等)
如果您仍然需要相同的数据,您可以跳过清理和删除关联的存储资产(上面的第 2 步和第 3 步),因此只需简单地重新创建一个PersistentVolume具有相同存储资产定义的新数据,然后您应该可以PersistentVolumeClaim再次创建。
最后要提及Retain的不是 的唯一选项persistentVolumeReclaimPolicy,以下是您可能需要根据用例场景使用或尝试的其他一些选项:
Recycle:对卷(例如rm -rf //*)执行基本清理- 使其再次可用于新的声明。只有NFS和HostPath支持回收。
删除:AWS EBS, GCE PD, Azure Disk, or OpenStack Cinder...etc删除卷等关联的存储资产
有关更多信息,请查看kubernetes 文档。
仍然需要更多说明或有任何疑问,请随时发表评论,我将非常乐意澄清和提供帮助。
| 归档时间: |
|
| 查看次数: |
26790 次 |
| 最近记录: |