相关配置:
sts.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgresql
spec:
updateStrategy:
type: RollingUpdate
serviceName: XXX
replicas: XXX
selector:
matchLabels: XXX
template:
metadata:
labels: XXX
annotations:
configmap-postgres-hash: XXX
spec:
affinity: XXX
nodeSelector:
XXX
containers:
- name: postgresql
image: XXX
imagePullPolicy: XXX
ports:
- containerPort: XXX
livenessProbe:
exec:
command:
- pg_isready
- -U
- postgres
initialDelaySeconds: 20
timeoutSeconds: 5
readinessProbe:
exec:
command:
- pg_isready
- -U
- postgres
initialDelaySeconds: 20
timeoutSeconds: 5
envFrom:
- configMapRef:
name: postgres
volumeMounts:
- name: postgresql-data
mountPath: /var/lib/postgresql
volumeClaimTemplates:
- metadata:
name: postgresql-data
annotations:
XXX: XXX
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: XXX
看到上面文件:
volumeMounts:
- name: postgresql-data
mountPath: /var/lib/postgresql
中的配置是将存放数据目录挂在了 postgresql 的初始化工作目录 /var/lib/postgresql,此时如果 pod 发生重启的话,docker 每次都会清除工作目录中的内容,如果挂载在此处,数据就会丢失
根据 https://github.com/docker-library/postgres/issues/696
我们可以修改挂载目录来解决这个问题
env:
- name: PGDATA
value: /pgdata/data
volumeMounts:
- name: postgresql-data
mountPath: /pgdata
我们可以将 volumeMounts 字段修改为以上之后,数据可以保存