web-dev-qa-db-fra.com

Placement de fichiers dans un magasin de volumes persistants Kubernetes sur GKE

J'essaie de faire fonctionner un serveur de jeux Factorio sur Kubernetes (hébergé sur GKE).

J'ai configuré un jeu avec état avec une revendication de volume persistant et je l'ai monté dans le répertoire de sauvegarde du serveur de jeu. 

Je souhaite télécharger un fichier de sauvegarde de mon ordinateur local vers cette réclamation de volume persistant afin de pouvoir accéder à la sauvegarde sur le serveur de jeu. 

Quel serait le meilleur moyen de télécharger un fichier sur cette revendication de volume persistant?

J'ai pensé à 2 manières mais je ne suis pas sûr de ce qui est le meilleur ou si l'une ou l'autre sont une bonne idée:

  • Restaurez un instantané de disque avec les fichiers que je veux sur le disque GCP qui sauvegarde cette revendication de volume persistant
  • Montez la réclamation de volume persistant sur un conteneur FTP, chargez les fichiers par FTP, puis montez-la sur le conteneur de jeu.
3
Noah Huppert

Il s'avère qu'il existe un moyen beaucoup plus simple: la commande kubectl cp

Cette commande vous permet de copier des données de votre ordinateur vers un conteneur s'exécutant sur votre cluster. 

Dans mon cas j'ai couru:

kubectl cp ~/.factorio/saves/k8s-test.Zip factorio/factorio-0:/factorio/saves/

Cela a copié le fichier k8s-test.Zip sur mon ordinateur vers /factorio/saves/k8s-test.Zip dans un conteneur s'exécutant sur mon cluster.

Voir kubectl cp -h pour plus d'informations détaillées sur l'utilisation et des exemples.

3
Noah Huppert

Vous pouvez simplement utiliser Google Cloud Storage ( https://cloud.google.com/storage/ ) car vous envisagez de fournir quelques fichiers.

L'autre option consiste à utiliser PersistenVolumeClaims. Cela fonctionnera mieux si vous ne mettez pas à jour les fichiers fréquemment, car vous devrez alors détacher le disque des pods (vous devrez donc supprimer les pods).

Vous pouvez créer un disque persistant GCE, le connecter à une machine virtuelle GCE, y placer des fichiers, puis supprimer le VM et amener le PD sur Kubernetes en tant que PersistentVolumeClaim. Il existe une documentation sur la procédure à suivre: https://cloud.google.com/kubernetes-engine/docs/concepts/persistent-volumes#using_preexsiting_persistent_disks_as_persistentvolumes

1
AhmetB - Google

Vous pouvez créer un dossier de données sur votre compte GoogleCloud:

gcloud compute ssh <your cloud> <your zone>
mdkir data

Ensuite, créez PersistentVolume:

kubectl create -f hostpth-pv.yml

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-local
  labels:
    type: local
spec:
  storageClassName: local
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/home/<user-name>/data"

Créez PersistentVolumeClaim:

kubectl create -f hostpath-pvc.yml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: hostpath-pvc
spec:
  storageClassName: local
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      type: local

Ensuite, copiez le fichier sur GCloud:

gcloud compute scp <your file> <your cloud> <your zone> 

Et montez enfin cette PersistentVolumeClaim sur votre pod:

...
      volumeMounts:
       - name: hostpath-pvc
         mountPath: <your-path>
         subPath: hostpath-pvc  
  volumes:
    - name: hostpath-pvc
      persistentVolumeClaim:
        claimName: hostpath-pvc

Et copier le fichier dans data-folder dans GGloud:

  gcloud compute scp <your file> <your cloud>:/home/<user-name>/data/hostpath-pvc <your zone>
1
Andrey