#postgresql #kubernetes #connection #cloud #psql
#postgresql #kubernetes #подключение #облако #psql
Вопрос:
В настоящее время я настраиваю экземпляр postgres в своем кластере Kubernetes, размещенном в общедоступном облаке OVH. Проблема в том, что я не могу получить к ней доступ. Я знаю, что мне нужно сделать psql -h host -U user --password -p 30904 db
для подключения, но проблема в том, что я не знаю, что поставить вместо host. Локальный хост? IP-адрес главного узла? Другой ip?
Спасибо за ваше время.
postgres-развертывание.yaml :
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
type:
NodePort
ports:
- port: 5432
selector:
app: postgres
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
strategy:
type: Recreate
template:
metadata:
labels:
app: postgres
spec:
containers:
- image: postgres:13.1
name: postgres
env:
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
name: ident
key: POSTGRES_DB
name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: ident
key: POSTGRES_USER
name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: ident
key: POSTGRES_PASSWORD
ports:
- containerPort: 5432
name: postgres
volumeMounts:
- name: postgres-persistent-storage
mountPath: /var/lib/postgresql/data2
volumes:
- name: postgres-persistent-storage
persistentVolumeClaim:
claimName: postgres-pv-claim
Комментарии:
1. Вам необходимо предоставить более подробную информацию о вашей среде, конфигурации kubernetes и т. Д. Как вы развернули эту базу данных, как вы ее раскрыли. Вы использовали Deployment или stateful set, какой тип сервиса использовался. Было бы здорово, если бы вы могли предоставить все шаги для воспроизведения вашей среды с помощью приложения.
2. Хорошо, спасибо! Итак, я использую кластер kubernetes, созданный с помощью OVH, с набором пулов, работающих на стандартной ОС узла OVH, поэтому я не делал большую часть этой части, она в значительной степени управляется самим OVH. То, что я сделал, — это развертывание postgres с сервисом postgres типа NodePort. Я отредактирую свой пост, чтобы поместить в него содержимое моих файлов.
Ответ №1:
Я развернул вашу YAMLs
базу данных и смог подключиться.
В --h
вы должны указать IP node
или host machine
где PostgreSQL
был развернут pod.
Тестовый пример
Я протестировал это на своем кластере GKE.
На основе вашего YAMLs
и этого руководства. В основном для ConfigMap
и PV/PVC
конфигурации.
POSTGRES_DB: postgresdb
POSTGRES_USER: postgresadmin
POSTGRES_PASSWORD: admin123
Подключение к базе данных PostgreSQL
- 1 — Из модуля SQL
$ kubectl get po
NAME READY STATUS RESTARTS AGE
postgres-5586dc9864-pwpsn 1/1 Running 0 37m
Вы должны kubectl exec
PostgreSQL
использовать pod.
$ kubectl exec -ti postgres-5586dc9864-pwpsn -- bin/bash
root@postgres-5586dc9864-pwpsn:/#
Используйте psql
команду для подключения database
.
root@postgres-5586dc9864-pwpsn:/# psql -p 5432 -U postgresadmin -d postgresdb
psql (13.1 (Debian 13.1-1.pgdg100 1))
Type "help" for help.
postgresdb=#
- 2 — Из кластера
Сведения о службе:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.28.0.1 <none> 443/TCP 60m
postgres NodePort 10.28.14.2 <none> 5432:31431/TCP 45m
Подробности модуля:
$ kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
postgres-5586dc9864-pwpsn 1/1 Running 0 41m 10.24.1.6 gke-cluster-1-default-pool-8baf2b67-jjjh <none> <none>
Сведения об узле, где PostgreSQL
был развернут pod.
$ kubectl get node -o wide | grep gke-cluster-1-default-pool-8baf2b67-jjjh
gke-cluster-1-default-pool-8baf2b67-jjjh Ready <none> 56m v1.16.15-gke.4300 10.154.15.222 35.197.210.241 Container-Optimized OS from Google 4.19.112 docker://19.3.1
NodeIP
адрес node
, где PostgreSQL
был развернут pod 10.154.15.222
.
Команда:
$ kubectl exec -ti <podname> -- psql -h <Internal IP address of hosting node> -U postgresadmin --password -p <nodeport number from service> <database name>
Вывод:
$ kubectl exec -ti postgres-5586dc9864-pwpsn -- psql -h 10.154.15.222 -U postgresadmin --password -p 31431 postgresdb
Password:
psql (13.1 (Debian 13.1-1.pgdg100 1))
Type "help" for help.
postgresdb=#
Ответ №2:
Вы можете попробовать что-то вроде этого:
kubectl exec -it $(kubectl get pods -n %YOURNAMESPACE% | grep postgres | cut -d " " -f1) -n %YOURNAMESPACE% -- bash -c "psql -U postgres -c 'SELECT current_database()'"
Или опустите значение пространства имен, если оно вам нужно в текущем пространстве имен:
kubectl exec -it $(kubectl get pods | grep postgres | cut -d " " -f1) -n -- bash -c "psql -U postgres -c 'SELECT current_database()'"