13

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

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

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

创建的 pvc 是pgvolume-postgres-0, pgvolume-postgres-1, pgvolume-postgres-2.

有点棘手,我手动创建 PVC 并通过选择器绑定到目标 PV。我再次测试有状态集。看来有状态集很乐意使用这些 PVC。

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

4

1 回答 1

10

基于 statefulset API 参考

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

所以我想你可以依靠它。

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

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

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

于 2017-10-22T16:30:43.313 回答