在Kubernetes部署中为每个Pod附加新的Azure磁盘卷

问题描述

我有一个带有3个副本的Kubernetes部署应用,每个副本需要7GB的存储空间,我希望能够附加一个 new 空的azureDisk存储空间,以便将其安装到每个副本中在此部署中创建的广告连播/副本。

基本上我有以下限制:

  • 我必须使用Deployment,而不是Statefulset
  • 每次吊舱死亡并且新的吊舱启动时,它都不应具有状态,并且将附加一个新的空azureDisk。
  • Pod不共享其存储,每个Pod都有自己的7GB存储。
  • 吊舱需要使用azureDisk,因为我需要按需提供7GB的存储,这意味着在扩展部署副本时可以动态创建azureStorage。

在使用azureDisk时,我需要将其与Access模式类型ReadWriteOnce一起使用(如docs中所述),它将在该磁盘上附加唯一的一个Pod,但是,只有当我有一个Pod,如果我有多个Pod,就不能使用相同的声明...有没有办法动态请求更多存储空间,例如第一个声明中的存储空间?

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

注2:我不在乎吊舱是否重启100次,这反过来会创建100 PV,而仅使用1,这很好。

解决方法

我不确定为什么需要使用StatefulSet,但是我唯一看到的是为应用程序创建自己的operator。操作员将有一个控制器来管理您的Pod,类似于ReplicaSet所执行的操作,除了为每个实例化的新Pod创建一个新的PVC。

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

✌️

,

主要问题是-为什么? “如果我有一个没有状态的应用程序,那么每个Pod仍然需要大量的存储空间”

查看此说明,您应该专注于StateFull应用程序。从我的角度来看,您似乎正在强制对StateFull application

使用Deployment而不是StateFullSet

在您的示例中,您可能需要支持不同access modes pv

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...