在Kubernetes部署中为每个pod附加新的azure磁盘卷



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

基本上我有以下限制:

  • 我必须使用部署,而不是Statefulset
  • 每次一个pod死了,一个新的pod出现时,它都不应该有一个状态,它会有一个空的azureDisk连接到它上面
  • 吊舱不共享存储空间,每个吊舱都有自己的7GB存储空间
  • pod需要使用azureDisk,因为我需要一个7GB的按需存储空间,这意味着当我扩展部署副本时,可以动态创建azureStorage

当使用azureDisk时,我需要将其与访问模式类型ReadWriteOnce一起使用(如文档中所述(,它会将唯一的1个pod连接到这个磁盘上,这是可以找到的,但是,只有当我有1个pod时,这才有效,如果我有超过1个pod,我不能使用相同的声明。。。有没有任何方法可以像第一个声明中那样动态地请求更多的存储?

注1:我知道有一个卷ClaimTemplates,但它只与Statefulset有关。

注2:我不在乎一个吊舱是否重新启动100次,这反过来会产生100 PV,只使用1,这很好。

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

最好弄清楚如何在StatefulSet中运行应用程序并使用VolumeClaimTemplates

✌️

主要问题是-为什么 ";如果我有一个没有状态的应用程序,那么我仍然需要每个pod的大容量";

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

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

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

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

  • 部署与StatefulSets

最新更新