我可以依靠volumeClaimTemplates命名约定吗?

Gon*_* Yi 7 kubernetes persistent-volumes persistent-volume-claims

我想在具有本地PV启用的裸meta kubernetes 1.7中设置预定义的PostgreSQL集群。我有三个工作节点。我在每个节点上创建本地PV并成功部署有状态集(使用一些复杂的脚本来设置Postgres复制)。

但是我注意到在volumeClaimTemplates和PersistentVolumeClaim之间存在一种命名约定。例如

apiVersion: apps/v1beta1 
kind: StatefulSet
  metadata:   
     name: postgres
  volumeClaimTemplates:
  - metadata:
      name: pgvolume
Run Code Online (Sandbox Code Playgroud)

创建的PVC是pgvolume-postgres-0pgvolume-postgres-1pgvolume-postgres-2

通过一些技巧,我手动创建了PVC并通过选择器绑定到目标PV。我再次测试有状态集。有状态集似乎很高兴使用这些PVC。

我成功完成了测试,但仍然有这个问题。我可以依靠volumeClaimTemplates命名约定吗?这是未记录的功能吗?

小智 5

基于statefulset API参考

volumeClaimTemplates是允许窗格引用的声明列表。StatefulSet控制器负责以维持容器身份的方式将网络身份映射到声明。此列表中的每个声明必须在模板的一个容器中至少有一个匹配的(按名称)volumeMount。此列表中的声明优先于模板中具有相同名称的任何卷。

因此,我想您可以依靠它。

此外,您可以定义存储类以利用持久性卷的动态配置,因此您不必手动创建它们。

  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: my-storage-class
      resources:
        requests:
          storage: 1Gi
Run Code Online (Sandbox Code Playgroud)

请参阅Kubernetes中的动态预配置和存储类以获取更多详细信息。

  • 这对于动态存储供应来说很好,但是当您需要手动供应 PV 并将它们分配给那些 PVC 时会发生什么。以我的经验,这是相当令人不安的。有没有办法按顺序定义在该 PVC 模板中将使用哪些 PV 名称?否则,手动 PV 配置将成为一项艰巨的任务,试图仔细匹配 `.spec.volumeName`,因为每个 SatetefulSet 实例仅在前一个实例 `Ready` 之后创建。 (4认同)