You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中自动部署Keycloak 15自定义SPI

Kubernetes 中自动部署 Keycloak 15 自定义 SPI 的方案

以下是三种可行的实现方式,按稳定性优先级排序:

方案一:构建包含 SPI 的自定义 Keycloak 镜像(推荐)

这种方式将 SPI 直接打包进镜像,Pod 重启或全新部署时都会自带 SPI,可靠性最高。

  1. 编写 Dockerfile:
# 指定基础镜像为 Keycloak 15,不要用 latest 避免版本漂移
FROM jboss/keycloak:15
# 将本地的 SPI jar 复制到 Keycloak 的部署目录
COPY common-keycloak-spi-0.1.jar /opt/jboss/keycloak/standalone/deployments/
  1. 构建并推送镜像到你的镜像仓库:
docker build -t your-registry/keycloak-with-spi:15 .
docker push your-registry/keycloak-with-spi:15
  1. 编写 Kubernetes Deployment YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
spec:
  replicas: 1
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
      - name: keycloak
        image: your-registry/keycloak-with-spi:15
        env:
        - name: KEYCLOAK_USER
          value: "admin"
        - name: KEYCLOAK_PASSWORD
          value: "admin"
        ports:
        - containerPort: 8080

方案二:使用 ConfigMap 挂载 SPI 文件

通过 ConfigMap 将 SPI jar 挂载到 Keycloak 部署目录,适合快速测试场景。

  1. 创建包含 SPI 的 ConfigMap:
# 若 jar 体积超过 1MiB,建议改用 Secret(ConfigMap 有大小限制)
kubectl create configmap keycloak-spi --from-file=common-keycloak-spi-0.1.jar
  1. 编写 Deployment YAML 挂载 ConfigMap:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
spec:
  replicas: 1
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
      - name: keycloak
        image: jboss/keycloak:15
        env:
        - name: KEYCLOAK_USER
          value: "admin"
        - name: KEYCLOAK_PASSWORD
          value: "admin"
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: spi-volume
          mountPath: /opt/jboss/keycloak/standalone/deployments/common-keycloak-spi-0.1.jar
          subPath: common-keycloak-spi-0.1.jar
      volumes:
      - name: spi-volume
        configMap:
          name: keycloak-spi

注意:挂载的文件为只读状态,若 SPI 部署时需要生成临时文件(如 .deployed 标记),可能会失败。

方案三:通过 Init 容器拷贝 SPI 到可写卷

解决 ConfigMap 只读的问题,用 Init 容器将 SPI 拷贝到可写卷后再供主容器使用。

  1. 创建包含 SPI 的 ConfigMap:
kubectl create configmap keycloak-spi --from-file=common-keycloak-spi-0.1.jar
  1. 编写 Deployment YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
spec:
  replicas: 1
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      # Init 容器先完成 SPI 文件拷贝
      initContainers:
      - name: copy-spi
        image: busybox:1.35
        command: ['sh', '-c', 'cp /spi/common-keycloak-spi-0.1.jar /deployments/']
        volumeMounts:
        - name: spi-config
          mountPath: /spi
        - name: deployments-volume
          mountPath: /deployments
      containers:
      - name: keycloak
        image: jboss/keycloak:15
        env:
        - name: KEYCLOAK_USER
          value: "admin"
        - name: KEYCLOAK_PASSWORD
          value: "admin"
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: deployments-volume
          mountPath: /opt/jboss/keycloak/standalone/deployments
      volumes:
      - name: spi-config
        configMap:
          name: keycloak-spi
      - name: deployments-volume
        emptyDir: {}

说明:emptyDir 卷为可写状态,Keycloak 可以正常生成部署标记文件,确保 SPI 加载成功。

内容的提问来源于stack exchange,提问作者Vipul Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:30:49