I’m trying to deploy Postgres with a
PersistentVolumeClaim in GKE. As per the description here (look at
PGDATA), it is recommended to create a subdirectory if mounting an external volume. So, this is what I did with my PG deployment:
spec: containers: - name: postgres-dev image: "postgres:12.1" imagePullPolicy: IfNotPresent ports: - containerPort: 5432 env: - name: PGDATA value: "/var/lib/postgresql/data/pgdata" volumeMounts: - name: postgres-persistent-storage-dev mountPath: "/var/lib/postgresql/data/pgdata" volumes: - name: postgres-persistent-storage-dev persistentVolumeClaim: claimName: postgres-pvc-dev
I create the
/pgdata subdir in
/postgresql/data, which would be the original mount point for Postgres’ data.
But when I try to deploy the Postgres pod, it stalls at Back-off error, and I get the following events:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 20s default-scheduler Successfully assigned default/postgres-dev-7f549754d-nm2lf to gke-cluster-pool-1-4ce1e4d6-m33c Normal SuccessfulAttachVolume 15s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-eea8ee4d-9d00-11ea-a854-42010a8a0057" Normal Pulled 9s (x2 over 10s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Container image "postgres:12.1" already present on machine Normal Created 9s (x2 over 10s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Created container postgres-dev Normal Started 9s (x2 over 10s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Started container postgres-dev Warning BackOff 7s (x2 over 8s) kubelet, gke-cluster-pool-1-4ce1e4d6-m33c Back-off restarting failed container
These are the logs from the Postgres container:
initdb: error: directory "/var/lib/postgresql/data/pgdata" exists but is not empty It contains a lost+found directory, perhaps due to it being a mount point. Using a mount point directly as the data directory is not recommended. Create a subdirectory under the mount point.
So, I create the subdir for mountpoint, as recommented for
initdb, and then it complains about it. The PVC was created just right before the deployment, so there is no data in it.
I tried with completely new, un-existent dir like
/var/lib/postgres/data as well, but the effect is the same.
Another interesting point is that when I set this up in
minikube, everything works fine.
How do I approach this?