Helm 中的 PostgreSQL:initdbScripts 参数

jef*_*her 4 postgresql kubernetes kubernetes-helm

PostgreSQL 的默认 Helm Chart(即stable/postgresql)定义了一个initdbScripts允许运行初始化脚本的参数。但是,关于如何通过命令行发布它,我似乎无法获得正确的格式。

有人可以提供一个如何填充此命令行参数的示例吗?

这是我发布的内容,减去initdbScripts参数的工作版本。

helm install stable/postgresql -n testpg \
    --set global.postgresql.postgresqlDatabase=testpg \
    --set global.postgresql.postgresqlUsername=testpg \
    --set global.postgresql.postgresqlPassword=testpg \
    --set global.postgresql.servicePort=5432 \
    --set initdbScripts=(WHAT GOES HERE TO RUN "sql/init.sql"??) \
    --set service.type=LoadBalancer
Run Code Online (Sandbox Code Playgroud)

Nic*_*lay 8

根据stable/postgresql helm chart,initdbScripts是一个多行变量的初始化脚本名称字典:

## initdb scripts
## Specify dictionary of scripts to be run at first boot
## Alternatively, you can put your scripts under the files/docker-entrypoint-initdb.d directory
##
# initdbScripts:
#   my_init_script.sh:|
#      #!/bin/sh
#      echo "Do something."
Run Code Online (Sandbox Code Playgroud)

假设我们有以下init.sql脚本:

CREATE USER helm;
CREATE DATABASE helm;
GRANT ALL PRIVILEGES ON DATABASE helm TO helm;
Run Code Online (Sandbox Code Playgroud)

当我们要将多行文本注入到值中时,我们需要处理 YAML 中的缩进。

对于上述特殊情况,它是:

helm install stable/postgresql -n testpg \
--set global.postgresql.postgresqlDatabase=testpg \
--set global.postgresql.postgresqlUsername=testpg \
--set global.postgresql.postgresqlPassword=testpg \
--set global.postgresql.servicePort=5432 \
--set initdbScripts."init\.sql"="CREATE USER helm;
CREATE DATABASE helm;
GRANT ALL PRIVILEGES ON DATABASE helm TO helm;" \
--set service.type=LoadBalancer
Run Code Online (Sandbox Code Playgroud)

上面的例子有一些解释:

  1. 如果脚本的名称有.它应该被转义,比如"init\.sql".
  2. 脚本的内容在双引号中,因为它是多行字符串变量。

  • 特别感谢您提到转义“.” 在键名中,例如 `init\.sql` (2认同)