web-dev-qa-db-fra.com

Montage de volume persistant Kubernetes introuvable

J'essaie de créer et de monter un volume mais je reste bloqué.

Cette partie crée le stockage:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvclaim2
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium
  resources:
    requests:
      storage: 5Gi

Ce qui suit est une continuation de ma section de déploiement:

volumeMounts:
- name: config
  mountPath: /config
  readOnly: true
args:
- --configfile=/config/traefik.toml


volumes:
  - name: config
    persistentVolumeClaim:
      claimName: pvclaim2
    configMap:
    name: traefik-config

Je reçois toujours le message d'erreur ci-dessous:

Le déploiement "traefik-ingress-controller" n'est pas valide: spec.template.spec.containers [0] .volumeMounts [0] .name: introuvable: "config"

Toute aide est appréciée.

METTRE À JOUR:

Output from describe pv:

Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  certs:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  pvclaim101
    ReadOnly:   false
  config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      traefik-conf
    Optional:  false
  traefik-ingress-controller-token-6npxp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  traefik-ingress-controller-token-6npxp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age               From               Message
  ----     ------            ----              ----               -------
  Warning  FailedScheduling  1m (x25 over 2m)  default-scheduler  persistentvolumeclaim "pvclaim101" not found
5
Rutnet

On dirait que vous avez une indentation, il trouve le VolumeMount mais pas le Volume. Quelque chose comme ça devrait fonctionner:

containers:
- image: your-image
  name: your-containers
  volumeMounts:
  - name: config
    mountPath: /config
    readOnly: true
  args:
  - --configfile=/config/traefik.toml
volumes:
  - name: config
    persistentVolumeClaim:
      claimName: pvclaim2
    configMap:
    name: traefik-config
1
Rico

Je vais prendre une supposition sauvage ici, votre contrôleur d'entrée traefik fonctionne-t-il dans le même espace de noms que votre pvc? Les Pvc sont étendus à l'espace de noms, dans votre exemple, c'est dans l'espace de noms par défaut. Normalement, nous déployons l'entrée dans son propre espace de noms comme "entrée" et ses autres pods associés.

1
Bal Chua

Déboguons:

1) le nom de votre PersistentVolumeClaim est pvclaim2 et tout semble ok

2) La section VolumeMounts semble correcte. config est en mode lecture seule et il est correct pour la configuration.

3) La section volumes décrit que le type de volume config est le persistentVolumeClaim et est lié au PVC pvclaim2 - D'accord!

4) Ensuite, nous pouvons voir que le type de volume config est le configMap avec le PersistentVolumeClaim en même temps ... et ce sera la raison d'une erreur dans le futur. En supposant que vous vouliez utiliser config volume comme support pour le fichier de configuration traefik.toml vous n'avez pas besoin de PVC (en particulier 5 gigaoctets en mode lecture seule)

Il vous suffit de créer configMap. Syntaxe de commande:

kubectl create configmap <map-name> <data-source>

Dans votre cas, cela pourrait être fait comme ceci:

kubectl create configmap traefik-config --from-file=<your-local-path-to-file>/traefik.toml

Ensuite, vous devez mettre à jour votre déploiement:

containers:
- image: your-image
  name: your-containers
  volumeMounts:
  - name: config
    mountPath: /config
    readOnly: true # as far as i know configmaps are read-only since 1.9.5
  - name: some-persistent-storage-name
    mountPath: /<some-mount-point-for-storage>

...

volumes:
  - name: config
    configMap:
      name: traefik-config
  - name: some-persistent-storage-name
    persistentVolumeClaim:
      claimName: pvclaim2
1
Konstantin Vustin

Cela est dû au fait qu'il n'y a pas de volume persistant (PV) à lier à cette revendication de volume persistant (PVC). Cela peut être dû à plusieurs raisons.

Une chose est que vous n'avez pas créé de PV pour la réclamation. Un PVC doit avoir un PV pour être réclamé. Si c'est le cas, vous devez d'abord créer un volume de persistance de n'importe quel type de multiple types pris en charge par les kubernets. Un exemple de PV utilisant un nfs peut être trouvé ici .

La deuxième raison peut être qu'aucun paramètre de l'un quelconque des PV existants et non liés n'est associé au PVC. Vérifiez donc si la capacité de stockage, les modes d'accès, la classe de stockage et les étiquettes de PV et PVC correspondent. Par exemple, si vous voulez que votre PVC du storageClassName: managed-premium assurez-vous que votre PV possède également le type de classe de stockage.

Et la dernière chose peut être le PV que vous pensez qu'il existe et faire correspondre tous les paramètres avec du PVC lié à un autre PVC. Le PV est une abstraction atomique et vous ne pouvez pas utiliser un seul PV pour plusieurs PVC.

Vous pouvez utiliser kubectl get pv pour vérifier s'il existe des volumes disposant de STATUS et correspondant aux exigences des PVC.