Kubernetes Solr operator JTS 和 Polygons jar 文件

Kubernetes Solr operator JTS and Polygons jar file

有没有办法 install/download 文件夹 SOLR_INSTALL/server/solr-webapp/webapp/WEB-INF/lib/ 中的库 jts-core?如官方指南中所述:https://solr.apache.org/guide/8_10/spatial-search.html#jts-and-polygons-flat

实际上,我试图在中间放置一个下载此类 jar 的 initContainer,但显然我从 Solr 容器中得到了一个 Permission denied,因为只有 root 可以在最终的 solr 容器上写入。

我也尝试只为我的 initContainer 设置一个 securityContext,以便 运行 作为 root,但是该配置在 initContainer 中没有效果,我认为它没有被Solr CRD看到。

podOptions:
  initContainers:
  - name: "install-jts-core"
    image: solr:8.9.0
    command: ['sh', '-c', 'wget -O /opt/solr-8.9.0/server/solr-webapp/webapp/WEB-INF/lib/jts-core-1.15.1.jar https://repo1.maven.org/maven2/org/locationtech/jts/jts-core/1.15.1/jts-core-1.15.1.jar']
    securityContext:   <--- this has no effect on SolrCloud CRD
      runAsUser: 0

另一个分散的尝试是设置一个 podSecurityContext.runAsUser: 0,所以对于 pod 中的所有容器,但 Solr 没有 运行 和 root,我顺便放弃了那个选项。

有hint/idea/solution吗?

非常感谢您。

在这种情况下,它与权限或CRD无关;由于命名空间隔离,install-jts-core 下载的文件将无法用于其他容器。

您可以创建一个 Dockerfile,使用 solr 作为基础镜像,COPY 将 jar 添加到镜像中。然后在 helm 安装过程中替换 image.repository solr helm 参数。这样你就可以 运行 一个预装了库的图像。

我最近发现了一个可能不太优雅,但在任何版本的Solr镜像中都适用的解决方案,下面是一个配置示例:

podOptions:
  initContainers:
  - name: "install-jts-lib"
    image: solr:8.9.0
    command:
    - 'sh'
    - '-c'
    - |
      wget -O /tmp-webinf-lib/jts-core-1.15.1.jar https://repo1.maven.org/maven2/org/locationtech/jts/jts-core/1.15.1/jts-core-1.15.1.jar
      cp -R /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/* /tmp-webinf-lib
    volumeMounts:
    - mountPath: /tmp-webinf-lib
      name: web-inf-lib
  volumes:
  - name: web-inf-lib
    source:
      emptyDir: {}
    defaultContainerMount:
      name: web-inf-lib
      mountPath: /opt/solr/server/solr-webapp/webapp/WEB-INF/lib

在此示例中,我创建了一个 emptyDir 卷并将其附加到 initContainer 的任何目录中,但在最终的 Solr 容器中,我将其附加到 target directory ($SOLR_HOME/server/solr-webapp/webapp/WEB-INF/lib)

这将清空 ../WEB-INF/lib 目录,但由于我使用 相同的 Solr 图像 ,我可以复制 ../WEB-INF/lib 的内容(罐子和文件夹)的 initContainer 最后。

效果是最终容器将包含它应该包含的所有内容加上 jts-core-1.15.1.jar jar。

这也适用于您想要引入 Solr 容器的其他文件或库。

让我知道您对这个解决方法有何看法

谢谢。