Skip to content

pgAdmin4

Alexander Diemand edited this page Aug 2, 2025 · 2 revisions

PgAdmin4 deployment

access to the UI: http://localhost:4444/

(adapted from: https://www.enterprisedb.com/blog/how-deploy-pgadmin-kubernetes)

  1. create namespace
export NAMESPACE=pgadmin4
kubectl create namespace ${NAMESPACE}
  1. set secret for pgadmin4

echo -n "dev@company.com" | base64

echo -n "my-very-strong-secret" | base64

apiVersion: v1
kind: Secret
type: Opaque
metadata:
 name: pgadmin
data:
 pgadmin-username: 
 pgadmin-password: bXktdmVyeS1zdHJvbmctc2VjcmV0

kubectl apply -n ${NAMESPACE} -f secret.yaml

  1. create configmap which contains list of servers in servers.json
apiVersion: v1
kind: ConfigMap
metadata:
 name: pgadmin-config
data:
 servers.json: |
   {
       "Servers": {
         "1": {
           "Name": "PostgreSQL DB",
           "Group": "Servers",
           "Port": 5432,
           "Username": "postgres",
           "Host": "pgmain.company.com",
           "SSLMode": "prefer",
           "MaintenanceDB": "postgres"
         }
       }
   }

kubectl apply -n ${NAMESPACE} -f configmap.yaml

  1. create service
apiVersion: v1
kind: Service
metadata:
 name: pgadmin-service
spec:
 ports:
 - protocol: TCP
   port: 80
   targetPort: http
 selector:
   app: pgadmin
 type: NodePort

kubectl apply -n ${NAMESPACE} -f service.yaml

  1. deploy StatefulSet

in the following set the version to a value found on https://hub.docker.com/r/dpage/pgadmin4/tags

apiVersion: apps/v1
kind: StatefulSet
metadata:
 name: pgadmin
spec:
 serviceName: pgadmin-service
 podManagementPolicy: Parallel
 replicas: 1
 updateStrategy:
   type: RollingUpdate
 selector:
   matchLabels:
     app: pgadmin
 template:
   metadata:
     labels:
       app: pgadmin
   spec:
     terminationGracePeriodSeconds: 10
     containers:
       - name: pgadmin
         image: dpage/pgadmin4:<<version>>
         imagePullPolicy: Always
         env:
         - name: PGADMIN_DEFAULT_EMAIL
           valueFrom:
             secretKeyRef:
               name: pgadmin
               key: pgadmin-username
         - name: PGADMIN_DEFAULT_PASSWORD
           valueFrom:
             secretKeyRef:
               name: pgadmin
               key: pgadmin-password
         ports:
         - name: http
           containerPort: 80
           protocol: TCP
         volumeMounts:
         - name: pgadmin-config
           mountPath: /pgadmin4/servers.json
           subPath: servers.json
           readOnly: true
         - name: pgadmin-data
           mountPath: /var/lib/pgadmin
     volumes:
     - name: pgadmin-config
       configMap:
         name: pgadmin-config
 volumeClaimTemplates:
 - metadata:
     name: pgadmin-data
   spec:
     accessModes: [ "ReadWriteOnce" ]
     storageClassName: "nfs-data-storage"
     resources:
       requests:
         storage: 3Gi

kubectl apply -n ${NAMESPACE} -f statefulset.yaml

  1. port forward
kubectl port-forward -n ${NAMESPACE} service/pgadmin-service 4444:80

access the UI on: http://localhost:4444/

Clone this wiki locally