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
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
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.
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
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.