Bitnami Helm部署Keycloak自定义Provider及重载问题求助
方案一:挂载PVC到Keycloak的providers子目录
Bitnami Keycloak默认会加载/opt/bitnami/keycloak/providers目录下的自定义Provider,直接将PVC挂载到该子目录,不会覆盖Keycloak原有文件。修改values.yaml如下:
extraVolumes: - name: keycloak-spi-pv persistentVolumeClaim: claimName: keycloak-spi-pvc extraVolumeMounts: - name: keycloak-spi-pv mountPath: /opt/bitnami/keycloak/providers # 若PVC内有单独的providers目录存放jar包,添加该行避免覆盖整个目录 # subPath: providers
确保PVC中已放入自定义Provider的jar文件,重新部署Helm Chart即可生效。
方案二:修复Init容器配置
若坚持用Init容器复制文件,需修正命令语法错误,且Bitnami镜像自带/opt/bitnami/keycloak/providers目录,无需担心路径不存在问题。修正后的Init容器配置如下:
initContainers: - name: init-spi image: busybox:latest imagePullPolicy: Always command: ["/bin/sh", "-c"] args: ["cp -R /mydir/*.jar /opt/bitnami/keycloak/providers/"] volumeMounts: - name: keycloak-spi-pv mountPath: /mydir securityContext: runAsUser: 1001 runAsGroup: 1001
注意:仅复制jar包到providers目录即可,无需复制整个目录结构。
方法一:滚动重启StatefulSet
Bitnami Chart默认用StatefulSet部署,执行以下命令滚动重启所有Pod,不会丢失数据:
kubectl rollout restart statefulset keycloak -n <你的命名空间>
方法二:发送重启信号到容器主进程
进入运行中的Keycloak容器,发送SIGTERM信号给主进程(PID 1),容器会自动重启:
kubectl exec -it keycloak-0 -n <你的命名空间> -- kill -SIGTERM 1
方法三:使用Keycloak CLI重启
若容器内允许执行命令,可直接调用Keycloak自带命令重启:
kubectl exec -it keycloak-0 -n <你的命名空间> -- /opt/bitnami/keycloak/bin/kc.sh restart
kc.sh start-dev端口错误问题说明 错误日志翻译:
keycloak@keycloak-0:/opt/bitnami/keycloak$ kc.sh start-dev
正在向JAVA_OPTS追加额外的Java属性: -Djgroups.dns.query=keycloak-headless.keycloak.svc.cluster.local
正在更新配置并安装自定义Provider(如果有的话)。请稍等。
2024-08-09 01:25:40,317 WARN [org.keycloak.services] (build-16) KC-SERVICES0047: metrics(org.jboss.aerogear.keycloak.metrics.MetricsEndpointFactory)正在实现内部SPI realm-restapi-extension。该SPI为内部组件,可能会无通知变更
2024-08-09 01:25:41,064 WARN [org.keycloak.services] (build-16) KC-SERVICES0047: metrics-listener(org.jboss.aerogear.keycloak.metrics.MetricsEventListenerFactory)正在实现内部SPI eventsListener。该SPI为内部组件,可能会无通知变更2024-08-09 01:26:04,994 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) 错误: 无法以(开发)模式启动服务器
2024-08-09 01:26:04,994 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) 错误: 无法启动缓存
2024-08-09 01:26:04,995 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) 错误: org.infinispan.manager.EmbeddedCacheManagerStartupException: 无法启动JGroups通道
2024-08-09 01:26:04,995 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) 错误: 无法启动JGroups通道
2024-08-09 01:26:04,996 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) 错误: 无法启动JGroups通道
2024-08-09 01:26:04,997 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) 错误: 在端口范围[7800 .. 7800]内无可用端口绑定
2024-08-09 01:26:04,998 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) 如需更多详情,请添加'--verbose'参数重新运行命令。
也可以使用'--help'查看特定命令的使用细节。
解决方式:
该错误是因为容器内7800端口已被运行中的Keycloak主进程占用,start-dev模式尝试绑定同一端口导致冲突。
- 不要在已运行的Keycloak Pod内执行
start-dev,如需开发测试,单独部署开发环境Pod。 - 若必须在现有容器内测试,先停止当前Keycloak进程,再指定新端口启动:
kubectl exec -it keycloak-0 -n <你的命名空间> -- kill 1 # 进程停止后执行 kubectl exec -it keycloak-0 -n <你的命名空间> -- /opt/bitnami/keycloak/bin/kc.sh start-dev --http-port 8081
内容的提问来源于stack exchange,提问作者chomin

