2017-08-05 2 views
0

J'ai défini un point de montage comme ceci:Comment puis-je savoir pourquoi une étape réussie de kubernetes MountVolume n'entraîne pas de montages dans un conteneur docker?

 - name: dir-graphite 
     configMap: 
      name: hub-logstash-grafana 
      items: 
      - key: logstash.conf.file 
       path: config 

avec une déclaration de volume plus tard:

 volumes: 
     volumeMounts: 
     - mountPath: "/opt/blackduck/hub/logs" 
      name: dir-webapp 
     - mountPath: "/var/lib/logstash/data" 
      name: dir-logstash 
     - mountPath: "/tmp/x" 
      name: dir-graphite 

En Kubernetes 1.6.6, je vois

Aug 05 02:02:59 ip-10-0-26-84 kubelet[30344]: I0805 02:02:59.912640 30344 operation_generator.go:597] 
MountVolume.SetUp succeeded for volume "kubernetes.io/configmap/a47ebff8-7976-11e7-8369-12207729cdd2-dir-graphite" (spec.Name: "dir-graphite") pod "a47ebff8-7976-11e7-8369-12207729cdd2" (UID: "a47ebff8-7976-11e7-8369-12207729cdd2"). 

C'est, Je peux voir l'opération de configuration de montage réussie pour ma carte de configuration, cependant, quand j'inspecte le conteneur créé, je ne vois pas de montage associé:

"Mounts": [ 
      { 
       "Source": "/var/lib/kubelet/pods/a47ebff8-7976-11e7-8369-12207729cdd2/etc-hosts", 
       "Destination": "/etc/hosts", 
       "Mode": "", 
       "RW": true, 
       "Propagation": "rprivate" 
      }, 
      { 
       "Source": "/var/lib/kubelet/pods/a47ebff8-7976-11e7-8369-12207729cdd2/containers/logstash/86b079de", 
       "Destination": "/dev/termination-log", 
       "Mode": "", 
       "RW": true, 
       "Propagation": "rprivate" 
      }, 
      { 
       "Source": "/var/lib/kubelet/pods/a47ebff8-7976-11e7-8369-12207729cdd2/volumes/kubernetes.io~secret/default-token-2t0cl", 
       "Destination": "/var/run/secrets/kubernetes.io/serviceaccount", 
       "Mode": "ro", 
       "RW": false, 
       "Propagation": "rprivate" 
      } 

Répondre

0

L'extrait suivant est en effet correct:

31   containers: 
32   - image: blackducksoftware/hub-logstash:4.0.0 
33   name: logstash 
34   volumeMounts: 
35   - name: dir-graphite 
36    mountPath: /tmp/x 

Je beleive il y a une situation où, si vous avez une indentation mineure au large, en 1.6, la validation nest pas très strict, de sorte que vous obtenez un no-op où un volume est chargé mais les chemins de montage ne sont pas forcément lus.

Pour mémoire, si le volume est vraiment attaché, vous devriez voir dans vos points de montage lorsque docker en cours d'exécution inspecter:

"Mounts": [ 
      { 
       "Source": "/var/lib/kubelet/pods/bf655bb7-7985-11e7-8369-12207729cdd2/volumes/kubernetes.io~configmap/dir-graphite", 
       "Destination": "/tmp/x", 
       "Mode": "", 
       "RW": true, 
       "Propagation": "rprivate" 
      }, 

Morale de l'histoire: Dans le cas de ConfigMaps (et probablement tout autre un volume qui est monté paresseusement par un kubelet), un journal MountVolume.SetUp réussi au niveau du kubelet ne garantit pas que vos fichiers ont été montés dans un conteneur, mais seulement que le kubelet a été capable de créer un volume correspondant à un de vos volumes ConfigMap définis.