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 容器的其他文件或库。
让我知道您对这个解决方法有何看法
谢谢。
有没有办法 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 容器的其他文件或库。
让我知道您对这个解决方法有何看法
谢谢。