簡體   English   中英

如何通過 Kubernetes statefulset 環境變量更改 Postgresql max_connections 配置?

[英]How to change Postgresql max_connections config via Kubernetes statefulset environment variable?

在 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 docker 鏡像只能支持幾個 env 參數, POSTGRES_PASSWORDPOSTGRES_USERPOSTGRES_DBPOSTGRES_INITDB_ARGSPOSTGRES_INITDB_WALDIRPOSTGRES_HOST_AUTH_METHODPGDATA

如果要修改一些數據庫配置參數,可以在 kubernetes 中使用args

部署yaml文件分數

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

當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"]

您需要擴展基本圖像( postgres:latest )。 使用自定義更改覆蓋默認配置,然后啟動 postgres。

Postgres docker 鏡像不允許通過環境變量設置max_connections屬性。 您必須使用postgresql.conf文件來設置此類配置。

使用自定義postgresql.conf文件創建一個 ConfigMap。 然后將 ConfigMap 掛載到/etc/postgresql/目錄中。

您將在此處找到示例postgresql.conf文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM