簡體   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