1

我有一个 deployment.yaml,它使用了一个像这样的 persistentvolumeclaim

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mautic-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: standard

我正在尝试使用 (Horizo​​ntal Pod Scheduler) 水平扩展我的部署,但是当我扩展我的部署时,其余的 pod 正在ContainerCreating处理中,这是我得到的错误describe the pod

Unable to attach or mount volumes: unmounted volume

我在这里做错了什么?

4

1 回答 1

3

如果您的应用程序可以水平扩展,那么使用Deployment非常棒。但是,在水平缩放时,使用带有a 的Persistent Volume可能具有挑战性。PersistentVolumeClaim

持久卷声明 - 访问模式

PersistentVolumeClaim可以为几种不同的访问模式请求A :

  • ReadWriteOnce(最常见)
  • 只读多
  • 读写多

哪里ReadWriteOnce是最常用的并且是本地磁盘的典型行为。但是要水平扩展您的应用程序 - 您需要一个可同时从多个节点获得的卷,因此只有ReadOnlyMany并且ReadWriteMany是可行的选择。您需要检查哪些访问模式可用于您的存储系统

此外,您使用来自云提供商的区域集群,它跨越三个可用,并且一个卷通常只存在于一个可用中,因此即使您使用ReadOnlyManyReadWriteMany访问模式,它也会使您的卷在同一个节点的多个节点上可用AZ,但并非在集群中的所有三个 AZ 中都可用。您可能会考虑使用复制到多个可用区的云提供商的存储类,但它通常成本更高且速度较慢。

备择方案

由于 onlyReadWriteOnce通常可用,因此您可能会为您的应用寻找更好的替代方案。

对象存储

对象存储或存储桶是处理云中文件存储的常用方法,而不是使用文件系统卷。使用对象存储,您可以通过 HTTP 上的 API 访问文件。参见例如AWS S3Google Cloud Storage

有状态集

您还可以考虑StatefulSet,您的应用程序的每个实例都有自己的卷。这使您的应用程序是分布式的,但通常不能水平扩展。在这里,您的应用程序通常需要实现数据复制,通常使用Raft并且是更高级的替代方案。

于 2020-11-21T11:55:15.520 回答