首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在具有NFS卷的Kubernetes上部署Postgresql

如何在具有NFS卷的Kubernetes上部署Postgresql
EN

Stack Overflow用户
提问于 2018-08-07 11:21:33
回答 2查看 5K关注 0票数 2

我使用下面的清单在NFS持久卷中的kubernetes上部署postgresql:

代码语言:javascript
复制
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)):

代码语言:javascript
复制
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“拥有。此用户还必须拥有服务器进程。 数据库集群将使用locale "en_US.utf8“初始化。因此,默认数据库编码被设置为"UTF8“。默认的文本搜索配置将设置为"english“。 数据页校验和被禁用。 修改现有目录/var/lib/postgresql/data/pgdata的权限.好的创建子目录..。选择默认的max_connections . 100选择默认的shared_buffers .128 ok选择动态共享内存实现.posix创建配置文件。运行引导脚本..。好的

它似乎卡在引导后初始化上。

只有当我不使用nfs卷(通过使用hostPath卷工作)时,它才能工作,为什么?

EN

回答 2

Stack Overflow用户

发布于 2018-08-07 11:39:32

NFS不支持fsync内核vfs调用,这是确保在磁盘上写入重做日志所必需的事务日志。因此,当您需要使用RDBMS时,例如PostgreSQL和MySQL,您应该使用块存储。您可能会失去数据一致性,尽管您可以在NFS上运行数据一致性。

票数 2
EN

Stack Overflow用户

发布于 2019-03-15 11:28:40

我遇到了同样的问题,当我使用helm部署gitlab时,postgresql无法运行,下面的错误如下:

代码语言:javascript
复制
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 run属性需要它的数据应该由用户postgres和分组postgres拥有,但是nfs改变了自己的用户和组,使postgresql无法运行。

也许改变其他的工具,如glusterfs可以解决这个问题,或者尝试mysql的数据按nfs加载。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51725559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档