如何通过 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 查询,它显示 100,即使我在环境配置值中指定 1000。
我在 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"
状态集
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。
任何日志都没有错误。
Postgres docker 图像不允许通过环境变量设置 max_connections
属性。您必须使用 postgresql.conf
文件来设置此类配置。
使用自定义 postgresql.conf
文件创建 ConfigMap。然后将 ConfigMap 挂载到 /etc/postgresql/
目录。
您将找到一个示例 postgresql.conf
文件 here。
您需要扩展基本映像 (postgres:latest)。使用自定义更改覆盖默认配置,然后启动 postgres。
Postgresql docker image只能支持几个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
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"]
在 Kubernetes 中,来自 ConfigMap 的环境变量不会更改 PostgreSql pod 中的 max_connections 属性。如何通过 Kubernetes 中的环境变量更改 Postgres max_connections 配置?
我已经尝试使用以下参数来配置 Postgres。
问题是,我可以使用 DB、USER 和 PASSWORD 参数,并且值按预期设置。但我需要更改 max_connections 配置。我进行了相关研究,看起来 PGOPTIONS 是发送配置更改的正确选择。即使我尝试了 PGOPTIONS 和其他变体,对 max_connections 值也没有影响。我正在连接 postgresql 并正在执行 SHOW MAX_CONNECTIONS 查询,它显示 100,即使我在环境配置值中指定 1000。
我在 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"
状态集
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。
任何日志都没有错误。
Postgres docker 图像不允许通过环境变量设置 max_connections
属性。您必须使用 postgresql.conf
文件来设置此类配置。
使用自定义 postgresql.conf
文件创建 ConfigMap。然后将 ConfigMap 挂载到 /etc/postgresql/
目录。
您将找到一个示例 postgresql.conf
文件 here。
您需要扩展基本映像 (postgres:latest)。使用自定义更改覆盖默认配置,然后启动 postgres。
Postgresql docker image只能支持几个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
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"]