代码之家  ›  专栏  ›  技术社区  ›  Greg Hill

在Elasticsearch上安装repository se插件

  •  2
  • Greg Hill  · 技术社区  · 8 年前

    我们在AWS上运行EKS和工作节点。我们正在使用gcr.io/google\u containers/elasticsearch:v6.3.0. 不过,现在我们希望添加curator来获取ES索引的快照并将它们存储在S3 bucket中。为此,ES需要一个repository-s3插件。

    因此,我们决定扩展这个图像,并创建我们自己的插件安装。Dockerfile是:

    FROM gcr.io/google_containers/elasticsearch:v6.3.0
    RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3
    

    这将返回:

    Step 2/2 : RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3
     ---> Running in 8d96a792a7e3
    Exception in thread "main" java.lang.IllegalArgumentException: Could not resolve placeholder 'MINIMUM_MASTER_NODES'
        at org.elasticsearch.common.settings.PropertyPlaceholder.parseStringValue(PropertyPlaceholder.java:116)
        at org.elasticsearch.common.settings.PropertyPlaceholder.replacePlaceholders(PropertyPlaceholder.java:69)
        at org.elasticsearch.common.settings.Settings$Builder.replacePropertyPlaceholders(Settings.java:1263)
        at org.elasticsearch.common.settings.Settings$Builder.replacePropertyPlaceholders(Settings.java:1213)
        at org.elasticsearch.node.InternalSettingsPreparer.initializeSettings(InternalSettingsPreparer.java:128)
        at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:107)
        at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:95)
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
        at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:79)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
        at org.elasticsearch.cli.Command.main(Command.java:90)
        at org.elasticsearch.plugins.PluginCli.main(PluginCli.java:48)
    The command '/bin/sh -c /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3' returned a non-zero code: 1
    

    我可以对elasticsearch用户执行sudo并再次运行命令,但它仍然会以相同的问题结束:

    环境似乎缺少以下变量,因为当我用ARG将它们添加到Dockerfile中时,它似乎完成了图像(当然这些值是硬编码的,但只是为了证明这一点):

    MINIMUM_MASTER_NODES
    HTTP_PORT
    NODE_DATA
    NODE_MASTER
    NODE_NAME
    TRANSPORT_PORT
    

    不知道我在这整个故事中遗漏了什么。

    2 回复  |  直到 8 年前
        1
  •  0
  •   Rico    8 年前

    插件安装程序希望这些变量被设置或从配置中读取。这些是Elasticsearch配置中的参数。哪个目录是你的 elasticsearch.yml , jvm.options ,和 log4j2.properties 文件是什么?您可以尝试:

    1. ES_PATH_CONF=/path/to/my/config /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3

    2. export MINIMUM_MASTER_NODES=<value>
      export HTTP_PORT=<value>
      export NODE_DATA=<value>
      export NODE_MASTER=<value>
      export NODE_NAME=<value>
      export TRANSPORT_PORT=<value>
      /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3
      
    3. 使用 ENV 在生成图像时,在Dockerfile中输入关键字。Dockerfile文件:

      FROM gcr.io/google_containers/elasticsearch:v6.3.0
      ENV MINIMUM_MASTER_NODES=<value>
      ENV HTTP_PORT=<value>
      ENV NODE_DATA=<value>
      ENV NODE_MASTER=<value>
      ENV NODE_NAME=<value>
      ENV TRANSPORT_PORT=<value>
      RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3
      
        2
  •  0
  •   Greg Hill    8 年前

    如下所示配置Dockerfile就可以做到这一点。有ARG而不是ENV是很重要的,因为ARG只在构建时使用。在运行时,elasticsearch提供了环境变量,因此我们不必担心这一点。

    FROM gcr.io/google_containers/elasticsearch:v6.3.0
    ARG MINIMUM_MASTER_NODES=${MINIMUM_MASTER_NODES}
    ARG HTTP_PORT=${HTTP_PORT}
    ARG NODE_DATA=${NODE_DATA}
    ARG NODE_MASTER=${NODE_MASTER}
    ARG NODE_NAME=${NODE_NAME}
    ARG TRANSPORT_PORT=${TRANSPORT_PORT}
    RUN su elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3"