2017-10-13 88 views
1

我有一個小問題,需要知道什麼是解決此問題的最佳方法/解決我的問題。共享相同主機路徑/ pvc的多個Kubernetes莢會重複輸出

我已經在Kubernetes上部署了幾個豆莢,到目前爲止我很喜歡與Kubernetes一起學習和使用。所有的持續量,量索賠等等。並可以在主機上看到我的數據,因爲我需要這些文件進行進一步處理。

現在的問題是共享相同卷聲明的2個Pod(2個副本)正在寫入主機上的相同位置,但不幸的是導致數據在輸出文件中被複制。

我需要的是:

  • ,將主機上的每個吊艙的唯一的輸出。實現這一目標的唯一方法是由 擁有兩個部署文件,在我的情況下,每個文件都使用不同的卷索賠/永久 卷?同時不知道這是否是未來更新,升級,某些數量的可用莢的最佳方法...等等。
  • 或者我仍然可以擁有一個具有2個或更多副本的部署文件,並且仍然可以避免輸出共享相同的pvc時是否有重複?

請注意,我有一個節點部署,這就是爲什麼我目前正在使用hostpath。

創建PV:

kind: PersistentVolume 
apiVersion: v1 
metadata: 
    name: ls-pv 
    labels: 
    type: local 
spec: 
    storageClassName: manual 
    capacity: 
    storage: 100Gi 
    accessModes: 
    - ReadWriteOnce 
    hostPath: 
    path: "/ls-data/my-data2" 

要求-PV:

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: ls-pv-claim 
spec: 
    storageClassName: manual 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 100Gi 

我如何用我的PV我的部署裏:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: logstash 
    namespace: default 
    labels: 
    component: logstash 
spec: 
    replicas: 2 
    selector: 
    matchLabels: 
    component: logstash 
#omitted 
     ports: 
     - containerPort: 5044 
      name: logstash-input 
      protocol: TCP 
     - containerPort: 9600 
      name: transport 
      protocol: TCP 
     volumeMounts: 
     - name: ls-pv-store 
      mountPath: "/logstash-data" 
     volumes: 
     - name: ls-pv-store 
     persistentVolumeClaim: 
     claimName: ls-pv-claim 

回答

1

取決於正是你正在努力實現您可以使用Statefulsets而不是「部署」。從Statefulset的Pod模板生成的每個Pod都可以擁有自己獨立的PersistentVolumeClaim,它是從volumeClaimTemplate創建的(請參閱示例鏈接)。您將需要爲此設置一個StorageClass

如果你正在尋找更簡單的東西,你可以寫每個Pod的/mnt/volume/$HOSTNAME。這也將確保他們使用單獨的文件,因爲Pod的主機名是唯一的。

+0

我決定現在使用hostname方法作爲快速解決方案,但仍然是同樣的問題!如果我使用/ path/$ HOSTNAME /或文件名 - $ HOSTNAME,我仍然只能得到一個文件,在兩個窗格之間共享。我甚至意識到一個pod將在其他pod上擁有其自己主機名的文件或目錄,並且兩者都將開始使用/共享相同的文件。不知道爲什麼當使用主機名時,爲什麼不能在路徑中看到不同的文件名,這是唯一的。 – Zee

+0

我可能是錯的,但看起來像是在兩個部署副本之間使用相同的卷聲明時,或者更多,一旦創建了第二個(最新)pod,它將成爲使用PVC的那個,即使名稱或路徑是唯一的每個豆莢因爲主機名。 – Zee

+0

如果您在問題中發佈完整的yaml文件可能會有所幫助。 –