1

我有一个具有 3 个副本的 Kubernetes 部署应用程序,每个副本需要 7GB 存储空间,我希望能够附加一个的空azureDisk存储空间,以挂载到此部署中创建的每个 pod/副本中。

基本上我有以下限制:

  • 我必须使用 Deployment,而不是 Statefulset
  • 每次 pod 死亡并且新 pod 启动时,它都不应该有状态,并且会附加一个新的空 azureDisk。
  • Pod 不共享它们的存储空间,每个 Pod 都有自己的 7GB 存储空间。
  • Pod 需要使用 azureDisk,因为我需要 7GB 的按需存储,这意味着,当我扩展我的部署副本时动态创建 azureStorage。

使用 azureDisk 时,我需要将其与 Access 模式类型 ReadWriteOnce 一起使用(如文档中所述),它会将唯一的 1 个 pod 附加到该磁盘,这是找到的,但是,只有当我有 1 个 pod 时才有效,如果我有超过 1 个 pod,我不能使用相同的声明...有没有办法像第一个声明中的那样动态请求更多存储空间?

注意 1:我知道有一个 volumeClaimTemplates,但这仅与 Statefulset 有关。

注意 2:我不在乎 pod 是否重新启动 100 次,这反过来又会创建 100 个 PV,而其中仅使用 1 个,这很好。

4

2 回答 2

1

我不确定您为什么需要使用 StatefulSet,但我看到的唯一做法是为您的应用程序创建自己的运算符。操作员将有一个控制器来管理您的 pod,类似于ReplicaSet所做的,但不同的是,对于每个实例化的新 pod,都会创建一个新的 PVC。

弄清楚如何在 StatefulSet 中运行应用程序并使用VolumeClaimTemplates可能会更好

✌️

于 2020-08-12T01:45:38.583 回答
0

主要问题是——为什么?“如果我有一个没有状态的应用程序,我仍然需要每个 pod 的大容量”

查看这个解释,您应该关注 StateFull 应用程序。从我的角度来看,您似乎正在强制对StateFull 应用程序使用 Deployment 而不是 StateFullSet

在您的示例中,您可能需要支持不同访问模式的pv

您遇到的主要问题是,使用支持模式ReadWriteOnce的 pv,您只能通过单个节点同时绑定一个 pv。因此,由于卷安装失败,您在不同节点中的 pod 将无法启动。您只能将此方法用于ReadOnlyMany/ReadWriteMany 方案。

请参考其他具有不同访问模式功能的提供商,例如:filestore(gcp)AzureFile(azure)、Glusterfs、NFS

于 2020-08-12T13:46:03.807 回答