Kubernetes-在所有POD上生成文件

Kubernetes-在所有POD上生成文件,kubernetes,Kubernetes,我有JavaAPI,它将数据导出到excel,并在POD上生成一个文件,在POD上提供请求。 现在,下一个请求(下载文件)可能会转到另一个POD,下载失败 我该怎么做? 如何在所有POD上生成文件?或者,如何确保后续请求进入生成文件的同一POD? 我不能给直接POD的网址,因为它将无法访问客户端 谢谢。您需要使用持久卷在容器之间共享相同的文件。您可以使用安装在容器上的节点存储(最简单的方法)或其他分布式文件系统,如NFS、EFS(AWS)、GlusterFS等 如果您需要一个最简单的方法来共享文

我有JavaAPI,它将数据导出到excel,并在POD上生成一个文件,在POD上提供请求。 现在,下一个请求(下载文件)可能会转到另一个POD,下载失败

我该怎么做? 如何在所有POD上生成文件?或者,如何确保后续请求进入生成文件的同一POD? 我不能给直接POD的网址,因为它将无法访问客户端


谢谢。

您需要使用持久卷在容器之间共享相同的文件。您可以使用安装在容器上的节点存储(最简单的方法)或其他分布式文件系统,如NFS、EFS(AWS)、GlusterFS等

如果您需要一个最简单的方法来共享文件,并且您的pod位于同一个节点中,那么您可以使用来存储文件并与其他容器共享卷

假设您有一个只有一个节点的kubernetes群集,并且希望与POD共享节点的路径
/mtn/data

创建持久卷:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
        - name: task-pv-storage
          persistentVolumeClaim:
            claimName: task-pv-claim
      containers:
        - name: task-pv-container
          image: nginx
          ports:
            - containerPort: 80
              name: "http-server"
          volumeMounts:
            - mountPath: "/mnt/data"
              name: task-pv-storage
hostPath PersistentVolume使用节点上的文件或目录模拟网络连接存储

创建一个PersistentVolumeClaim:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
        - name: task-pv-storage
          persistentVolumeClaim:
            claimName: task-pv-claim
      containers:
        - name: task-pv-container
          image: nginx
          ports:
            - containerPort: 80
              name: "http-server"
          volumeMounts:
            - mountPath: "/mnt/data"
              name: task-pv-storage
POD使用PersistentVolumeClaims请求物理存储

查看PersistentVolumeClaim:

kubectl获得pvc任务pv索赔

输出显示PersistentVolumeClaim已绑定到PersistentVolume,
task pv volume

NAME            STATUS    VOLUME           CAPACITY   ACCESSMODES   STORAGECLASS   AGE
task-pv-claim   Bound     task-pv-volume   10Gi       RWO           manual         30s
使用2个副本创建部署,例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
        - name: task-pv-storage
          persistentVolumeClaim:
            claimName: task-pv-claim
      containers:
        - name: task-pv-container
          image: nginx
          ports:
            - containerPort: 80
              name: "http-server"
          volumeMounts:
            - mountPath: "/mnt/data"
              name: task-pv-storage
现在,您可以在两个容器中检查路径
/mnt/data
是否具有相同的文件

如果集群中有多个节点,我建议您考虑其他类型的节点

参考文献:

根据群集运行的环境,您可以使用共享存储介质,而不是将文件存储在每个容器的本地存储中。如果这不是一个选项,您可以考虑在入口级别配置粘性会话(nginx支持此功能)。将文件下载到s3/gcp存储或使用共享卷