Kubernetes 通过kubectl创建的持久卷处于挂起状态
我试图通过Kubernetes 通过kubectl创建的持久卷处于挂起状态,kubernetes,Kubernetes,我试图通过kuberctl create-f pv definition.json创建pv和pvc资源,但k8s没有取得任何进展,它只是不断报告它们的Pending状态 查看了kubectl-get-events和api和controller的日志,但我没有看到任何与pv或pvc创建相关的消息。我已经在gcloud上预先创建了磁盘,并且我已经验证了名称和磁盘大小是否匹配 pv的定义非常基本: { "apiVersion": "v1", "kind": "PersistentVolume"
kuberctl create-f pv definition.json创建pv和pvc资源,但k8s没有取得任何进展,它只是不断报告它们的Pending
状态
查看了kubectl-get-events
和api
和controller
的日志,但我没有看到任何与pv或pvc创建相关的消息。我已经在gcloud上预先创建了磁盘,并且我已经验证了名称和磁盘大小是否匹配
pv的定义非常基本:
{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"name": "test-0b-pv"
},
"spec": {
"accessModes": [
"ReadWriteOnce"
],
"capacity": {
"storage": "50Gi"
},
"gcePersistentDisk": {
"fsType": "ext4",
"pdName": "test-0b"
},
"persistentVolumeReclaimPolicy": "Retain"
}
}
有人对调试有什么建议吗?我已重新启动k8s主服务,但没有任何效果 我也遇到了同样的问题,通过将storageClassName:value
显式添加到PV和PVC中解决了这个问题。对于值,我使用了standard
在这种情况下,问题可能是由DefaultStorageClass
配置引起的。
有关详细信息,请参阅:我发现这也令人困惑。。。我正在使用helm部署redis服务器。我创建了一个PV,但redis PVC不会接受它。我就像。。。什么
然后我在文件里找到了这个
pvc不一定需要请求类。一种聚氯乙烯及其制品
等于“”的storageClassName集始终被解释为
请求没有类的PV,因此只能绑定到没有类的PV
类(无注释或一个等于“”的集)
啊。。。所以不表达偏好,就是表达对没有偏好的偏好。(是的,那就像,一点也不混乱)
因此,我使用一个名为PV-volume.yaml的文件创建了一个类似PV的文件
kind: PersistentVolume
apiVersion: v1
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
然后
还有维奥拉!redis吊舱拿走了它。您应该检查是否为集群设置了storageclass:
kubectl get sc
由于您没有在此处指定任何storageClassName,因此它将尝试获取默认的storageClassName。如果默认值不存在或不是gce,而是其他内容,则它将保持挂起状态
您需要首先为gce注册一个storageclass,然后它才能正常工作。您可以像这样为gce创建存储类:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gce
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: none
然后,您需要在PVC中添加storageClassName以使其工作以上大多数答案都从存储类不一致或不正确的角度编写了一个解决方案,特别是在PersistentVolumeClaims
中未提供该解决方案的情况下,但我们可能有不同的原因(如下所述)
问题陈述:
如果您删除了PersistentVolumeClaim
,然后使用相同的定义重新创建它,它将永远处于Pending
状态,为什么
说明:
- 我们在
PersistentVolume
中有“persistentVolumeClaIncolicy”:“Retain”
(默认为Retain policy)
- 如果我们已经删除了
PersistentVolumeClaim
,则PersistentVolume
仍然存在,并且该卷被视为已发布
。但另一项索赔
尚无法获得,因为前一索赔人的数据仍保留在该卷上
- 因此,您需要通过以下步骤手动回收卷:
解决方案:
删除PersistentVolume
(关联的基础存储资产/资源(如EBS、GCE PD、Azure磁盘等)不会被删除,但仍然存在)
(可选)相应地手动清理关联存储资产上的数据
(可选)手动删除关联的存储资产(EBS、GCE PD、Azure磁盘等)
请注意如果您仍然需要相同的数据,只需使用相同的存储资产定义创建一个新的PersistentVolume
,然后您就可以再次创建PersistentVolumeClaim
最后要提到的一点是,Retain
不是persistentVolumeReclaImplicy
的唯一选项,以下是一些其他选项,您可能需要根据用例场景使用或尝试:
回收:对卷执行基本清理(例如rm-rf/*)-使其再次可用于新的声明。只有NFS
和HostPath
支持回收
删除:删除关联的存储资产,如AWS EBS、GCE PD、Azure磁盘或OpenStack Cinder…等
卷
有关更多信息,请查看您的PVC定义是什么样子的?@SaadAli{“apiVersion”:“v1”、“kind”:“PersistentVolumeClaim”、“metadata”:{“name”:“test-0b-PVC”},“spec”:{“accessModes”:[“ReadWriteOnce”],“resources”:{“requests”:{“storage”:{“storage”:“50Gi”}}
还尝试使用——kube api burst=200——kube api qps=100——并发资源配额同步=50修改启动k8s控制器。有了这些,我注意到,如果我重新启动k8s控制器并创建pv和pvc定义,它更有可能成功(仍然可能卡住)。任何调试技巧都将不胜感激。您的PV/PVC定义文件没有问题,好的。我使用它们来创建PV和PVC,并让它们毫无问题地绑定:名称空间名称状态卷容量访问模式年龄默认测试-0b-PVC绑定测试-0b-PV 50Gi RWO 10s
您能运行kubectl get PVC--所有名称空间和kubectl.sh get PVC
看看PV是否与另一个PVC结合?如果不是这样的话,你可以得到一个一致的RePro,请用详细的RePro步骤和CC ME(<代码> saad ali < /代码>)。如果你能够解决这个问题,请考虑发布一个答案,这样社区可以从你的经验中受益。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gce
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: none