--- apiVersion: v1 kind: ConfigMap metadata: name: postgres-config labels: app: postgres namespace: likes-web-app data: POSTGRES_DB: postgres init: | CREATE TABLE "likes" ( id SERIAL PRIMARY KEY, name varchar(36) UNIQUE NOT NULL, count integer NOT NULL, image text ); INSERT INTO "likes" (name, count, image) VALUES ('Item 1',0, ''), ('Item 2',0, ''), ('Item 3',0, ''), ('Item 4',0,''); --- kind: PersistentVolume apiVersion: v1 metadata: name: postgres-pv-volume labels: type: local app: postgres namespace: likes-web-app spec: storageClassName: manual capacity: storage: 5Gi accessModes: - ReadWriteMany hostPath: path: "/mnt/data" persistentVolumeReclaimPolicy: Retain --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: postgres-pv-claim labels: app: postgres namespace: likes-web-app spec: storageClassName: manual accessModes: - ReadWriteMany resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres namespace: likes-web-app spec: replicas: 1 serviceName: postgres selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: nodeSelector: node_type: workload terminationGracePeriodSeconds: 5 containers: - name: postgres image: postgres:14.7 imagePullPolicy: "IfNotPresent" ports: - containerPort: 5432 args: - -c - max_connections=3000 - -c - shared_buffers=1024MB envFrom: - configMapRef: name: postgres-config volumeMounts: - mountPath: /var/lib/postgresql/data name: postgredb - mountPath: /docker-entrypoint-initdb.d name: init volumes: - name: postgredb persistentVolumeClaim: claimName: postgres-pv-claim - name: init configMap: name: postgres-config items: - key: init path: init.sql --- apiVersion: v1 kind: Service metadata: name: postgres labels: app: postgres namespace: likes-web-app spec: type: ClusterIP ports: - port: 5432 selector: app: postgres