kubernetes chown:/var/lib/postgresql/data/postgresql.conf:只读文件系统

egdjgwm8  于 2023-06-05  发布在  Kubernetes
关注(0)|答案(4)|浏览(237)

我解决了挂载/var/lib/postgresql/data时的一个权限问题,方法是使用initContainers执行此答案。
现在我尝试将postgresql.conf挂载为卷,遇到了类似的权限问题,抛出了chown: /var/lib/postgresql/data/postgresql.conf: Read-only file system
我能错过什么呢?我尝试了很多不同的变化,但运气不好。

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  serviceName: postgres
  replicas: 1
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: postgres
    spec:
      terminationGracePeriodSeconds: 10
      initContainers:
      - name: chmod-er
        image: busybox:latest
        command:
        - /bin/chown
        - -R
        - '0'
        - /var/lib/postgresql/data
        volumeMounts:
        - name: postgredb
          mountPath: /var/lib/postgresql/data
        - name: pg-config
          mountPath: /var/lib/postgresql/data/postgresql.conf
          subPath: postgresql.conf
      containers:
        - name: postgres
          image: mdillon/postgis:10-alpine
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgredb
              mountPath: /var/lib/postgresql/data
              subPath: data
            - name: pg-config
              mountPath: /var/lib/postgresql/data/postgresql.conf
              subPath: postgresql.conf
      volumes:
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pvc
        - name: pg-config
          configMap:
            name: pg-config
            items:
              - key: postgresql.conf
                path: postgresql.conf
myzjeezk

myzjeezk1#

从kubernetes 1.8开始,configmap以只读方式挂载,摘自CHANGELOG-1.8.md:
将secret、configMap、downwardAPI和投影卷更改为只读装载,而不是允许应用程序写入数据,然后自动恢复数据。在版本1.11之前,设置功能门ReadOnlyAPIDataVolumes=false将保留旧的行为。(#58720,@joelsmith)
如果您想更改从configmap挂载的文件,可以将其复制到另一个目录,然后更新它。

qyyhg6bp

qyyhg6bp2#

更新实体配置并将readonly设置为false

volumeMounts:
- name: postgredb
  mountPath: /var/lib/postgresql/data
  readOnly: false
- name: pg-config
  mountPath: /var/lib/postgresql/data/postgresql.conf
  subPath: postgresql.conf
  readOnly: false
0md85ypi

0md85ypi3#

我使用的解决方案是覆盖我需要的postgresql.conf参数作为容器的命令行参数:

containers:
    - name: postgres
      (...) 
      args:
        - -c
        - logging_collector=on
        - -c
        - log_directory=/var/log/postgresql

而不挂载修改过的postgresql.conf
来源:https://github.com/docker-library/docs/blob/master/postgres/README.md#database-configuration

kqlmhetl

kqlmhetl4#

不幸的是,设置readOnly: false对我的情况是不够的。
要使用“只读文件系统”解决此问题,您必须将postgresql.conf挂载到Postgres数据目录以外的目录中(默认情况下为/var/lib/postgresql/data
尝试以下操作:

containers:
    - name: postgres
      image: mdillon/postgis:10-alpine
      args: ['-c', 'config_file=/etc/postgresql/postgresql.conf']
      volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: dbdata
          readOnly: false
        - mountPath: /etc/postgresql/postgresql.conf
          name: pg-server-config
          subPath: postgresql.conf
          readOnly: false
  volumes:
    - name: dbdata
      persistentVolumeClaim:
        claimName: dbdata
    - name: pg-server-config
      configMap:
        name: pg-server-configmap

注意选择自定义配置的args部分。

相关问题