该笔记将记录:在 Kubernetes Cluser 中,如何部署 PostgreSQL 数据库,以及相关问题的解决办法;
仓库:charts/bitnami/postgresql at main · bitnami/charts
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm pull bitnami/postgresql # CHART 11.6.18, APP 14.4.0
helm show values ./postgresql-11.6.18.tgz > postgresql-11.6.18.helm-values.yaml
vim postgresql-11.6.18.helm-values.yaml
... 修改存储类:global.storageClass
... 修改 postgres 密码:global.postgresql.auth.postgresPassword
... 修改服务类型:primary.service.type(可选)
helm upgrade --install postgresql \
./postgresql-11.6.18.tgz -f postgresql-11.6.18.helm-values.yaml
// ---------------------------------------------------------------------------- // 当执行成功后,产生如下输出:
...
PostgreSQL can be accessed via port 5432 on the following DNS names from within your cluster:
postgresql.infra-database.svc.cluster.local - Read/Write connection
To get the password for "postgres" run:
export POSTGRES_PASSWORD=$(kubectl get secret --namespace infra-database postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)
To connect to your database run the following command:
kubectl run postgresql-client --rm --tty -i --restart='Never' --namespace infra-database --image docker.io/bitnami/postgresql:14.4.0-debian-11-r12 --env="PGPASSWORD=$POSTGRES_PASSWORD" \
--command -- psql --host postgresql -U postgres -d postgres -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:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace infra-database -w postgresql'
export SERVICE_IP=$(kubectl get svc --namespace infra-database postgresql --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
PGPASSWORD="$POSTGRES_PASSWORD" psql --host $SERVICE_IP --port 5432 -U postgres -d postgres
注意事项,需要留意存储的性能,否则初始化时间过长导致探针超时,导致容器重启,进而初始化失败。