如何在容器外写入数据?

how to write data outside a container?

希望你们中的一些人可以解决这个问题:

我有一个 python 代码应该写一个文件 output.csv,我想在容器外部的名为 /data 的文件夹中找到该文件, 我有一个 glusterfs 卷。所以我正在使用 Kubernetes 来部署我的容器。然后当它运行时,我应该在 glusterfs 的文件夹中找到该文件:这是我的 Yaml 文件: glusterfs 卷:

[xxx@xxxx ~]$ df |grep gluster
/dev/mapper/glustervg-glusterlv    10471424  1633164    8838260  16% /var/lib/glusterfs
xxxx:/gluster_vol             10471424  1737876    8733548  17% /data

感谢您的帮助

更新: 我已按照本教程尝试使用 glusterfs 部署卷 https://docs.openshift.com/container-platform/3.7/install_config/storage_examples/gluster_example.html

所以我创建了这些文件: 格鲁斯特 endpoit.yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: gluster-cluster
subsets:
- addresses:
  - ip: 10.122.5.143
  ports:
  - port: 1
    protocol: TCP
- addresses:
  - ip: 10.122.5.142
  ports:
  - port: 1
    protocol: TCP

持久卷:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gluster-pv
spec:
  capacity:
    storage: 3Gi
  accessModes:
  - ReadWriteMany
  glusterfs:
    endpoints: gluster-cluster
    path: data
    readOnly: false
  persistentVolumeReclaimPolicy: Retain

持久卷声明:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gluster-claim
spec:
  accessModes:
  - ReadWriteMany
  resources:
     requests:
       storage: 3Gi

gluster 服务:

apiVersion: v1
kind: Service
metadata:
  name: gluster-cluster
spec:
  ports:
  - port: 

我的新部署如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: uc1-deploy
spec:
  selector:
    matchLabels:
      app: uc1
  replicas: 1
  template:
    metadata:
      labels:
        app: uc1
    spec:
      containers:
      - name: uc1
        image: predicteur_uc1:1.5
        volumeMounts:
        - mountPath: /output
          name: test-volumed
          readOnly: false
        ports:
        - containerPort: 90
      volumes:
      - name: test-volumed
        persistentVolumeClaim:
          claimName: gluster-claim

当我部署它时出现错误:

Output: Running scope as unit run-20456.scope.
[2019-11-25 11:29:08.230125] E [glusterfsd.c:825:gf_remember_backup_volfile_server] 0-glusterfs: failed to set volfile server: File exists
Mount failed. Please check the log file for more details.
, the following error information was pulled from the glusterfs log to help diagnose this issue:
[2019-11-25 11:29:08.244765] E [glusterfsd-mgmt.c:1958:mgmt_getspec_cbk] 0-glusterfs: failed to get the 'volume file' from server
[2019-11-25 11:29:08.244841] E [glusterfsd-mgmt.c:2151:mgmt_getspec_cbk] 0-mgmt: failed to fetch volume file (key:/data)

正如 OP 在评论中已经提到的,问题是 PersistentVolume 中的 spec.glusterfs.path 被设置为系统上挂载 glusterfs 卷的目录名称。

将其值设置为实际的 glusterfs 卷路径(/gluster_vol 而不是 data)解决了该问题。

是的,值必须是 gluster_vol 而不是数据,数据代表机器上安装 glusterfs 的文件夹,但卷名是 gluster_vol。这是我犯的第一个错误。

其次,部署中的安装路径表示容器内的一个文件夹,我的 gluster_vol(及其包含的内容)必须安装在其中,以便它在容器内创建一个链接到 gluster vol 的文件夹,所以基本上我会把 gluster_vol 上的任何内容放在我的容器内的文件夹输出中。

我的第三个 python 代码在文件夹 output/opportunity 中创建了 csv 文件,所以这个文件夹结构也必须在 gluster_vol 中。谢谢 helloWorld 和 clement 的暗示,你们帮助了