Kubernetes Solr Operator中安装jts-core到指定目录的解决方案咨询
可行解决方案
以下3种方案均可实现需求,可根据实际部署场景选择:
方案1:共享卷+Solr额外类路径配置(无需修改镜像、无需root权限)
无需硬写SOLR_INSTALL/server/solr-webapp/webapp/WEB-INF/lib/目录,利用Solr原生支持的自定义类加载路径实现,完全避开权限问题:
- 定义1个
emptyDir类型的共享卷,供initContainer和Solr主容器共享 - initContainer直接将
jts-corejar包下载到共享卷中,无需root权限 - 给Solr主容器添加环境变量
SOLR_OPTS=-Dsolr.sharedLib=/data/extra-libs,指定Solr启动时加载共享卷目录下的所有jar包
SolrCloud CRD配置示例:
podOptions: volumes: - name: extra-libs emptyDir: {} initContainers: - name: "install-jts-core" image: solr:8.9.0 command: ['sh', '-c', 'wget -O /data/extra-libs/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'] volumeMounts: - name: extra-libs mountPath: /data/extra-libs solrOpts: "-Dsolr.sharedLib=/data/extra-libs" volumeMounts: - name: extra-libs mountPath: /data/extra-libs
方案2:构建自定义Solr镜像(生产环境首选,稳定性最高)
直接在镜像构建阶段把jts-core包打入目标路径,部署时无需额外配置:
- 编写Dockerfile:
FROM solr:8.9.0 # 临时切换到root用户下载jar包 USER root RUN wget -O /opt/solr/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 \ && chown solr:solr /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/jts-core-1.15.1.jar # 切回solr用户,保证运行时权限符合要求 USER solr
- 构建镜像并推送到私有镜像仓库,部署SolrCloud时直接使用自定义的镜像即可。
方案3:升级Solr Operator版本适配securityContext配置
你遇到的initContainer securityContext不生效的问题,是低版本Solr Operator的已知缺陷,升级到Solr Operator 0.6.0及以上版本后,即可正常识别initContainer下的securityContext配置,直接用你原有配置即可生效。
内容的提问来源于stack exchange,提问作者Fernando Aspiazu
相关产品推荐
相关产品推荐

