--- apiVersion: v1 kind: Namespace metadata: name: postgresql --- apiVersion: v1 kind: Secret metadata: name: postgresql-secret namespace: postgresql type: Opaque data: username: cm9vdA== password: Mmh2MTdL --- apiVersion: v1 kind: ServiceAccount metadata: name: postgresql-sa namespace: postgresql --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: postgresql-role namespace: postgresql rules: - apiGroups: [""] resources: ["pods", "services", "persistentvolumeclaims", "configmaps", "secrets"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: postgresql-rolebinding namespace: postgresql subjects: - kind: ServiceAccount name: postgresql-sa namespace: postgresql roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: postgresql-role --- apiVersion: v1 kind: PersistentVolume metadata: name: postgresql-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce storageClassName: local-pvs local: path: /home/ansible/k3s/makhiwane/postgresql nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - lead persistentVolumeReclaimPolicy: Retain --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgresql-pvc namespace: postgresql spec: accessModes: - ReadWriteOnce storageClassName: local-pvs resources: requests: storage: 10Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: postgresql namespace: postgresql spec: replicas: 1 selector: matchLabels: app: postgresql template: metadata: labels: app: postgresql spec: serviceAccountName: postgresql-sa containers: - name: postgresql image: postgres:16 env: - name: POSTGRES_USER valueFrom: secretKeyRef: name: postgresql-secret key: username - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgresql-secret key: password ports: - containerPort: 5432 volumeMounts: - mountPath: /var/lib/postgresql/data name: postgresql-data volumes: - name: postgresql-data persistentVolumeClaim: claimName: postgresql-pvc --- apiVersion: v1 kind: Service metadata: name: postgresql namespace: postgresql spec: type: ClusterIP selector: app: postgresql ports: - port: 5432 targetPort: 5432 --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: postgresql-ingress namespace: postgresql spec: entryPoints: - websecure routes: - match: Host(`postgresql.database.mngoma.lab`) kind: Rule services: - name: postgresql port: 5432 tls: {}