共享相同主机路径/ pvc的多个Kubernetes荚会重复输出
问题描述:
我有一个小问题,需要知道什么是解决此问题的最佳方法/解决我的问题。共享相同主机路径/ 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
答
取决于正是你正在努力实现您可以使用Statefulsets而不是“部署”。从Statefulset的Pod模板生成的每个Pod都可以拥有自己独立的PersistentVolumeClaim,它是从volumeClaimTemplate创建的(请参阅示例链接)。您将需要为此设置一个StorageClass。
如果你正在寻找更简单的东西,你可以写每个Pod的/mnt/volume/$HOSTNAME
。这也将确保他们使用单独的文件,因为Pod的主机名是唯一的。
我决定现在使用hostname方法作为快速解决方案,但仍然是同样的问题!如果我使用/ path/$ HOSTNAME /或文件名 - $ HOSTNAME,我仍然只能得到一个文件,在两个窗格之间共享。我甚至意识到一个pod将在其他pod上拥有其自己主机名的文件或目录,并且两者都将开始使用/共享相同的文件。不知道为什么当使用主机名时,为什么不能在路径中看到不同的文件名,这是唯一的。 – Zee
我可能是错的,但看起来像是在两个部署副本之间使用相同的卷声明时,或者更多,一旦创建了第二个(最新)pod,它将成为使用PVC的那个,即使名称或路径是唯一的每个豆荚因为主机名。 – Zee
如果您在问题中发布完整的yaml文件可能会有所帮助。 –