2017-10-13 31 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文件可能会有所帮助。 –