如何将音量附加到pod的post start生命周期钩子?

时间:2017-09-01 12:58:04

标签: openshift

试用的用例是在启动后初始化postgres数据库的方法。我在post pod生命周期中看到了openshift启动挂钩。我不能使用here-document或在命令行中放置sql语句(由于最大长度问题,Docker命令失败)。

所以寻找一个选项,通过SQLConfigMap语句保存在文件中,并在它开始之前将其附加到post容器,以便psql命令可以执行它。我看不到从官方文档DeploymentConfig附加卷的方法。我有什么方法可以做到吗?

我提到的文件 - openshift-doc

2 个答案:

答案 0 :(得分:0)

我找到了一种解决方法,可以将长SQL语句传递给post生命周期窗格。

DeploymentConfig ENV变量中设置SQL语句。这些ENV变量也可以在生命周期窗口中访问,因此我们可以轻松地执行波纹管命令

  post:
    failurePolicy: Abort
    execNewPod:
      command:
        - /bin/bash
        - '-c'
        - >-
          echo $INIT_SQL_STATEMENTS | psql "sslmode=allow
          host=postgres user=postgres password=postgres"
      containerName: postgres

  .....

      env:
        - name: POSTGRESQL_ADMIN_PASSWORD
          value: postgres
        - name: INIT_SQL_STATEMENTS
          value: >-
            create user haridas with encrypted  password 'haridas';...

答案 1 :(得分:0)

我过去使用的另一个选项是将sql语句传递到参数文件中。然后,这将使您可以更轻松地配置管理sql命令(例如,将其检入git)并整理部署配置(DC)。这是我所做的:

  1. 将帖子挂钩移动到模板文件的DC部分。让我 知道您是否需要有关如何导出,修改和重新导入 模板文件,但我不想使此过程过于复杂 不必要地。
  2. 将这样的参数添加到名为SQL_COMMANDS的模板文件中,如下所示:
parameters:
- description: The SQL commands to run. 
  displayName: SQL commands
  name: SQL_COMMANDS
  required: true
  1. 在模板的后钩代码(DC部分)中,像这样运行SQL_COMMANDS:
 execNewPod:
    command:
    - /bin/sh
    - -c
    - echo "${SQL_COMMANDS}" | psql -h ${DATABASE_SERVICE_NAME} -U ${POSTGRESQL_USER} -d ${POSTGRESQL_DATABASE};
     

请注意,命令中的其他变量也作为参数传递。

  1. 创建与此类似的参数文件:
POSTGRESQL_USER=postgres
POSTGRESQL_PASSWORD=somepassword
POSTGRESQL_DATABASE=myDatabase
SQL_COMMANDS="CREATE TABLE Configuration(CONFIGURATION_ID character varying(255) 
NOT NULL, description character varying(255)
NOT NULL, key character varying(255) NOT NULL, value text NOT NULL,
PRIMARY KEY (CONFIGURATION_ID) ); INSERT INTO Configuration
(CONFIGURATION_ID, description, key, value) VALUES ('10', ... etc."
  1. 使用模板部署您的应用,然后从文件中传入参数:
oc new-app <template name> --param-file=ParametersFile.txt