最近在 k8s 上部署 gitlab 时,底层存储使用的是 ceph,结果 postgresql 遇到以下报错:
$ kubectl -n gitlab logs postgresql-76d969dd56-m79wm
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
It contains a lost+found directory, perhaps due to it being a mount point.
Using a mount point directly as the data directory is not recommended.
Create a subdirectory under the mount point.
# pv
apiVersion: v1
kind: PersistentVolumeClaim
Metadata:
name: postgresql-ceph-pvc
namespace: gitlab
spec:
storageClassName: ceph-leffss
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: Service
Metadata:
name: postgresql
namespace: gitlab
labels:
app: gitlab
tier: postgresql
spec:
ports:
- port: 5432
selector:
app: gitlab
tier: postgresql
---
apiVersion: apps/v1
kind: Deployment
Metadata:
name: postgresql
namespace: gitlab
labels:
app: gitlab
tier: postgresql
spec:
replicas: 1
selector:
matchLabels:
app: gitlab
tier: postgresql
strategy:
type: Recreate
template:
Metadata:
labels:
app: gitlab
tier: postgresql
spec:
#nodeselector:
# gee/disk: "500g"
containers:
- image: hub.leffss.com/library/postgres:12.6-alpine
#- image: harbor.boge.com/library/postgres:12.6-alpine
name: postgresql
env:
- name: POSTGRES_USER
value: gitlab
- name: POSTGRES_DB
value: gitlabhq_production
- name: POSTGRES_PASSWORD
value: bogeusepg
- name: TZ
value: Asia/Shanghai
ports:
- containerPort: 5432
name: postgresql
livenessProbe:
exec:
command:
- sh
- -c
- exec pg_isready -U gitlab -h 127.0.0.1 -p 5432 -d gitlabhq_production
initialDelaySeconds: 110
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
exec:
command:
- sh
- -c
- exec pg_isready -U gitlab -h 127.0.0.1 -p 5432 -d gitlabhq_production
initialDelaySeconds: 20
timeoutSeconds: 3
periodSeconds: 5
# resources:
# requests:
# cpu: 100m
# memory: 512Mi
# limits:
# cpu: "1"
# memory: 1Gi
volumeMounts:
- name: postgresql
mountPath: /var/lib/postgresql/data
volumes:
- name: postgresql
persistentVolumeClaim:
claimName: postgresql-ceph-pvc
解决方法:volumeMounts 中新增 subPath 参数
volumeMounts:
- name: postgresql
mountPath: /var/lib/postgresql/data
subPath: data
参考:postgresql - How to have data persist in GKE kubernetes StatefulSet with postgres? - Stack Overflow
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。