K8s postgres未持久化数据



我的目标是将持久卷装载到postgres有状态集上。为了测试持久性,I:

  • 部署有状态集,并装载卷(kubectl apply -f postgres.yml)
  • 创建表并插入行
  • 将状态集重新缩放为0,然后将其删除(kubectl scale statefulset/postgresql-db --replicas 0 && kubectl delete statefulset/postgresql-db)
  • 重新部署有状态集(kubectl apply -f postgres.yml)

在我的新部署中,数据库是空的,我希望表和数据是持久的,为什么会这样?

我一直在关注一些文章来做到这一点,特别是:

  • https://www.bmc.com/blogs/kubernetes-postgresql/
  • https://medium.com/@xcoulon/storing-data-in-persistent-volumes-on-kubernetes-fb155da16666
# kubectl apply -f postgres.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/home/tp/projects/bitbuyer"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgresql-db
spec:
serviceName: postgresql-db-service
selector:
matchLabels:
app: postgresql-db
replicas: 1
template:
metadata:
labels:
app: postgresql-db
spec:
containers:
- name: postgresql-db
image: postgres:latest
volumeMounts:
- name: postgres-pv
mountPath: /data
env:
- name: POSTGRES_PASSWORD
value: pgpassword
- name: PGDATA
value: /data/pgdata
volumes:
- name: postgres-pv
persistentVolumeClaim:
claimName: postgres-pvc

可能导致问题

volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
subPath: pgdata

然而,这是我正在使用的postgres

https://github.com/harsh4870/Keycloack-postgres-kubernetes-deployment/blob/main/postgres.yaml

apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
ports:
- name: pgql
port: 5432
targetPort: 5432
protocol: TCP
selector:
app: postgres
---
apiVersion: apps/v1  
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: "postgres"
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:9.5
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
subPath: pgdata
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_PASSWORD
value: password
- name: POSTGRES_DB
value: kong
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
ports:
- containerPort: 5432
terminationGracePeriodSeconds: 60
volumeClaimTemplates:
- metadata:
name: postgres-data
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: 10Gi

最新更新