写入卷挂载时 Kubernetes Pod 内存不足

Xoc*_*zin 3 ubuntu docker google-cloud-platform kubernetes google-kubernetes-engine

我有一个 Kubernetes 集群,它负责处理作业。这些职位的定义如下:

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
Run Code Online (Sandbox Code Playgroud)

请注意,我正在尝试将主机中的文件夹安装到容器中 ( workspace)。另请注意定义的内存限制。在我的容器上,我将许多文件下载到 中workspace,其中一些文件非常大(它们是使用 gsutil 从 GCS 下载的,但我认为这不太重要)。

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

我的容器基于 ubuntu:14.04,运行 shell 脚本,其中一行如下:

gsutil -m cp -r gs://some/cloud/location/*  /workspace/files
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我的容器肯定需要有一些限制,所以我不能只是放弃这些限制。

Tim*_*air 5

文件/tmp系统通常由tmpfs支持,它将文件存储在内存中而不是磁盘上。我的猜测是您的节点上就是这种情况,并且内存正在正确地充入容器。您可以使用空目录卷来代替吗?