0

我有一个需要处理作业的Kubernetes集群。这些作业的定义如下:Kubernetes pod在写入卷安装时内存不足

apiVersion: batch/v1 
kind: Job 
metadata: 
    name: process-item-014 
    labels: 
    jobgroup: JOB_XXX 
spec: 
    template: 
    metadata: 
     name: JOB_XXX 
     labels: 
     jobgroup: JOB_XXX 
    spec: 
     restartPolicy: OnFailure 
     containers: 
     - name: worker 
     image: gcr.io/.../worker 
     volumeMounts: 
     - mountPath: /workspace 
      name: workspace 
     resources: 
      limits: 
      cpu: 500m 
      memory: 1Gi 
      requests: 
      cpu: 500m 
      memory: 512Mi 
     volumes: 
     - name: workspace 
      hostPath: 
      path: /tmp/client-workspace 

请注意,我试图在主机的文件夹安装到容器(workspace)。还要注意定义的内存限制。 在我的容器上,我下载了一些文件到workspace,其中一些文件很大(它们可以从GCS的gsutil下载,但不要认为这太重要)。

当我下载的文件超出了内存限制时,我的代码因“设备空间不足”错误而中断。这并不完全有意义,因为我将这些文件存储到一个由主机的存储支持的挂载中,这已经足够了。在docs中也提到memory限制了容器可用RAM的数量,而不是存储容量。不过,当我将限制设置为XGi时,它会在XGi相当一致地下载后中断。

我的容器基于Ubuntu:14.04,运行shell脚本这样一行:

gsutil -m cp -r gs://some/cloud/location/* /workspace/files 

我在做什么错?肯定会对我的容器有一些限制,所以我不能放弃限制。

回答

1

/tmp文件系统通常支持tmpfs,它将文件存储在内存中而不是磁盘上。我的猜测是,你的节点就是这种情况,并且内存正在正确地向容器充电。你可以使用emptydir体积吗?

+0

这实际上可以解释它。我的应用程序在很大程度上依赖于创建临时文件,有任何改变它的机会,所以它使用磁盘呢?我不认为使用'emptydir'会是一个问题。 – Xocoatzin