๐ ๊ฐ์ - PostgreSQL - K8S - standalone
๐ณ๏ธโ๐ [๊ถ๊ธํ์ ]
๐[๋ชฉ์ฐจ]
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm pull bitnami/postgresql --untar
cd postgresql
apiVersion: storage.k8s.io/v1
kind: StorageClass
reclaimPolicy: Delete
metadata:
name: dev-psql-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
k apply -f dev-psql-sc.yaml
storageclass.storage.k8s.io/dev-psql-local-storage created
k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
dev-psql-local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 31s
sudo mkdir /tmp/dev-psql-data1
sudo chown -R 1001:1001 /tmp/dev-psql-data1
ls -ld /tmp/dev-psql-data1
drwxr-xr-x 2 1001 1001 4096 Jun 7 01:43 /tmp/dev-psql-data1
apiVersion: v1
kind: PersistentVolume
metadata:
name: dev-psql-pv1
labels:
type: local
spec:
storageClassName: dev-psql-local-storage
persistentVolumeReclaimPolicy: Delete
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/dev-psql-data1"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [slave1]}
k apply -f dev-psql-pv.yaml
persistentvolume/dev-psql-pv1 created
k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
dev-psql-pv1 1Gi RWO Delete Available psql-local-storage 3m35s
pv ๋ชฉ๋ก ํ์ธ
k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
dev-psql-pv1 1Gi RWO Delete Available psql-local-storage 21s
# 2๏ธโฃ ์ค์ - ์ฌ์ฉ์ Values ํ์ผ ์์ฑ
``` bash
cp values.yaml dev-psql-values.yaml
global:
postgresql:
auth:
postgresPassword: "psql"
username: "admin"
password: "psql"
database: "psql"
primary:
persistence:
size: 1Gi
storageClass: "dev-psql-local-storage"
cd ..
helm template postgresql -f dev-psql-values.yaml
helm install my-psql . -n my-dev -f dev-psql-values.yaml --create-namespace --set volumePermissions.enabled=true
NAME: my-psql
LAST DEPLOYED: Sat Jun 7 10:58:51 2025
NAMESPACE: my-dev
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: postgresql
CHART VERSION: 16.7.4
APP VERSION: 17.5.0
Did you know there are enterprise versions of the Bitnami catalog? For enhanced secure software supply chain features, unlimited pulls from Docker, LTS support, or application customization, see Bitnami Premium or Tanzu Application Catalog. See https://www.arrow.com/globalecs/na/vendors/bitnami for more information.
** Please be patient while the chart is being deployed **
PostgreSQL can be accessed via port 5432 on the following DNS names from within your cluster:
my-psql-postgresql.my-dev.svc.cluster.local - Read/Write connection
To get the password for "postgres" run:
export POSTGRES_ADMIN_PASSWORD=$(kubectl get secret --namespace my-dev my-psql-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)
To get the password for "admin" run:
export POSTGRES_PASSWORD=$(kubectl get secret --namespace my-dev my-psql-postgresql -o jsonpath="{.data.password}" | base64 -d)
To connect to your database run the following command:
kubectl run my-psql-postgresql-client --rm --tty -i --restart='Never' --namespace my-dev --image docker.io/bitnami/postgresql:17.5.0-debian-12-r3 --env="PGPASSWORD=$POSTGRES_PASSWORD" \
--command -- psql --host my-psql-postgresql -U admin -d psql -p 5432
> NOTE: If you access the container using bash, make sure that you execute "/opt/bitnami/scripts/postgresql/entrypoint.sh /bin/bash" in order to avoid the error "psql: local user with ID 1001} does not exist"
To connect to your database from outside the cluster execute the following commands:
kubectl port-forward --namespace my-dev svc/my-psql-postgresql 5432:5432 &
PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U admin -d psql -p 5432
WARNING: The configured password will be ignored on new installation in case when previous PostgreSQL release was deleted through the helm command. In that case, old PVC will have an old password, and setting it through helm won't take effect. Deleting persistent volumes (PVs) will solve the issue.
WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
- primary.resources
- readReplicas.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
k get po -n my-dev
NAME READY STATUS RESTARTS AGE
my-psql-postgresql-0 1/1 Running 0 2m5s
helm ls -n my-dev
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-psql my-dev 1 2025-06-07 10:58:51.6772875 +0900 KST deployed postgresql-16.7.4 17.5.0
k exec -it my-psql-postgresql-0 -n my-dev -- bash
I have no name!@my-psql-postgresql-0:/$ psql psql -U admin
Password for user admin:
psql (17.5)
Type "help" for help.
psql=> SELECT current_database();
current_database
------------------
psql
(1 row)
I have no name!@my-psql-postgresql-0:/$ psql psql -U admin -h my-psql-postgresql-0.my-psql-postgresql-hl.my-dev.svc.cluster.local
Password for user admin:
psql (17.5)
Type "help" for help.
psql=>
# helm ์ญ์ ํ ์ฌ ์์ฑ
helm delete my-psql -n my-dev
helm install my-psql . -n my-dev -f dev-psql-values.yaml --create-namespace --set volumePermissions.enabled=true
# helm upgrade
helm upgrade my-psql . -n my-dev -f dev-psql-values.yaml --create-namespace --set volumePermissions.enabled=true
# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์ฐ - Released ์ํ์ pv Available๋ก ๋ณ๊ฒฝ
rm -rf /tmp/dev-psql-data1/*
kubectl patch pv my-pv1 -p '{"spec":{"claimRef": null}}'
# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์ฐ - PV ์์ฑ/์ญ์
k apply -f dev-psql-pv.yaml
k delete -f dev-psql-pv.yaml