【问题标题】:How to change Postgresql max_connections config via Kubernetes statefulset environment variable?如何通过 Kubernetes statefulset 环境变量更改 Postgresql max_connections 配置?
【发布时间】:2019-10-24 04:53:00
【问题描述】:

在 Kubernetes 中,来自 ConfigMap 的环境变量不会更改 PostgreSql pod 中的 max_connections 属性。如何通过 Kubernetes 中的环境变量更改 Postgres max_connections 配置?

我尝试了以下参数来配置 Postgres。

问题是,我可以使用 DB、USER 和 PASSWORD 参数和值按预期设置。但我需要更改 max_connections 配置。我进行了相关研究,看起来 PGOPTIONS 是发送配置更改的正确选择。即使我尝试了 PGOPTIONS 和其他变体,对 max_connections 值也没有影响。我正在连接 postgresql 并且正在执行 SHOW MAX_CONNECTIONS 查询,即使我在环境配置值中指定 1000,它也会显示 100。

我在 digitalocean 中使用 Kubernetes 1.14。

配置映射

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config-demo
  labels:
    app: postgres
data:
  POSTGRES_DB: demopostgresdb
  POSTGRES_USER: demopostgresadmin
  POSTGRES_PASSWORD: demopostgrespwd
  PGOPTIONS: "-c max_connections=1000  -c shared_buffers=1024MB"
  POSTGRES_OPTIONS: "-c max_connections=1000  -c shared_buffers=1024MB"
  PG_OPTIONS: "-c max_connections=1000  -c shared_buffers=1024MB"
  MAX_CONNECTIONS: "1000"

有状态集

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pgdemo
spec:
  serviceName: "postgres"
  replicas: 2
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:latest          

          envFrom:
            - configMapRef:
                name: postgres-config-demo     
          env:         
            - name: PGOPTIONS
              value: "-c max_connections=1000  -c shared_buffers=1024MB"
            - name: "MAX_CONNECTIONS"
              value: "1000"
          ports:
            - containerPort: 5432
              name: postgredb
          volumeMounts:
            - name: postgredb
              mountPath: /var/lib/postgresql/data
              subPath: postgres              
  volumeClaimTemplates:
    - metadata:
        name: postgredb
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: do-block-storage
        resources:
          requests:
            storage: 3Gi

我希望 max_connections 值为 1000。 但它看起来像 100 这样的默认值。

任何日志都没有错误。

【问题讨论】:

    标签: postgresql kubernetes digital-ocean


    【解决方案1】:

    当PGOPTIONS的环境变量指定max_connections时,会出现如下错误。所以在args中指定而不是在PGOPTIONS的环境变量中指定是正确的。

    2020-05-27 06:51:55.327 UTC [62] FATAL:  parameter "max_connections" cannot be changed without restarting the server
    psql: FATAL:  parameter "max_connections" cannot be changed without restarting the server
    


    containers:
            - name: postgres
              image: postgres:latest
              args: ["-c", "max_connections=500"]
    

    【讨论】:

      【解决方案2】:

      Postgresql docker镜像只能支持几个env参数,POSTGRES_PASSWORD,POSTGRES_USER,POSTGRES_DB,POSTGRES_INITDB_ARGS,POSTGRES_INITDB_WALDIR,POSTGRES_HOST_AUTH_METHOD,PGDATA。

      如果要修改一些数据库配置参数,可以在kubernetes中使用args。

      部署 yaml 文件部分

        containers:
        - args:
          - -c
          - max_connections=1000
          - -c
          - shared_buffers=1024MB
          envFrom:
          - configMapRef:
              name: postgres-config
          image: postgres
          imagePullPolicy: IfNotPresent
          name: postgres
      

      【讨论】:

        【解决方案3】:

        您需要扩展基本映像 ( postgres:latest )。用自定义更改覆盖默认配置,然后启动 postgres。

        【讨论】:

        • 嗨。感谢您的回答。我不明白他们为什么清楚地分享这些信息;无权通过 env 选项更改连接限制。你能分享一个关于我们不能用官方文档中的env参数改变这个信息的例子吗?我找不到。
        【解决方案4】:

        Postgres docker 映像不允许通过环境变量设置 max_connections 属性。您必须使用postgresql.conf 文件来设置此类配置。

        使用自定义 postgresql.conf 文件创建 ConfigMap。然后将 ConfigMap 挂载到/etc/postgresql/ 目录中。

        您将找到一个示例postgresql.conf 文件here。

        【讨论】:

        • 嗨。感谢您的回答;但是将 configmap 挂载为配置会导致只读文件错误;仅供参考。
        • 对于只读错误,首先:stackoverflow.com/a/32584211/1290868,然后尽量不要将conf文件放入数据挂载中,然后“args”解决方案在这里工作......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        • 1970-01-01
        • 1970-01-01
        • 2021-04-22
        相关资源
        最近更新 更多