繁体   English   中英

卷中每个pod的动态卷配置文件夹?

[英]Dynamic volume provisioning folder per pod in a volume?

我的目标是使用 StatefulSet 中的 volumeClaimsTemplate 在卷内创建的每个 pod 的文件夹(pod 名称)。

一个例子是:

  • 持久卷=“/数据”
  • 豆荚:
    • pod-0 = "/data/pod-0"
    • pod-1 = "/data/pod-1"

我正在努力让副本为自己创建新文件夹。 任何有关如何做到这一点的帮助将不胜感激。

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

这意味着使用volumeClaimTemplates您可以动态地从存储 class 请求 PVC。

如果我们以这个yaml为例:

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

部署 pod 后,您会注意到正在创建 pod,并且在创建过程中请求了PVC PVC是以下约定中的名称:

volumeClaimTemplate name + Pod-name + Ordinal-number

因此,如果您以 yaml 以上为例,您将收到三个 PVC(假设 3 个副本):

NAME        STATUS      VOLUME      
www-web-0   Bound       pvc-12d77135...
www-web-1   Bound       pvc-08724947...
www-web-2   Bound       pvc-50ac9f96

值得一提的是, Persistent Volume Claims代表了特定 Pod 对持久卷的独占使用。 这意味着,如果我们单独查看卷,我们会发现每个卷都分配给特定的 pod:

➜ ~ pwd
/tmp/hostpath-provisioner/pvc-08724947...
➜ ~ ls 
web-1
➜ ~ pwd
/tmp/hostpath-provisioner/pvc-50ac9f96...
➜ ~ ls 
web-2

在对此进行测试时,我确实实现了您的目标,但我必须手动创建persistentvolumes卷,并且它们必须指向相同的本地路径:

 local:
    path: /home/docker/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - minikube

这与subPathExpr结合将 pod 命名的目录安装到指定路径中。

    volumeMounts:
    - name: www
      mountPath: /usr/share/nginx/html
      subPathExpr: $(NAME)
    env:
      - name: NAME
        valueFrom: 
          fieldRef:
             fieldPath: metadata.name

结果( web是部署的名称):

➜ ~ pwd
/home/docker/data
➜ ~ pwd
web-0  web-1  web-2

这里有更多信息,扩展环境变量的子路径是如何工作的。

使用subPathExpr字段从 Downward API 环境变量构造subPath目录名称。 此功能需要启用VolumeSubpathEnvExpansion 功能门 它从 Kubernetes 1.15 开始默认启用。 subPathsubPathExpr属性是互斥的。

如果您有任何问题,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM