Tengo un clúster de Kubernetes que acepta trabajos para su procesamiento. Estos trabajos se definen de la siguiente manera:
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 Tenga en cuenta que estoy tratando de montar una carpeta en el host en el contenedor (área de workspace ). Tenga en cuenta también los límites de memoria definidos. En mi contenedor, descargo varios archivos en el espacio de workspace , algunos de ellos son bastante grandes (se descargan con gsutil de GCS, pero no creo que sea demasiado importante).
Cuando los archivos que descargo exceden los límites de la memoria, mi código se rompe con un error de "dispositivo sin espacio". Esto no tiene mucho sentido, porque estoy almacenando los archivos en un montaje, que está respaldado por el almacenamiento del host, que es más que suficiente. También se menciona en los documentos que el límite de memory es la cantidad de RAM disponible para el contenedor, no el almacenamiento. Aún así, cuando configuro el límite en XGi , se rompe después de la descarga de XGi de manera bastante consistente.
Mi contenedor se basa en ubuntu: 14.04, ejecutando un script de shell con una línea como esta:
gsutil -m cp -r gs://some/cloud/location/* /workspace/files¿Qué estoy haciendo mal? Definitivamente tendré que tener algunos límites para mis contenedores, por lo que no puedo simplemente eliminar los límites.
El sistema de archivos /tmp a menudo está respaldado por tmpfs , que almacena archivos en la memoria en lugar de en el disco. Supongo que ese es el caso en sus nodos, y la memoria se carga correctamente en el contenedor. ¿Puedes usar un volumen de directorio vacío en su lugar?