Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 我能';在kubernetes卷中列出数据_Docker_Kubernetes_Minikube_Persistent Volumes_Mounted Volumes - Fatal编程技术网

Docker 我能';在kubernetes卷中列出数据

Docker 我能';在kubernetes卷中列出数据,docker,kubernetes,minikube,persistent-volumes,mounted-volumes,Docker,Kubernetes,Minikube,Persistent Volumes,Mounted Volumes,我有一个应用程序,记录实时流量并重播它们 这是一个简单的应用程序,但当我尝试将它用于kubernetes时,我遇到了在卷中持久化数据的问题 我想这样做: 在pod No.1中,我使用goreplay容器和其他只有一个简单python服务器的容器。。。任务是goreplay将侦听来自服务器外部的请求并将其保存到文件中,这是部署文件: 通常这将创建文件 问题是,当我删除部署并创建一个部署时,它的任务是读取文件并将保存请求转发到服务器,但它找不到文件,显然我使用的卷是错误的,这是第二个假定查找并

我有一个应用程序,记录实时流量并重播它们

这是一个简单的应用程序,但当我尝试将它用于kubernetes时,我遇到了在卷中持久化数据的问题

我想这样做:

  • 在pod No.1中,我使用goreplay容器和其他只有一个简单python服务器的容器。。。任务是goreplay将侦听来自服务器外部的请求并将其保存到文件中,这是部署文件:
通常这将创建文件

问题是,当我删除部署并创建一个部署时,它的任务是读取文件并将保存请求转发到服务器,但它找不到文件,显然我使用的卷是错误的,这是第二个假定查找并读取文件的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: goreplay-deployment
  labels:
        app: goreplay-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: goreplay-app
  template:
    metadata:
      labels:
        app: goreplay-app
    spec:
      containers:
      - name: goreplay
        image: feiznouri/goreplay:2.0
        args:
          - "--input-file"
          - "requests_docker_0.gor"
          - "--output-http=http://localhost:3000"
        volumeMounts:
          - name: data
            mountPath: /var/lib/goreplay
      - name: myserver
        image: feiznouri/python-server:1.1
        args:
          - "3000"
        ports:
        - name: server-port
          containerPort: 3000
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: goreplay-claim
PS:这是永久卷的yaml文件:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: goreplay-volume
  labels:
    type: local
spec:
  storageClassName: custum
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/mnt/data"
这是存储类的文件:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: custom
provisioner: k8s.io/minikube-hostpath
reclaimPolicy: Retain
volumeBindingMode: Immediate
对于持久性卷声明:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: goreplay-claim
spec:
  storageClassName: custum
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Mi
我如何才能使这项工作,找到并使用我在第二个pod中创建的第一个文件


提前谢谢。

我复制了它,看起来这些卷都很好

不好的是如何将文件路径传递给goreplay

以下是我所做的:

kubectl exec -it goreplay-deployment-899c49f95-7qdh4 -c goreplay sh
/home/goreplay # ps auxwf
PID   USER     TIME  COMMAND
    1 root      0:00 ./gor --input-raw :3000 --output-file=requests_docker.gor
   36 root      0:00 sh
   42 root      0:00 ps auxwf
/home/goreplay # ls /proc/1/cwd -l
lrwxrwxrwx    1 root     root             0 Feb 19 09:44 /proc/1/cwd -> /home/goreplay
让我解释一下你在这里看到了什么。我执行goreplay容器并检查goreplay进程的PID(PID=1)。接下来,我通过检查
/proc/1/cwd
符号链接来检查这个进程的当前工作目录。如您所见,它被符号链接到
/home/goreplay

它告诉我们什么

它告诉我们,
--output file=requests\u docker.gor
正在使goreplay将文件保存在
/home/goreplay/requests\u docker.gor
(因为您指定的是相对于进程当前工作目录的路径,而不是使用指向卷的绝对路径)。应将其设置为:

--output-file=/var/lib/gorepath/requests_docker.gor
因为它是安装卷的目录


这同样适用于第二次部署。您应该指定:

--input-file=/var/lib/goreplay/requests_docker_0.gor`
这样它就可以从卷而不是pod的主目录中读取数据(
/home/goreplay



更改它,它应该会工作。

您确定没有删除并重新创建永久卷吗?如果两个容器没有安排在同一节点上,则
主机路径将指向不同的位置。不幸的是,大多数相对容易获取的卷类型不支持ReadWriteMany访问模式。您是否可以通过一个服务通过HTTP请求或消息队列发送另一个数据,将其重新构造为完全不需要共享文件?@DanielGarrell否自两个服务启动以来,永久卷一直处于打开状态days@DavidMaze我不确定你的建议,但我只想说我用的是minikube,所以我不认为有不止一个节点,对吗?@DavidMaze是的,我可以直接将请求从一个节点转发到另一个节点,我成功地做到了,但是这个应用程序提供了保存文件然后使用它的功能,我只想将它应用到kubernetes中,但看起来卷的问题有点复杂,这是一个非常完美的答案,谢谢,成功了!:)你能告诉我如何用你刚才的方式调试吗?这方面的任何文档都会有所帮助
--input-file=/var/lib/goreplay/requests_docker_0.gor`