web-dev-qa-db-fra.com

Kubettes: POD ne peut pas monter un PVC, même si ce dernier semble être correctement lié à un PV

Bonjour.

Je rencontre un problème tout en essayant de déployer une pod qui a été configuré pour utiliser un volume persistant. Mon installation est hébergée sur Hetzner Cloud et Kubettes a été configurée conformément aux instructions disponibles par le fournisseur. La configuration de base semble ok car je peux déployer par exemple. PORTAINER de l'une des manifestations fournies: il monte correctement le PVC et fonctionne. Étant donné que la configuration par défaut ne crée pas de stockage persistant, chaque fois que je n'enlève pas et que je redéploie Portainer toutes les données sont perdues.

J'ai donc procédé à la création d'un PersistentVolume, mais la dernière étape ne fonctionne pas. Je ne peux pas dire si le problème est un kubettes générique un ou c'est avec mon intégration avec Hetzner - mais je pense qu'il est logique de vérifier d'abord la première hypothèse. Donc, je demande ici avant d'aller au forum Hetzner.

Pas:

  1. J'ai créé un volume à l'aide de l'interface utilisateur de Hetzner Cloud.

  2. Ensuite, j'ai déployé un PV:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: portainer
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-portainer-test
      namespace: portainer
      labels:
        env: test
    spec:
      storageClassName: portainer-test
      accessModes:
        - ReadWriteOnce
      capacity:
        storage: 10Gi
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: csi.hetzner.cloud
        fsType: ext4
        volumeHandle: "pv_id"

pv_id Est l'ID de volume que je peux voir avec l'interface utilisateur Hetzner.

Je peux voir le PV avec kubelet get pv -A:

NAMESPACE   NAME                                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS     REASON   AGE
            persistentvolume/pv-portainer-test   10Gi       RWO            Retain           Available           portainer-test            71s

Notez que l'espace de noms n'a pas été défini ... mais je suppose que ce n'est pas un problème grave. J'ai peut-être tort.

  1. J'ai déployé Portainer de ici et le correctif suivant:
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: portainer
      namespace: portainer
    spec:
      storageClassName: portainer-test
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: "10Gi"

Maintenant avec kubectl get pvc,pv -A Je vois que le PVC a été lié au PV:

​NAMESPACE   NAME                              STATUS   VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS     AGE
portainer   persistentvolumeclaim/portainer   Bound    pv-portainer-test   10Gi       RWO            portainer-test   16m

NAMESPACE   NAME                                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS     REASON   AGE
            persistentvolume/pv-portainer-test   10Gi       RWO            Retain           Bound    portainer/portainer   portainer-test            17m
  1. Mais le PORTINER POD reste dans le statut ContainerCreating pour toujours. Avec kubectl describe Je vois la raison:

Warning  FailedAttachVolume  2s (x7 over 38s)  attachdetach-controller  AttachVolume.Attach failed for volume "pv-portainer-test" : rpc error: code = FailedPrecondition desc = failed to publish volume: volume is attached

Il semble donc qu'il se plaint car le PV est déjà attaché ... mais en effet, il aurait dû être joint précisément à ce pod.

1
Fabrizio Giudici

Le problème n'était pas lié aux K8, mais spécifique à Hetzner. Dans la configuration du projet, j'avais laissé le volume attaché à un serveur fixe, ce qui l'a évidemment rendue indisponible pour la fixation via le pilote CSI. Un utilisateur au Hetzner Cloud Forum m'a signalé cela.

J'aimerais remercier Bazhikov de toute façon, comme il m'a donné des indices utiles pour la fixation d'autres problèmes.

1
Fabrizio Giudici