Run postgres11 and pgadmin4 in kubernetes for testing

Setup Postgres

Persistent Volumes

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: /mnt/nfs/postgres-data
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-pv-claim
  labels:
    app: postgres
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

Postgres Service

apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  type: NodePort
  ports:
    - port: 5432
  selector:
    app: postgres

Postgres Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      name: postgres
      labels:
        app: postgres
    spec:
      restartPolicy: Always
      containers:
        - name: postgres
          image: postgres:11
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres
          env:
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  key: postgres_password
                  name: postgres
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgredb
      volumes:
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pv-claim

Postgres Config Map

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres
data:
  POSTGRES_DB: kisphp
  POSTGRES_USER: kisphp

Postgres Secret

apiVersion: v1
kind: Secret
metadata:
  name: postgres
data:
  postgres_password: a2lzcGhw # base64 encoded (kisphp)

PgAdmin 4

Pgadmin volume

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pgadmin
  labels:
    app: pgadmin
  annotations:
    volume.alpha.kubernetes.io/storage-class: default
spec:
  accessModes:
    - "ReadWriteOnce"
  resources:
    requests:
      storage: "4Gi"

Pgadmin service

apiVersion: v1
kind: Service
metadata:
  name: pgadmin
  labels:
    app: pgadmin
spec:
  type: NodePort
  ports:
    - port: 80
  selector:
    app: pgadmin

Pgadmin deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgadmin
  labels:
    app: pgadmin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgadmin
  template:
    metadata:
      labels:
        app: pgadmin
    spec:
      containers:
        - name: pgadmin
          image: "dpage/pgadmin4"
          imagePullPolicy: IfNotPresent
          envFrom:
            - configMapRef:
                name: pgadmin
          env:
            - name: PGADMIN_DEFAULT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: pgadmin
                  key: pgadmin-password
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
            - name: https
              containerPort: 443
              protocol: TCP
          volumeMounts:
            - name: pgadmin-data
              mountPath: /var/lib/pgadmin
      volumes:
        - name: pgadmin-data
          persistentVolumeClaim:
            claimName: pgadmin

Pgadmin Config Map

apiVersion: v1
kind: ConfigMap
metadata:
  name: pgadmin
data:
  PGADMIN_DEFAULT_EMAIL: kisphp

Pgadmin Secret

apiVersion: v1
kind: Secret
metadata:
  name: pgadmin
  labels:
    app: pgadmin
type: Opaque
data:
  pgadmin-password: "a2lzcGhw" # kisphp

Run queries to tests


CREATE TABLE users (
  id SERIAL PRIMARY KEY NOT NULL,
  email          VARCHAR(255)    NOT NULL,
  password       CHAR(32)     NOT NULL
);

INSERT INTO 
users (email, password) 
VALUES
('alfa@example.com', MD5('alfa')),
('beta@example.com', MD5('beta'));

SELECT * FROM users;