5 votes

Copier les données des images vers un volume vide dans kubernetes

Dans Docker, lorsque l'on monte un volume vide dans le chemin d'un conteneur, le contenu original de l'image est copié sur le volume monté. (Si vous montez un volume vide dans un répertoire du conteneur dans lequel des fichiers ou des répertoires existent, ces fichiers ou répertoires seront propagés (copiés) dans le volume. De même, si vous démarrez un conteneur et spécifiez un volume qui n'existe pas encore, un volume vide est créé pour vous. C'est un bon moyen de pré-remplir les données dont un autre conteneur a besoin). Aperçu de Docker Volume à partir de la page officielle

Cependant, lorsque j'essaie de faire la même chose dans Kubernetes, le volume monté écrase le chemin de montage. Voici le chemin de mon fichier yaml de déploiement.

apiVersion: apps/v1
kind: Deployment
metadata:
......
    spec:
      containers:
      - name: nginx
        image: nginx:1.13
        ports:
        - containerPort: 80
        volumeMounts:
        - name: datavol
          mountPath: /var
      volumes:
      - name: datavol
        persistentVolumeClaim:
          claimName: oscarv1

Dans mon cas, le chemin /var est devenu vide. Comment puis-je conserver les données originales sous /var dans mon image de conteneur ? Quand monter un volume sur le pod ?

5voto

Ian McCauley Points 17

Ajoutez un conteneur init qui utilise la même image que celle que vous souhaitez pour copier les fichiers avant de monter le volume sur l'application. Montez le volume que vous monterez sur l'application principale dans un autre répertoire local de votre conteneur et effectuez un 'cp -r' dans le répertoire monté. Maintenant, lorsque la même image monte ce volume, il sera pré-rempli avec le contenu original et le nouveau contenu également.

apiVersion: apps/v1
kind: Deployment
metadata:
......
    spec:
      initContainer:
      - name: init-ngix
        image: nginx:1.13
        command: ["/bin/sh", "-c", "cp -R /var/* /tmp/"]
        volumeMounts:
        - name: datavol
          mountPath: /tmp
      containers:
      - name: nginx
        image: nginx:1.13
        ports:
        - containerPort: 80
        volumeMounts:
        - name: datavol
          mountPath: /var
      volumes:
      - name: datavol
        persistentVolumeClaim:
          claimName: oscarv1

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X