Run postgres11 and pgadmin4 in kubernetes for testing
Posted on 21-Jun-2020
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;