2017-09-27 129 views
1

我想要在启用local PV的情况下在裸露的元kubernetes 1.7中设置预定义的PostgreSQL集群。我有三个工作节点。我在每个节点上创建本地PV并成功部署有状态集(使用一些复杂的脚本来设置Postgres复制)。我可以依靠volumeClaimTemplates命名约定吗?

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

apiVersion: apps/v1beta1 
kind: StatefulSet 
    metadata: 
    name: postgres 
    volumeClaimTemplates: 
    - metadata: 
     name: pgvolume 

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

对于一些tricky,我手动创建PVC并通过选择器绑定到目标PV。我再次测试有状态集。看起来,有状态组非常乐意使用这些PVC。

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

回答

1

基于该statefulset API reference

volumeClaimTemplates是荚允许参考权利要求中的一个列表。 StatefulSet控制器负责以保持pod身份的方式将网络身份映射到声明。此列表中的每个声明必须在模板中的一个容器中至少有一个匹配的(按名称)volumeMount。此列表中的声明优先于模板中的任何卷,且名称相同。

所以我想你可以依靠它。

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

volumeClaimTemplates: 
    - metadata: 
     name: www 
    spec: 
     accessModes: [ "ReadWriteOnce" ] 
     storageClassName: my-storage-class 
     resources: 
     requests: 
      storage: 1Gi 

详情请参阅Dynamic Provisioning and Storage Classes in Kubernetes