diff --git a/cluster/postgresql/pg-secret.yaml b/cluster/postgresql/pg-secret.yaml new file mode 100644 index 0000000..a29ee43 --- /dev/null +++ b/cluster/postgresql/pg-secret.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: pg-secret + namespace: postgresql +data: + # base64 encoded prism-ip:prism-port:admin:password. + # ex:echo -n "10.0.00.000:9440:admin:mypass" | base64 + key: MTAuNDcuMjQuNjg6OTQ0MDptYWhlc2g6TnV0YW5peEAxMjM0 \ No newline at end of file diff --git a/cluster/postgresql/ps-configmap.yaml b/cluster/postgresql/ps-configmap.yaml new file mode 100644 index 0000000..c8c8fa9 --- /dev/null +++ b/cluster/postgresql/ps-configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgres-config + labels: + app: postgres +data: + POSTGRES_DB: postgresdb + POSTGRES_USER: admin + POSTGRES_PASSWORD: test123 \ No newline at end of file diff --git a/cluster/postgresql/ps-deployment.yaml b/cluster/postgresql/ps-deployment.yaml new file mode 100644 index 0000000..c519896 --- /dev/null +++ b/cluster/postgresql/ps-deployment.yaml @@ -0,0 +1,30 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres +spec: + replicas: 1 + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + containers: + - name: postgres + image: postgres:10.1 + imagePullPolicy: "IfNotPresent" + ports: + - containerPort: 5432 + envFrom: + - configMapRef: + name: postgres-config + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgredb + volumes: + - name: postgredb + persistentVolumeClaim: + claimName: postgres-pv-claim diff --git a/cluster/postgresql/ps-service.yaml b/cluster/postgresql/ps-service.yaml new file mode 100644 index 0000000..a268e7b --- /dev/null +++ b/cluster/postgresql/ps-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: postgres + labels: + app: postgres +spec: + type: NodePort + ports: + - port: 5432 + selector: + app: postgres diff --git a/cluster/postgresql/ps-storage.yaml b/cluster/postgresql/ps-storage.yaml new file mode 100644 index 0000000..7d40e01 --- /dev/null +++ b/cluster/postgresql/ps-storage.yaml @@ -0,0 +1,29 @@ +kind: PersistentVolume +apiVersion: v1 +metadata: + name: postgres-pv-volume + labels: + type: local + app: postgres +spec: + storageClassName: manual + capacity: + storage: 2Gi + accessModes: + - ReadWriteMany + hostPath: + path: "/mnt/data" +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: postgres-pv-claim + labels: + app: postgres +spec: + storageClassName: manual + accessModes: + - ReadWriteMany + resources: + requests: + storage: 2Gi \ No newline at end of file diff --git a/cluster/postgresql/psql-claim.yaml b/cluster/postgresql/psql-claim.yaml new file mode 100644 index 0000000..f6b986e --- /dev/null +++ b/cluster/postgresql/psql-claim.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: postgresql-pv-claim +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi \ No newline at end of file diff --git a/cluster/postgresql/psql-pv.yaml b/cluster/postgresql/psql-pv.yaml new file mode 100644 index 0000000..f66f289 --- /dev/null +++ b/cluster/postgresql/psql-pv.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: postgresql-pv + labels: + type: local +spec: + storageClassName: manual + capacity: + storage: 2Gi + accessModes: + - ReadWriteOnce + hostPath: + path: "/mnt/data" \ No newline at end of file diff --git a/cluster/postgresql/readme.md b/cluster/postgresql/readme.md new file mode 100644 index 0000000..22a55d2 --- /dev/null +++ b/cluster/postgresql/readme.md @@ -0,0 +1,33 @@ +# postgresql + +```bash +create ns postgresql-svc +kubectl config set-context --current --namespace=postgresql-svc +k apply -f ps-configmap.yaml +k apply -f ps-storage.yaml +k get pvc +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE +postgres-pv-claim Bound postgres-pv-volume 2Gi RWX manual 6s + +k apply -f ps-deployment.yaml +k apply -f ps-service.yaml + +k get all +NAME READY STATUS RESTARTS AGE +pod/postgres-84bd99bf45-sf6xq 1/1 Running 0 78s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/postgres NodePort 10.43.158.173 5432:30795/TCP 12s + +NAME READY UP-TO-DATE AVAILABLE AGE +deployment.apps/postgres 1/1 1 1 78s + +NAME DESIRED CURRENT READY AGE +replicaset.apps/postgres-84bd99bf45 1 1 1 78s + +kubectl exec -it [pod-name] -- psql -h localhost -U admin --password -p [port] postgresdb + +kubectl exec -it postgres-84bd99bf45-sf6xq -- psql -h localhost -U admin --password -p 5432 postgresdb + +helm repo add bitnami https://charts.bitnami.com/bitnami +helm install postgresql bitnami/postgresql --create-namespace -n 'postgresql-svc' --set persistence.existingClaim=postgresql-pv-claim --set volumePermissions.enabled=true \ No newline at end of file diff --git a/swarm/postgres-data-persistentvolumeclaim.yaml b/swarm/postgres-data-persistentvolumeclaim.yaml new file mode 100644 index 0000000..27c2094 --- /dev/null +++ b/swarm/postgres-data-persistentvolumeclaim.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + io.kompose.service: postgres-data + name: postgres-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi diff --git a/swarm/postgres-db-deployment.yaml b/swarm/postgres-db-deployment.yaml new file mode 100644 index 0000000..174761a --- /dev/null +++ b/swarm/postgres-db-deployment.yaml @@ -0,0 +1,72 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f services.yml + kompose.version: 1.34.0 (HEAD) + labels: + io.kompose.service: postgres-db + traefik.constraint-label: traefik-public + traefik.docker.network: traefik-public + traefik.enable: "true" + traefik.tcp.routers.postgres.entrypoints: postgres-socket + traefik.tcp.routers.postgres.rule: HostSNI(`*`) + traefik.tcp.routers.postgres.service: postgres_service + traefik.tcp.services.postgres_service.loadbalancer.server.port: "5432" + name: postgres-db +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: postgres-db + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert -f services.yml + kompose.version: 1.34.0 (HEAD) + labels: + io.kompose.service: postgres-db + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: postgres.postgres_data + operator: In + values: + - "true" + containers: + - args: + - postgres + - -c + - log_connections=on + env: + - name: LANG + value: en_US.utf8 + - name: PGDATA + value: /var/lib/postgresql/data + - name: POSTGRES_DB + - name: POSTGRES_PASSWORD + - name: POSTGRES_USER + - name: TZ + value: Asia/Singapore + image: postgres + livenessProbe: + exec: + command: + - pg_isready -d ${POSTGRES_DB} -U ${POSTGRES_USER} + failureThreshold: 10 + periodSeconds: 30 + timeoutSeconds: 10 + name: postgres-db + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgres-data + restartPolicy: Always + volumes: + - name: postgres-data + persistentVolumeClaim: + claimName: postgres-data