首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubernetes PVCs共享一个PV?

kubernetes PVCs共享一个PV?
EN

Stack Overflow用户
提问于 2019-09-08 07:25:59
回答 2查看 2.8K关注 0票数 0

我正试图部署一个持久化卷,供3个豆荚使用,我希望使用集群的节点存储,即不像ebs那样的外部存储。

为了达到上述目的,我做了以下实验-

1)我只应用以下PVC资源-

代码语言:javascript
复制
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资源,如下所示-

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: pv1
  name: pv1
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
status: {}

把这个寄出去,我看到我的索赔是有根据的。

代码语言:javascript
复制
    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

以下是我的问题,希望能得到答案和指点-

  1. 以上警告,无法找到存储类,是否需要创建一个?如果是的话,你能告诉我为什么和怎么做吗?或者任何指针。(不知怎的,这个链接漏掉了- https://kubernetes.io/docs/tasks/run-application/run-single-instance-stateful-application/)
  2. 请注意,PV的存储容量为10 1Gi,而PVC的请求容量为1Gi,但PVC仍与10 1Gi容量绑定吗?我不能和其他的PV共享相同的光伏容量吗?

对于第二个问题,如果我必须为不同容量的PVC创建不同的PVs,是否也必须创建存储库?还是使用相同的存储类和选择器来选择相应的PV?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-13 13:10:29

我试着复制所有的行为来回答你所有的问题。但是,我无法访问DigitalOcean,所以我在GKE上测试了它。

以上警告,无法找到存储类,是否需要创建一个?

根据文档和最佳实践,强烈建议创建一个storageclass,然后基于它创建PV / PVC。然而,有一种叫做“手动配置”的东西。你在这个案子里做过的。

手动配置是指您需要首先手动创建PV,然后创建具有匹配的spec.storageClassName:字段的PVC。示例:

  • 如果您创建一个没有default storageclass的PVC,那么PVstorageClassName参数(afaik没有提供默认的storageclass) - PVC将被固定在Pending上,事件:这个声明没有持久的卷可用,并且没有设置存储类。
  • 如果您使用default storageclass setup on cluster创建PVC,但没有storageClassName参数,它将基于默认存储库创建它。
  • 如果您创建一个带有storageClassName参数的PVC (在云中某个地方,Minikube或kubeadm) - PVC也将是Pending,并带有警告:未找到storageclass.storage.k8s.io“手册”。但是,如果您使用相同的storageClassName参数创建PV,那么它将在一段时间内被绑定。

示例:

代码语言:javascript
复制
$ 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         4m17s

manual 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请求调整存储。

票数 4
EN

Stack Overflow用户

发布于 2019-09-08 09:03:41

  1. 是的,您必须创建存储类,检查,但是我想digital-ocean提供了默认的存储类,您可以用:kubectl get storageclasses检查它。
  2. 您可以共享一个PV,但只有在read-only访问中才能共享,如果您需要对所有荚进行写访问,则必须创建多个PV、检查
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57839938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档