我正试图部署一个持久化卷,供3个豆荚使用,我希望使用集群的节点存储,即不像ebs那样的外部存储。
为了达到上述目的,我做了以下实验-
1)我只应用以下PVC资源-
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: pv1
name: pv1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
status: {}这是一个默认的存储集,在我的例子中,这是数字海洋的容量。所以它创造了一个1Gi的音量。
2)创建了PV资源和PVC资源,如下所示-
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: pv1
name: pv1
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
status: {}把这个寄出去,我看到我的索赔是有根据的。
pavan@p1:~$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pv1 Bound task-pv-volume 10Gi RWO manual 2m5s
pavan@p1:~$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Bound default/pv1 manual 118m
pavan@p1:~$ kubectl describe pvc
Name: pv1
Namespace: default
StorageClass: manual
Status: Bound
Volume: task-pv-volume
Labels: io.kompose.service=pv1
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"creationTimestamp":null,"labels":{"io.kompose.service":"mo...
pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 10Gi
Access Modes: RWO
VolumeMode: Filesystem
Mounted By: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ProvisioningFailed 28s (x8 over 2m2s) persistentvolume-controller storageclass.storage.k8s.io "manual" not found以下是我的问题,希望能得到答案和指点-
对于第二个问题,如果我必须为不同容量的PVC创建不同的PVs,是否也必须创建存储库?还是使用相同的存储类和选择器来选择相应的PV?
发布于 2019-09-13 13:10:29
我试着复制所有的行为来回答你所有的问题。但是,我无法访问DigitalOcean,所以我在GKE上测试了它。
以上警告,无法找到存储类,是否需要创建一个?
根据文档和最佳实践,强烈建议创建一个storageclass,然后基于它创建PV / PVC。然而,有一种叫做“手动配置”的东西。你在这个案子里做过的。
手动配置是指您需要首先手动创建PV,然后创建具有匹配的spec.storageClassName:字段的PVC。示例:
default storageclass的PVC,那么PV和storageClassName参数(afaik没有提供默认的storageclass) - PVC将被固定在Pending上,事件:这个声明没有持久的卷可用,并且没有设置存储类。default storageclass setup on cluster创建PVC,但没有storageClassName参数,它将基于默认存储库创建它。storageClassName参数的PVC (在云中某个地方,Minikube或kubeadm) - PVC也将是Pending,并带有警告:未找到storageclass.storage.k8s.io“手册”。但是,如果您使用相同的storageClassName参数创建PV,那么它将在一段时间内被绑定。示例:
$ kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/task-pv-volume 10Gi RWO Retain Available manual 4s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/pv1 Pending manual 4m12s
...
kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/task-pv-volume 10Gi RWO Retain Bound default/pv1 manual 9s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/pv1 Bound task-pv-volume 10Gi RWO manual 4m17smanual provisioning的缺点是您必须为每个PVC创建PV。如果使用storageclass,则只需创建PVC即可。
如果是的话,你能告诉我为什么和怎么做吗?或者任何指针。
您可以使用文档示例或检查这里。由于您使用的是带有默认storageclass的云,您可以通过以下方式将其导出到yaml:
$ kubectl get sc -oyaml >> storageclass.yaml。或者,如果您有多个,您必须指定哪一个。storageclass的名称可由
$ kubectl get sc。稍后,您可以参考K8s API来自定义storageclass。
请注意,PV的存储容量为10 1Gi,而PVC的请求容量为1Gi,但PVC仍与10 1Gi容量绑定吗?
您使用10Gi手动创建了一个PV,并且PVC请求1Gi。由于PVC和PV是在1:1的范围内,PVC寻找一种符合所有条件并与之结合的PV。聚氯乙烯(pv1)要求的1Gi和PV (任务-pv-体积)满足这些要求,因此库伯内特斯束缚他们。不幸的是,在这种情况下,很大一部分空间被浪费了。
我不能和其他的PVCs共用同样的光伏容量吗?
不幸的是,您不能将2 PVC绑定到1 PV,因为PVC和PV之间的关系是1:1,但是您可以配置许多pods/部署来使用相同的PVC。
我可以建议您看看这个堆叠溢出的情况,因为它很好地解释了AccessMode的细节。
如果我必须为不同的PVC创建不同的PVs,并具有所需的容量,我是否也必须创建存储库呢?还是使用相同的存储类和选择器来选择相应的PV?
正如我前面提到的,如果您手动创建具有特定大小的PV,并将PVC限制在其中,请求更少,那么额外的空间将被浪费。因此,您必须使用相同的资源请求创建PV和PVC,或者让storageclass根据PVC请求调整存储。
https://stackoverflow.com/questions/57839938
复制相似问题