如何在Init容器中挂载sql文件以引导Postgres数据库



我正在努力在我的应用程序的deployment.yaml中添加一个init-container,这样我就可以解耦我的postgres数据库引导或模式进化。

作为V1,我试图挂载一个sql文件,该文件将包括从本地目录引导db(数据库,模式,用户),然后通过使用Postgres客户端映像运行脚本中的命令。

现在我有下面的

initContainers:
- name: init-myservice
image: jbergknoff/postgresql-client
command: ['sh', '-c', 'psql -a -f /bootstrap.sql']
env:
- name: PGUSER
....
..... 
volumeMounts:
- mountPath: /bootstrap.sql
name: bootstrap.sql

从我的搜索结果中,我猜我必须使用空dir卷类型来挂载文件,但我现在无法让它工作。

我还需要通过db凭据,但不确定如何从sql脚本内的环境变量中使用它们,是否有任何语法?

你能帮我把这些点联系起来吗?主要是如何将文件挂载到init容器中,以及如何从shell脚本中获取env变量,并在sql脚本中使用它们来创建例如带有密码的用户?

提前感谢。

您必须做以下事情:

  1. 将SQL文件的内容作为ConfigMap,例如:

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: mariadb-config
    data:
    mariadb-schema: "DROP DATABASE IF EXISTS test;nnCREATE DATABASE IF NOT EXISTS test;
    
  2. 在您的部署yaml中从这个配置映射创建一个卷,如下所示:

    volumes:
    - name: mariadb-schema-config-vol
    configMap:
    name: mariadb-config
    defaultMode: 420
    items:
    - key: mariadb-schema
    path: mariadb-schema.sql
    

    和卷挂载如下:

    volumeMounts:
    - mountPath: /var/db/config
    name: mariadb-schema-config-vol
    

那么您的init容器命令将像:

['sh', '-c', 'psql -a -f /var/db/config/mariadb-config.sql']

对于你的第二个问题,制作一个shell脚本来读取env变量(db凭据-我假设你在秘密中拥有它们并将它们用作env变量),然后调用这个命令:

psql -a -f /var/db/config/mariadb-config.sql

因此,为了实现这一点,该脚本的内容应该在配置映射中,并从卷挂载执行脚本,就像上面的示例一样。

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新