Add PostgreSQL to KDT

Change-Id: I6317421eab7f1dfedd3a5302c4a3f293c99e5be8
Related-prod: PROD-28242 (PROD:28242)
diff --git a/defaults/init.yml b/defaults/init.yml
index b70367e..72ca17c 100644
--- a/defaults/init.yml
+++ b/defaults/init.yml
@@ -11,6 +11,7 @@
 - system.defaults.backupninja
 - system.defaults.git
 - system.defaults.jenkins
+- system.defaults.postgresql
 - system.defaults.maas
 - system.defaults.openstack
 - system.defaults.galera
diff --git a/defaults/postgresql/init.yml b/defaults/postgresql/init.yml
new file mode 100644
index 0000000..e0d3de1
--- /dev/null
+++ b/defaults/postgresql/init.yml
@@ -0,0 +1,9 @@
+parameters:
+  _param:
+    postgresql_server: localhost
+    postgresql_exposed_port: 5432
+    postgresql_admin_user: postgres
+    postgresql_glusterfs_volume_name: postgresql-data
+    postgresql_data_mountpoint: /var/lib/postgresql/data
+    postgresql_data_directory: ${_param:postgresql_data_mountpoint}/pgdata
+
diff --git a/glusterfs/server/volume/postgresql_k8s.yml b/glusterfs/server/volume/postgresql_k8s.yml
new file mode 100644
index 0000000..f276d60
--- /dev/null
+++ b/glusterfs/server/volume/postgresql_k8s.yml
@@ -0,0 +1,20 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        postgresql-data:
+          storage: /srv/glusterfs/postgresql
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/postgresql
+            - ${_param:cluster_node02_address}:/srv/glusterfs/postgresql
+            - ${_param:cluster_node03_address}:/srv/glusterfs/postgresql
+          options:
+            storage.owner-gid: 999
+            storage.owner-uid: 999
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
+            cluster.favorite-child-policy: mtime
diff --git a/kubernetes/control/services/drivetrain/postgresql.yml b/kubernetes/control/services/drivetrain/postgresql.yml
new file mode 100644
index 0000000..fd1c7bd
--- /dev/null
+++ b/kubernetes/control/services/drivetrain/postgresql.yml
@@ -0,0 +1,48 @@
+parameters:
+  kubernetes:
+    common:
+      addons:
+        ingress-nginx:
+          tcp_data:
+            5432: drivetrain/postgresql-db:${_param:postgresql_exposed_port}
+          tcp_ports:
+          - 5432
+    control:
+      service:
+        postgresql-db:
+          enabled: true
+          cluster: drivetrain
+          service: postgresql-db
+          create: true
+          namespace: drivetrain
+          ports:
+          - port: ${_param:postgresql_exposed_port}
+            name: psql-server
+          type: ClusterIP
+          apiVersion: extensions/v1beta1
+          kind: Deployment
+          replicas: 1
+          container:
+            postgresql-server:
+              image: ${_param:docker_image_postgresql}
+              image_pull_policy: IfNotPresent
+              variables:
+              - name: POSTGRES_USER
+                value: ${_param:postgresql_admin_user}
+              - name: POSTGRES_PASSWORD
+                value: ${_param:postgresql_admin_user_password}
+              - name: PGDATA
+                value: ${_param:postgresql_data_directory}
+              ports:
+              - port: ${_param:postgresql_exposed_port}
+                name: psql-server
+              volumes:
+              - name: postgresql-data
+                mount: ${_param:postgresql_data_mountpoint}
+                read_only: false
+          volume:
+            postgresql-data:
+              type: glusterfs
+              endpoints: glusterfs
+              path: ${_param:postgresql_glusterfs_volume_name}
+              read_only: false