如何在容器外写入数据?
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 的暗示,你们帮助了
希望你们中的一些人可以解决这个问题:
我有一个 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 的暗示,你们帮助了