0

I am trying to deploy a PostgreSQL database using Kubernetes and encountered an error related to the data directory. Below is my YAML configuration for the Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: db
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        type: deployment
        app: db
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: affinity-type
                    operator: In
                    values:
                      - postgres
      tolerations:
        - key: "key"
          value: "database"
          operator: "Equal"
          effect: "NoSchedule"
      volumes:
        - name: db-nfs-pvc
          persistentVolumeClaim:
            claimName: db-nfs-pvc
        - name: init-volume
          configMap:
            name: db-init
        - name: db-hba-conf
          configMap:
            name: hba-init
        - name: db-postgresql-conf
          configMap:
            name: postgresql-conf-init
      containers:
        - name: db
          image: postgres:14-bullseye
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5432
          envFrom:
            - secretRef:
                name: db
          volumeMounts:
            - name: db-nfs-pvc
              mountPath: /var/lib/postgresql/data
              subPath: pgdata
            - name: init-volume
              mountPath: /docker-entrypoint-initdb.d/
            - name: db-postgresql-conf
              mountPath: /var/lib/postgresql/data/postgresql.conf
              subPath: postgresql.conf
            - name: db-hba-conf
              mountPath: /var/lib/postgresql/data/pg_hba.conf
              subPath: pg_hba.conf
          command:
            - "postgres"
            - "-c"
            - "config_file=/var/lib/postgresql/data/postgresql.conf"
            - "-c"
            - "hba_file=/var/lib/postgresql/data/pg_hba.conf"

POSTGRESQL_ENV:

POSTGRES_USER=admin
POSTGRES_PASSWORD=password
PGDATA=/var/lib/postgresql/data/pgdata

Issue: Upon deploying the PostgreSQL database using the above configuration, the pod fails to start, and the logs show the following error:

postgres: could not access directory "/var/lib/postgresql/data/pgdata": No such file or directory
Run initdb or pg_basebackup to initialize a PostgreSQL data directory.

kubectl describe pod:

0/11 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/11 nodes are available: 11 No preemption victims found for incoming pod.

Additional Information:

  • I have verified that the PersistentVolumeClaim db-nfs-pvc is bound and available.
  • I have included the environment variables POSTGRES_USER, POSTGRES_PASSWORD, and PGDATA to specify the PostgreSQL user, password, and data directory path.
1
  • Why are you telling us all this? Do you also have a question about it (something that ends with a ‘?’ …?
    – Pierre.Vriens
    Jul 30 at 16:08

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Browse other questions tagged or ask your own question.