es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Helm timeout para cronjob con un volumen persistente.

Tengo un trabajo cron de Kubernetes en AWS EKS que requiere un volumen persistente, por lo que esto es aproximadamente lo que tengo:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-{{$.Release.Name}}-tmp
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Gi 

Luego se monta en un trabajo cron (la parte de montaje es correcta, como muestra lo siguiente)

Todo se implementa con Helm, y una implementación nueva agota el tiempo de espera, porque el PVC permanece en el estado Pending con el mensaje esperando a que se cree el primer consumidor antes de enlazarlo. Si durante la implementación creo un nuevo trabajo basado en el trabajo cron, el PVC se enlaza inmediatamente y esto y todas las implementaciones posteriores funcionan como se espera.

¿Es posible hacer que un PVC se enlace “ansiosamente”, sin un pod que lo requiera o, preferiblemente, no esperar a que se enlace durante la instalación del gráfico?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible realizar un enlace de PVC (Persistent Volume Claim) de forma anticipada sin una vaina (pod) que lo requiera. Una forma de lograr esto es mediante el campo waitForFirstConsumer en la sección spec del PVC. Al establecer este campo en false, el PVC quedará asociado de forma inmediata, en lugar de esperar a que una vaina lo reclame.

    Aquí hay un ejemplo de cómo puede modificar su YAML de PersistentVolumeClaim para incluir el campo waitForFirstConsumer:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-{{$.Release.Name}}-tmp
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 10Gi
      **waitForFirstConsumer: false**
    

    Alternativamente, también puede pre-provisionar el PV y hacer referencia a él directamente en el PVC. Esto eliminará la necesidad de un aprovisionamiento dinámico y el PVC estará asociado de forma inmediata.

    Para hacer esto, debe crear un archivo YAML de PV que especifique los detalles de almacenamiento y los modos de acceso, y luego hacer referencia al campo name del PV en su YAML de PVC. Aquí hay un ejemplo:

    # PV YAML
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: my-pv
    spec:
      storageClassName: default
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: /path/on/host
    
    # PVC YAML
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-{{$.Release.Name}}-tmp
    spec:
      accessModes:
        - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 10Gi
      volumeName: my-pv # referencia al PV pre-provisionado
    

    Al pre-provisionar el PV y hacer referencia a él directamente en el PVC, el PVC se asociará inmediatamente y no tendrá que esperar que se asocie durante la instalación del paquete.

Comments are closed.