我正在使用以下清单在NFS持久卷内的kubernetes上部署postgresql:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs2
spec:
capacity:
storage: 6Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 10.139.82.123
path: /nfsfileshare/postgres
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs2
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 6Gi
---
apiVersion: v1
kind: Service
metadata:
name: db
labels:
app: aiflow-db
spec:
selector:
app: aiflow-db
clusterIP: None
ports:
- port: 5432
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
namespace: test-aiflow
labels:
app: aiflow-db
spec:
selector:
matchLabels:
app: aiflow-db
template:
metadata:
labels:
app: aiflow-db
spec:
containers:
- name: db
image: postgresql:10
ports:
- containerPort: 5432
env:
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- mountPath: /var/lib/postgresql/data/pgdata
name: nfs2
volumes:
- name: nfs2
persistentVolumeClaim:
claimName: nfs2
restartPolicy: Always
可以将pg数据安装到nfs服务器(/nfsfileshare/postgres *(rw,async,no_subtree_check,no_root_squash)
):
total 124
drwx------ 19 999 root 4096 Aug 7 11:10 ./
drwxrwxrwx 5 root root 4096 Aug 7 10:28 ../
drwx------ 3 999 docker 4096 Aug 7 11:02 base/
drwx------ 2 999 docker 4096 Aug 7 11:10 global/
drwx------ 2 999 docker 4096 Aug 7 11:01 pg_commit_ts/
drwx------ 2 999 docker 4096 Aug 7 11:01 pg_dynshmem/
-rw------- 1 999 docker 4513 Aug 7 11:02 pg_hba.conf
-rw------- 1 999 docker 1636 Aug 7 11:02 pg_ident.conf
drwx------ 4 999 docker 4096 Aug 7 11:09 pg_logical/
drwx------ 4 999 docker 4096 Aug 7 11:01 pg_multixact/
drwx------ 2 999 docker 4096 Aug 7 11:10 pg_notify/
drwx------ 2 999 docker 4096 Aug 7 11:02 pg_replslot/
drwx------ 2 999 docker 4096 Aug 7 11:01 pg_serial/
drwx------ 2 999 docker 4096 Aug 7 11:01 pg_snapshots/
drwx------ 2 999 docker 4096 Aug 7 11:02 pg_stat/
drwx------ 2 999 docker 4096 Aug 7 11:02 pg_stat_tmp/
drwx------ 2 999 docker 4096 Aug 7 11:02 pg_subtrans/
drwx------ 2 999 docker 4096 Aug 7 11:02 pg_tblspc/
drwx------ 2 999 docker 4096 Aug 7 11:01 pg_twophase/
-rw------- 1 999 docker 3 Aug 7 11:02 PG_VERSION
drwx------ 3 999 docker 4096 Aug 7 11:02 pg_wal/
drwx------ 2 999 docker 4096 Aug 7 11:02 pg_xact/
-rw------- 1 999 docker 88 Aug 7 11:02 postgresql.auto.conf
-rw------- 1 999 docker 22729 Aug 7 11:02 postgresql.conf
-rw------- 1 999 docker 74 Aug 7 11:10 postmaster.pid
但是容器被下面的日志卡住了:
属于该数据库系统的文件将归用户所有 “ postgres”。该用户还必须拥有服务器进程。
数据库集群将使用语言环境“ en_US.utf8”进行初始化。的 因此,默认数据库编码已设置为“ UTF8”。的 默认的文本搜索配置将设置为“英语”。
数据页校验和已禁用。
对现有目录的修复权限 / var / lib / postgresql / data / pgdata ...确定创建子目录...确定 选择默认的max_connections ... 100选择默认 shared_buffers ... 128MB选择动态共享内存 实现... posix创建配置文件...可以运行 引导脚本...好吧
它似乎在引导程序后初始化中停留。
仅当我不使用nfs卷(通过使用hostPath卷工作)时,它才起作用,为什么?
答案 0 :(得分:1)
NFS不支持fsync内核vfs调用,这是必需的事务日志,以确保在磁盘上写出重做日志。因此,当需要使用RDBMS(例如PostgreSQL和MySQL)时,应该使用块存储。您可能会失去数据一致性,尽管可以在NFS上运行数据一致性。
答案 1 :(得分:0)
我遇到相同的问题,当我使用头盔部署gitlab时,postgresql无法运行,并且出现以下错误:
FATAL: data directory "/var/lib/postgresql/data/pgdata" has wrong ownership.
HINT: The server must be started by the user that owns the data directory.
我认为这是因为postgresql运行属性需要它的数据应该由用户postgres和组postgres拥有,但是nfs更改了自己的用户和组,使得postgresql无法运行。
也许更改其他工具(例如glusterfs)可以解决此问题,或者尝试通过nfs进行mysql的数据挂载。