pod tiene PersistentVolumeClaims no enlazado

84

Cuando presiono mis implementaciones, por alguna razón, aparece el error en mis pods:

pod tiene PersistentVolumeClaims no enlazado

Aquí están mis YAML a continuación:

Esto se ejecuta localmente, no en ninguna solución en la nube.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.16.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: ckan
  name: ckan
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: ckan
    spec:
      containers:
        image: slckan/docker_ckan
        name: ckan
        ports:
        - containerPort: 5000
        resources: {}
        volumeMounts:
            - name: ckan-home
              mountPath: /usr/lib/ckan/
              subPath: ckan
      volumes:
      - name: ckan-home
        persistentVolumeClaim:
          claimName: ckan-pv-home-claim
      restartPolicy: Always
status: {}

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ckan-pv-home-claim
  labels:
    io.kompose.service: ckan
spec:
  storageClassName: ckan-home-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
  volumeMode: Filesystem
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ckan-home-sc
provisioner: kubernetes.io/no-provisioner
mountOptions:
  - dir_mode=0755
  - file_mode=0755
  - uid=1000
  - gid=1000
soniccool
fuente

Respuestas:

86

Debe definir un PersistentVolume que proporcione espacio en disco para ser consumido por PersistentVolumeClaim .

Cuando se usa storageClassKubernetes, se habilitará el "Aprovisionamiento dinámico de volumen", que no funciona con el sistema de archivos local.


Para resolver su problema:

  • Proporcione un PersistentVolume que cumpla con las restricciones del reclamo (un tamaño> = 100Mi)
  • Quitar la línea- storageClassdel PersistentVolumeClaim
  • Eliminar StorageClass de su clúster

¿Cómo juegan estas piezas juntas?

En la creación de la descripción del estado de implementación, generalmente se sabe qué tipo (cantidad, velocidad, ...) de almacenamiento necesitará esa aplicación.
Para que una implementación sea versátil, le gustaría evitar una fuerte dependencia del almacenamiento. La abstracción de volumen de Kubernetes le permite proporcionar y consumir almacenamiento de forma estandarizada.

El PersistentVolumeClaim se utiliza para proporcionar un almacenamiento en restricciones junto con el despliegue de una aplicación.

Los PersistentVolume ofertas en todo el clúster de volumen-casos listo para ser consumido (" bound"). Un PersistentVolume estará vinculado a un reclamo. Pero dado que se pueden ejecutar varias instancias de esa declaración en varios nodos, varios nodos pueden acceder a ese volumen .

Un PersistentVolume sin StorageClass se considera estático .

"Dynamic Volume de aprovisionamiento" junto con un Almacenamiento permite al clúster PersistentVolumes provisión por demanda. Para que eso funcione, el proveedor de almacenamiento dado debe admitir el aprovisionamiento ; esto permite que el clúster solicite el aprovisionamiento de un "nuevo" PersistentVolume cuandoapareceun PersistentVolumeClaim insatisfecho.


Ejemplo PersistentVolume

Para saber cómo especificar las cosas, es mejor que eche un vistazo a la API de su versión de Kubernetes , por lo que el siguiente ejemplo se basa en la referencia de API de K8S 1.17 :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: ckan-pv-home
  labels:
    type: local
spec:
  capacity:
    storage: 100Mi
  hostPath:
    path: "/mnt/data/ckan"

El PersistentVolumeSpec nos permite definir múltiples atributos. Elegí un hostPathvolumen que mapea un directorio local como contenido para el volumen. La capacidad permite al programador de recursos reconocer este volumen como aplicable en términos de necesidades de recursos.


Recursos adicionales:

Florian Neumann
fuente
3
No puede eliminar StorageClass, basta con reemplazar el valor del nombre de la clase de almacenamiento por una cadena vacía, como StorageClass: ""
mrvol
¿Cómo se debe definir PersistentVolume?
Victor Zuanazzi
1
@VictorZuanazzi buena pregunta: parece que los documentos cambiaron ligeramente, agregué un ejemplo. Profundizar en la API es bastante difícil al principio. Por fortuna, a menudo hay referencias cruzadas de los documentos API a las guías y viceversa. Espero que esto te ayude a continuar.
Florian Neumann