如何通过Kubernetes statefulset环境变量更改Postgresql max_connections配置?

时间:2019-06-09 14:21:45

标签: postgresql kubernetes digital-ocean

在Kubernetes中,来自ConfigMap的环境变量不会更改PostgreSql容器中的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。

ConfigMap

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"

Statefulset

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。

任何日志中都没有错误。

4 个答案:

答案 0 :(得分:4)

PostgreSQL docker映像只能支持多个环境参数,POSTGRES_PASSWORDPOSTGRES_USERPOSTGRES_DBPOSTGRES_INITDB_ARGSPOSTGRES_INITDB_WALDIRPOSTGRES_HOST_AUTH_METHOD,{ {1}}。

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

部署Yaml文件部分

args

答案 1 :(得分:1)

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

答案 2 :(得分: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"]

答案 3 :(得分:0)

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

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

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