【发布时间】:2021-12-29 05:51:40
【问题描述】:
我有一个包含两个 PostgreSQL 数据库副本的 kubernetes 集群,我想查看存储在数据库中的值。
当我 exec 自己进入两个 postgres pod (kubectl exec --stdin --tty [postgres_pod] -- /bin/bash) 之一并从内部检查数据库时,我只有部分数据库。其余的数据库数据在另一个 Postgres pod 上,我没有看到由存储所有数据库的持久卷创建的任何目录。
简而言之,我创建了 4 个表;在一个 postgres pod 我有 4 个表,但 2 个是空的,在另一个 postgres pod 中有 3 个表,第一个 pod 中的表是空的,这里已经填满有数据。
为什么 pod 中没有相同的数据?
如何访问和下载整个数据库?
PS。我在 minikube 中使用 HELM 部署集群。
这里是 YAML 文件:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: database-pg
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
PGDATA: /data/pgdata
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
labels:
type: local
app: postgres
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
ports:
- name: postgres
port: 5432
nodePort: 30432
type: NodePort
selector:
app: postgres
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres-service
selector:
matchLabels:
app: postgres
replicas: 2
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:13.2
volumeMounts:
- name: postgres-disk
mountPath: /data
# Config from ConfigMap
envFrom:
- configMapRef:
name: postgres-config
volumeClaimTemplates:
- metadata:
name: postgres-disk
spec:
accessModes: ["ReadWriteOnce"]
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
labels:
app: postgres
spec:
selector:
matchLabels:
app: postgres
replicas: 2
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:13.2
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
---
【问题讨论】:
-
您不应该直接与数据库文件系统交互。如果您需要下载整个数据库,请使用
pbdump。您是否遵循有关如何在 kubernets 上部署 postgres 的任何特定教程?你同时使用Deployment和Statafulset吗? -
谢谢马里奥。使用
pgdump将是下载数据库的一个很好的解决方案,但是我想检查下载卷目录的特定场景。我在对帖子的回答中更详细地解释了它。
标签: postgresql kubernetes kubernetes-helm psql minikube