Recevez les erreurs du pod:
initdb: le répertoire "/ var/lib/postgresql/data" existe mais n'est pas vide Il contient un répertoire perdu + trouvé, peut-être parce qu'il s'agit d'un point de montage. L'utilisation directe d'un point de montage comme répertoire de données n'est pas recommandée. Créez un sous-répertoire sous le point de montage.
Pourquoi le pod ne peut pas utiliser ce chemin? J'ai essayé les mêmes tests sur minikube. Je n'ai rencontré aucun problème.
Alors, comment monter correctement un volume postgresql en utilisant Aws EBS dans Kubernete, ce qui permet aux pods recréés de réutiliser la base de données initiale stockée dans EBS?
Alors, comment monter correctement un volume postgresql en utilisant Aws EBS
Vous êtes sur la bonne voie ...
L'erreur que vous obtenez est due au fait que vous souhaitez utiliser le dossier racine du volume monté /
en tant que répertoire de données postgresql et postgresql se plaignent qu'il n'est pas recommandé de le faire car il n'est pas vide et contient déjà des données à l'intérieur (à savoir lost+found
répertoire).
Il est préférable de localiser le répertoire de données dans un sous-dossier vide distinct (/postgres
par exemple) et donner une ardoise propre à postgresql lors de la création de sa structure de fichiers. Vous n'avez pas eu la même chose sur le mini-cube car vous avez probablement monté un dossier Host qui n'avait rien à l'intérieur (était vide) et n'a pas déclenché une telle plainte.
Pour ce faire, vous auriez besoin initialement vide subPath de votre volume (vide /postgres
sous-dossier sur votre PV par exemple) monté au point de montage approprié (/var/lib/posgresql/data
) dans votre pod. Notez que vous pouvez nommer subPath et dossier de point de montage du même nom, ils sont différents ici juste comme exemple où test-db-volume/postgres
le dossier serait monté sur le pod dans /var/lib/postgresql/data
dossier:
...
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: test-db-volume
subPath: postgres
...
J'ai corrigé cela en disant à postgres où je veux que la base de données soit créée avec l'env PGDATA. Il crée le répertoire vide et inits la base de données. Si vous ne l'avez pas, cela suppose que vous voulez le créer dans le répertoire de montage de la pièce qui pour moi avait le répertoire; ost + found que postgres n'a pas aimé
containers:
- name: postgres
imagePullPolicy: Always
image: postgres:9.6
ports:
- containerPort: 5432
name: postgres
env:
- name: POSTGRES_DB
value: "mydb"
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-data
c'est de la description de dockerhub ...
PGDATA Cette variable facultative peut être utilisée pour définir un autre emplacement - comme un sous-répertoire - pour les fichiers de base de données. La valeur par défaut est/var/lib/postgresql/data, mais si le volume de données que vous utilisez est un point de montage de système de fichiers (comme avec les disques persistants GCE), Postgres initdb recommande un sous-répertoire (par exemple/var/lib/postgresql/data/pgdata) doit être créé pour contenir les données.
alors, créez un répertoire plus profond et ça marche