diff --git a/balancer/ConfigMap/backend-env.yaml b/balancer/ConfigMap/backend-env.yaml new file mode 100644 index 0000000..8eded38 --- /dev/null +++ b/balancer/ConfigMap/backend-env.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +data: + DATABASE: postgres + DEBUG: 'FALSE' + DJANGO_ALLOWED_HOSTS: 'frontend localhost 127.0.0.1 [::1]' + EMAIL_HOST: smtp.gmail.com + EMAIL_HOST_USER: balancer-noreply@gmail.com + EMAIL_PORT: '587' + LOGIN_REDIRECT_URL: 'https://balancertestsite.com/login' + SQL_ENGINE: django.db.backends.postgresql + SQL_PORT: '5432' +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: backend + name: backend-env + namespace: balancer diff --git a/balancer/ConfigMap/nginx-conf.yaml b/balancer/ConfigMap/nginx-conf.yaml index 3843d06..51d0bc0 100644 --- a/balancer/ConfigMap/nginx-conf.yaml +++ b/balancer/ConfigMap/nginx-conf.yaml @@ -1,44 +1,82 @@ apiVersion: v1 data: nginx.conf: | - user nginx; - worker_processes 1; + worker_processes 1; + + user nobody nogroup; + # 'user nobody nobody;' for systems with 'nobody' as a group instead + error_log /var/log/nginx/error.log warn; + pid /var/run/nginx.pid; + events { - worker_connections 1024; + worker_connections 1024; # increase if you have lots of clients + accept_mutex off; # set to 'on' if nginx worker_processes > 1 + # 'use epoll;' to enable for Linux 2.6+ + # 'use kqueue;' to enable for FreeBSD, OSX } + http { - include /etc/nginx/mime.types; - error_log /var/log/nginx/error_log; - access_log /var/log/nginx/access_log; + include mime.types; + # fallback in case we can't determine a type + default_type application/octet-stream; + access_log /var/log/nginx/access.log combined; + sendfile on; + + upstream gunicorn_server { + # fail_timeout=0 means we always retry an upstream even if it failed + # to return a good HTTP response + + # for UNIX domain socket setups + # server unix:/tmp/gunicorn.sock fail_timeout=0; + + # for a TCP configuration + # "backend" here is the name of the kubernetes service + server backend:8000 fail_timeout=0; + } + server { - listen 80; - listen [::]:80; - server_name localhost; + # if no Host match, close the connection to prevent host spoofing + listen 80 default_server; + return 444; + } - location /access_log { - alias /var/log/nginx/access_log; - } - location /error_log { - alias /var/log/nginx/error_log; + server { + # use 'listen 80 deferred;' for Linux + # use 'listen 80 accept_filter=httpready;' for FreeBSD + listen 80 deferred; + client_max_body_size 4G; + + # set the correct host(s) for your site + server_name localhost; + + keepalive_timeout 5; + + # path for static files + root /usr/share/nginx/html; + location ~ (^\/api\/|^\/auth\/|^\/admin) { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $http_host; + # we don't want nginx trying to do something clever with + # redirects, we set the Host: header above already. + proxy_redirect off; + proxy_pass http://gunicorn_server; } - + location / { - root /usr/share/nginx/html; - index index.html index.htm; + index index.html; + try_files $uri $uri/ /index.html; } - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - #error_page 500 502 503 504 /50x.html; - #location = /50x.html { - # root /usr/share/nginx/html; - - #} + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } } } kind: ConfigMap metadata: + labels: + app.kubernetes.io/component: frontend name: nginx-conf namespace: balancer diff --git a/balancer/Deployment/backend.yaml b/balancer/Deployment/backend.yaml new file mode 100644 index 0000000..5072530 --- /dev/null +++ b/balancer/Deployment/backend.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: backend + name: backend + namespace: balancer +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: backend + strategy: {} + template: + metadata: + labels: + app.kubernetes.io/component: backend + spec: + containers: + - args: + - gunicorn + - 'balancer_backend.wsgi:application' + - '--bind' + - '0.0.0.0:8000' + env: + - name: SQL_HOST + value: db-service + - name: SQL_USER + valueFrom: + secretKeyRef: + key: POSTGRES_USER + name: postgresql + - name: SQL_DATABASE + valueFrom: + secretKeyRef: + key: POSTGRES_DB + name: postgresql + - name: SQL_PASSWORD + valueFrom: + secretKeyRef: + key: POSTGRES_PASSWORD + name: postgresql + envFrom: + - configMapRef: + name: backend-env + - secretRef: + name: backend + image: 'ghcr.io/codeforphilly/balancer-main/backend:latest' + imagePullPolicy: Always + name: backend + ports: + - containerPort: 8000 + protocol: TCP + resources: {} + restartPolicy: Always diff --git a/balancer/Deployment/frontend-static.yaml b/balancer/Deployment/frontend-static.yaml deleted file mode 100644 index 64750c1..0000000 --- a/balancer/Deployment/frontend-static.yaml +++ /dev/null @@ -1,54 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: kompose convert -c -f nginx-docker-compose.yml -o nginx-helm-chart - kompose.version: 1.31.2 (a92241f79) - creationTimestamp: null - labels: - io.kompose.service: frontend-static - name: frontend-static - namespace: balancer -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: frontend-static - strategy: - type: Recreate - template: - metadata: - annotations: - kompose.cmd: kompose convert -c -f nginx-docker-compose.yml -o nginx-helm-chart - kompose.version: 1.31.2 (a92241f79) - creationTimestamp: null - labels: - io.kompose.network/frontend-default: 'true' - io.kompose.service: frontend-static - spec: - containers: - - env: - - name: CHOKIDAR_USEPOLLING - value: 'true' - - name: VITE_API_BASE_URL - value: 'https://devnull-as-a-service.com/dev/null' - image: 'ghcr.io/codeforphilly/balancer-main/frontend-static:latest' - name: frontend-static - ports: - - containerPort: 80 - protocol: TCP - resources: {} - volumeMounts: - - mountPath: /etc/nginx/nginx.conf - name: nginx-conf - readOnly: true - subPath: nginx.conf - restartPolicy: Always - volumes: - - configMap: - items: - - key: nginx.conf - path: nginx.conf - name: nginx-conf - name: nginx-conf -status: {} diff --git a/balancer/Deployment/frontend.yaml b/balancer/Deployment/frontend.yaml new file mode 100644 index 0000000..fb009c9 --- /dev/null +++ b/balancer/Deployment/frontend.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: frontend + name: frontend + namespace: balancer +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: frontend + strategy: {} + template: + metadata: + annotations: + kompose.cmd: kompose convert -c -f docker-compose.prod.yml -o helm-chart + kompose.version: 1.31.2 (a92241f79) + labels: + app.kubernetes.io/component: frontend + io.kompose.network/balancer-main-default: 'true' + spec: + containers: + - image: 'ghcr.io/codeforphilly/balancer-main/frontend:latest' + imagePullPolicy: Always + name: frontend + ports: + - containerPort: 80 + protocol: TCP + resources: {} + volumeMounts: + - mountPath: /etc/nginx/nginx.conf + name: nginx-conf + readOnly: true + subPath: nginx.conf + restartPolicy: Always + volumes: + - configMap: + items: + - key: nginx.conf + path: nginx.conf + name: nginx-conf + name: nginx-conf diff --git a/balancer/Ingress/balancer-ingress.yaml b/balancer/Ingress/balancer-ingress.yaml new file mode 100644 index 0000000..0ea132a --- /dev/null +++ b/balancer/Ingress/balancer-ingress.yaml @@ -0,0 +1,29 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / + name: balancer-ingress + namespace: balancer +spec: + rules: + - host: balancer.sandbox.k8s.phl.io + http: + paths: + - backend: + service: + name: frontend + port: + name: http + path: / + pathType: Prefix + - host: balancertestsite.com + http: + paths: + - backend: + service: + name: frontend + port: + name: http + path: / + pathType: Prefix diff --git a/balancer/PersistentVolumeClaim/postgres-data-claim.yaml b/balancer/PersistentVolumeClaim/postgres-data-claim.yaml new file mode 100644 index 0000000..52763b5 --- /dev/null +++ b/balancer/PersistentVolumeClaim/postgres-data-claim.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/component: db + name: postgres-data-claim + namespace: balancer +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi diff --git a/balancer/SealedSecret/backend.yaml b/balancer/SealedSecret/backend.yaml index f4f7a54..f9c4242 100644 --- a/balancer/SealedSecret/backend.yaml +++ b/balancer/SealedSecret/backend.yaml @@ -7,11 +7,13 @@ metadata: spec: encryptedData: EMAIL_HOST_PASSWORD: >- - AgC/1ooxNBa/IT8EHI1ImULDg0vcNOcgEpMsNFuD05+f9QM2RBRCVlw6hWZRWyqNPFa3+LrEPGyo+LwrAAdJUVjs1vvq9C/GevDzkSRPwdjMeR5dCsRBIZxC3TSiiF/xTwUheBFRoUstsqGt1jRV8crknkHeUzmMT0NahkV5vfnkCrvLgTuZrHduWNBreUT12SQwS3o62/r8aK9MTXUjwdrXdr25zQYvisSfODoJpApWjpurM28iHT+5pt3bxJfxxRg8rNTBCI4TxJ1vCLZNKYACyaHTQcsStsQqH5f7yoOPf7tH89GVZN+fjWSwhVbaL5VDdE6Qi6U8+yKHSI80gV3okczHUt9d8mrbh7m2RIHbLLIK9xq/WSos3MC+i1bNfLGA5gOfIDSIBkovqDh2lIwlV4qTYrSqdZlyyc/djf4dMmxbTtCb6FjplmGAEQCGmERg9TIg/XZcGfhkiJEVIZ1wcov8zAs7KwydpMLJFFpbFfmkb7akIq1tDlYWrpygO2tGcZIXr9sMnjsG09hLTx9EbUArdhMCsol6mM+q9OuZtDVg9Kzb59F5DhrbtnIheTyONvu7X/0Rn9arUxjdzBKf5gaw69MuPyynbpwRjSEqmHv5mp/VkBtDXObWeEi4IM0+cgi2il/y2rIxIHu/lPoZ290fx343FceXsJUuwc3PUCOEk6Sajw2j8j3x0iP9W8/lhdHcJ0uBrmNPVdiuIoJS + AgBYzAgOfX97gTS3lrQWGQaHK0WuspPRETmhX/tKGN1aDqbGdRg6oaUX7/aajW4MRF/iTT+m/xIZfRtOPuPpVuI/NxTQ+dNx4L7LytxKNxCv7Hj3aNzTdyD8JZgW5GOlsAbRCIVU3o0hkIeislkEaKbLJAVEY1kJgVA4z1iDxr5vCPpdfu7hqzdpOOOVqDolarNkPBZuxwrZ1os1BDzOWNMm6kPQLUmNciHOsJy5tPGAbA+JYa08VCg2jVqa+oH62xWBVEU00hOu8EkxTogVUPrcHJ7xzLtroSCUQTvbZipQLxwHoW2aE9KiKOxW2llJvBEMX1fGNWyw6qRxdeck7NV/yhbH+fjYgbufnLfT1uggAbvUYovWM3cAiBNPkm1TSYaqL5RlRDqWuKPEwCnMagk30JjKu21jrsPQCoJ4QgKa/v4eFuadFC4xLB6enVVhD4CQFThiVXRUK4jb6CG1o4vrPFuPPTkZC5FBUzrq2aan3Z9K9dFaQixKv5sDliqs4cgL31TclZyCTD7v+WE0khZ7NQYo8E7RkwQX8n6X5xj9BH1h5xLGEyNxu0lohp2Y3FLOGqqEbk0YL7uIAR436ExD93ndaINZdsC4N6ftkDozWl+G9tM1EBymyPvIpBFmELs9klqnEpWN6fKC7ssDRDk0Bcge5hZDsFaUnotTs+wNtwZwZsA2xQV05rtvU20LY0zk75bpreYLQHCo85DgCYjX OPENAI_API_KEY: >- - AgAHE47E6TVbwOLQXpMAxdmCAlGBXfcSUwuu3adZryrL7c7hdGERaBxk7fW/OzBjgrVs1Q5czfpOpJJWPbXMerGdQTOaYcFZ+J0cwrgydlEaXQxUeI5NBvKVMYZJK8GMZDfZk19dTyb6C2WqpEIca7BKTQJ8r7y4QlgFtmjGtWIcAADXMTioAMks6Fao2S3t3wanXpXEs1BVk4QnxyWVoo4qgiq5aAv8eqHiGsRTz+4UklFxITG4OJWCR8mnts+1RWl2LJAuLWPnJn9Bq+8efjPNLRnxZGs2ggoZ7K5ecERWqrLNNPsK7qBJQpj9YM9ITYkVMmY6/3OZixhe7+rcjRnwBq6iTBZhP91zdx4OrEg34Hbv50N9jqVIXGrzjskUD/mfOqQ8smRYXceEjAkXGrkuGu09+r/T2uUc3ipxWuxmEXL5cswe5nn1ch0fBiw64IglglB5iIskc3buUjOpmw5nwaG5S8J+WWqplst+Ike6iFwlfTqlfIwvIInhhY5v8XbiXJtEJhcK3nuGKM3Xi+waQuZTBm+jD+byTKA1CpD5D0zR6PCyD9QL5s/pfu0sKVR1hDD7JQh5tXI1e7GY1tYRYh3uaRxstvDf5oR+69r3dnV4Wqo4vjzoLIxZ4o4FcMx2tBpMK1KHjK5o4VDcdx4Jo4F+4jnwWZ9Ur0clCCEiNZxRspR3l05DBz2Z6k/BxKpjoJ1G3KAzPQQJMRqh4Hanv5gNQEaRofay28zNwqu/iF0lpFUbgoZwOtJJjqYGeOyxAc0= + AgAPhyHQA6lOR7ZajLTLvcBvNIJrEmFXPk61euOMec02vuS4MsXweiWddmrm9EtOKedRR7P+HtcT2edemPvuXaLAQVFyjM59nQrZ/w+P+4KINOojs+hKbixVEVaGPcdG/gb5r1qiyfqpwcMOjOpaRb8I4Xfc2DDBQPYcoZ7wOqlW464R4OKgSJQhB0HGwoGhFaugT8fJlJoG0KGVSUfcPqn8EvtwzvcCD+qoSQOoGt2E9qHRMt9qJxYYEHI53JhmAW7if+w0EhdrgmlwBsyvOBo04G/l9u9xNf6KRbkTUy2UTQJJX2mDhUYxglDDrFBPTJScqVeNCA0oMA7JbdxXyx1Y4/RoTjrDkeMTF2v8lbZaKbLITXGFu7EuKLZl6Ek6ZZHCIzTJCM4Y9Rs4a8lzTcdLvhj1pCeMgCtoeSFOMHKgzQt//j4dg/R66Vax9/+w5S7FipFi8PZM1Qw8p/I37ZmVxSxseneZqZNqs0UVvaxRtsX0bwZQMO9wlVHgI2fxovYv/8DkBHqmbcvo5Cu0jIOPUBaEKeqnuibo8FBV2VfqIJ7tlATo4f7OXMfwJFQ3q64f7dR3ZeDHqx4dPDpqh9Yqk866QcET9eIQLJYpZAeVFuyLFf3uw88dA1xCLW8ZO7VAFxnQyDP2nEzc9CdbeoTZ0X7Bd30fK/uP4FUTVNBsLDKtyf0UXH2qYzeawWo9dD0i8UZDeabcqZHh66NCMxi2Sr4pkJnfjDplxjltMol3YoiTc6wkt/B7aZltA73PlNmNrTg= SECRET_KEY: >- - AgCGzKbxIXQXJrCAD+0kSjC95HAFIHT239RVaGnczd8QMr8DdBDQ/gFOh/XuBqFGLoW4PMyj8w8ddMzyBo3TFnvev59yeky7L1GwA6xYdUp+czo9/pQXsreZ1yz9VH02+zN5UrJPPpDeb3r56lDiU81uiBoMgniCuWplQGo9GbSXQ0SxC+R7d5dju91hksObKq87xaBoHhWA8kDl/a5p/wxWvoY52FfbiljZLC4NHSRcA75dbftgMLf2GyxcUIUoUM83OoYbewDv7AnGV9I5d0kzHV0zoRcGQdkCaEYFwkQ/OeuPJEkbW66tfWnxUmLVhOSuNNBNFYZ15yAOC/yHnwj7Ur++rG1Z0IsPwA9kfyFuMQVqa8sO8w34bHjVaNhYevA6XIa/wfIByZGmKwUny0jeg6Fkg7yTNycokHzVT1DJ63rT7x2yNfuxGQ9EmuuDZ2zgBtairMRAtGChFaafF1gi68g/AT+0KwoRRmfzDIgHhoO+MjWdPMl0jVrPug0t0szx16WyaKUte35fjDrBnceEr2jyeguKuE6KCy1BQHPYFC1PCDAHnztsa60kpgKNxjSXs1f/6PpEzI2AZMUK1DRfU8tvlmpcRb0o1VCdXI7TPa1iDkGPKKNRgIxDAiTICnWtjkjGw93PWaZzyEybkbw4SA/JycOtsCvjRxIvNWHMx9ocfE+Yo3GCgNa3jNcbj/IGV3yXseYiNA8PS5L6SDjAD/hz2rxOcz1rcB9VGZhPixzRixBU+HqGWNkWT0CsM7vzWg== + AgBNmxRcFTtstVVNEapaCrCS8Ju+1BaocIeUXpMe3B3L4Vm0o2VLXdr0ryCR7zdC19+YXpzQcEH3BWBagnzmgNoyXoMl9XItK3eHLlLZWm5im9Ke+o70lwELWosXswRgkpRwyV+UcKM4SdS4PdLW9gQnvnfkBOS/sSWUVuHk4yTpbnUy7jJPQKQPchuP/afJmygkawU5pn0AUiyb45hUghpB1Sd0/cqU0iApSwQvXvPGkuru5gPvn3XUCC+7zxwyIOClBaetyLpHRGjz6jjjTnlf7vNYm0lf3A4kY1Y7k5CxUVERgEqq+33VFVL56eiiB0uphlfcbfbvw8njpvf1nV8p/rJXuGoSH38MEMSeuv4M5xCz5p08loDfhqKyA5E2nbrCV2M87otHr/oSAErAKJ1F+ECUtgGrPG3avhVQm7xSos8ttJsfOioj3S//UkEtKtBL06ZlRX7mNtrXx6wn/gAO0v5B8cQRbyzf+mE2iCNtMBgNtaFIuGyMHTKFMeYiwEfwUP94r21MPv5mrbMpBLIQlnrqDbzdSBdnGPysm12c5SN/6iU1YjUwabbGBh49OHOTCqJjcNBMdCHzbSvrb7CQcILIcjUHpm+CpasqgBxB3AGJey9GwEXyLvJXYY36oSRNCEMK1JqMq7/t/aKIjGgA/MrCaceSk1qCGPt4wAy2pg4LtyF3TbYc03ZRkRGsFkQmMC9kkCwf+Ja5J/+TwHvuzmXsm4BJOZK3N0gxD1XZfuuMZOTnniqdCVKxrwCXrdbc+w== + SUPER_USER_PASSWORD: >- + AgCU9T7s3wEIfr9MdIrKFCE3i2s8BQEvzaakJcv6QqyqtiYW2ZSRgz3dED9Ouro0JiHU8PP5eb5K8qO0HPLb4KQ52vfis7GNlXiYn2O9iEtEIksvhlr6bqeytvuHFxv3MPtTt6Ffami8NCTCv5dscNeTLh0TxriNw7Cis5xsVDZBoY+/1yx1IzqRZKunTvThAh+pUhqJCnNiB8beCfhrgCREN+Yhmm1kbcQOzuO9jSEKmREq0YT76N5YRkkStlIyJk5ZjotqFGmIUdaX6PQ/3pZMQphMZ000Tg3qc/kHcl9b122OHdG6S+xOqFUWZQU5NyTYFUWwfqlkh5+PrIH4tH7TnK8Yk/v0e+pIvBf3y2TCat6+48oWLAFHSWJJGUEeHtyvpv+BbLvKzahbg+xZtNIUGdUrBTJVEk7Js6Y8nGc2vVx90wMF+UV2egf/MgGl6cTONLt/Xtaf6KLXJMFhGmoOAl8tonkN/gdi4f6tcEaa7cZne2AraFDwBPYUu20iAaFNdw+rHPAK92vsjqfNG0yjsCPVLaw5kR2Uynmcpkn75zbPlVDC3IzwAeZqdV0PqD01Iqc+ACqodidvqGTaJ5ot2maz1ZUnt/bkbgnxE4Tad1KLQPgmB/Bj1fhanz+H+zuP/eSQGxcELLojfXzGEN9MECLqhkeyRwYa5/PgKXt+ZIm5qydsfeBD4WoCLKUbWrxkYCclvyfAc45KJqHzwiAK template: metadata: creationTimestamp: null diff --git a/balancer/Service/backend.yaml b/balancer/Service/backend.yaml new file mode 100644 index 0000000..022fc65 --- /dev/null +++ b/balancer/Service/backend.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: backend + name: backend + namespace: balancer +spec: + ports: + - name: gunicorn + port: 8000 + targetPort: 8000 + selector: + app.kubernetes.io/component: backend diff --git a/balancer/Service/db-service.yaml b/balancer/Service/db-service.yaml new file mode 100644 index 0000000..8e5d367 --- /dev/null +++ b/balancer/Service/db-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: db-service + namespace: balancer +spec: + ports: + - port: 5432 + protocol: TCP + selector: + app.kubernetes.io/component: db + type: NodePort diff --git a/balancer/Service/frontend-static.yaml b/balancer/Service/frontend-static.yaml deleted file mode 100644 index f029118..0000000 --- a/balancer/Service/frontend-static.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: kompose convert -c -f nginx-docker-compose.yml -o nginx-helm-chart - kompose.version: 1.31.2 (a92241f79) - creationTimestamp: null - labels: - io.kompose.service: frontend-static - name: frontend-static - namespace: balancer -spec: - ports: - - name: http - port: 80 - protocol: TCP - selector: - io.kompose.service: frontend-static -status: - loadBalancer: {} diff --git a/balancer/Service/frontend.yaml b/balancer/Service/frontend.yaml new file mode 100644 index 0000000..cebf894 --- /dev/null +++ b/balancer/Service/frontend.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -c -f docker-compose.prod.yml -o helm-chart + kompose.version: 1.31.2 (a92241f79) + labels: + app.kubernetes.io/component: frontend + name: frontend + namespace: balancer +spec: + ports: + - name: http + port: 80 + selector: + app.kubernetes.io/component: frontend diff --git a/balancer/StatefulSet/db.yaml b/balancer/StatefulSet/db.yaml new file mode 100644 index 0000000..1c13f49 --- /dev/null +++ b/balancer/StatefulSet/db.yaml @@ -0,0 +1,34 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app.kubernetes.io/component: db + name: db + namespace: balancer +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: db + serviceName: db + template: + metadata: + labels: + app.kubernetes.io/component: db + io.kompose.network/balancer-main-default: 'true' + spec: + containers: + - envFrom: + - secretRef: + name: postgresql + image: 'postgres:15' + name: db + resources: {} + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgres-data + restartPolicy: Always + volumes: + - name: postgres-data + persistentVolumeClaim: + claimName: postgres-data-claim