2.13. 使用 Operator 在多个可用区部署红帽构建的 Keycloak


使用红帽构建的 Keycloak Operator 作为构建块,部署红帽构建的 Keycloak 以实现高可用性。

本章论述了 OpenShift 的 Keycloak 配置的高级红帽构建,这些配置已测试,并将恢复可用性区域失败。

这些说明 适用于单集群部署 一章中介绍的设置。将其与构建块 单集群部署一章中介绍的其他构建块 一起使用。

2.13.1. 先决条件

  • 在多个可用区部署的 OpenShift 集群,为每个配置了一个 worker-pool。
  • 了解使用 红帽构建的 Keycloak Operator 进行红帽构建的 Keycloak 部署的基本红帽构建。
  • 使用在 多个可用区中的 Deploying AWS Aurora 部署的 AWS Aurora 数据库。

2.13.2. 流程

  1. 确定使用 概念调整 CPU 和内存资源章节的部署大小。
  2. 按照 Red Hat build of Keycloak Operator 安装中的内容 安装 Red Hat build of Keycloak Operator。
  3. 请注意,以下配置文件包含与 多个可用区部署 AWS Aurora 中连接到 Aurora数据库相关的选项
  4. 构建自定义红帽构建的 Keycloak 镜像,准备与 Amazon Aurora PostgreSQL 数据库一起使用。
  5. 使用在第一步中计算的资源请求和限值,使用以下值部署红帽 Keycloak CR:

    apiVersion: k8s.keycloak.org/v2alpha1
    kind: Keycloak
    metadata:
      labels:
        app: keycloak
      name: keycloak
      namespace: keycloak
    spec:
      hostname:
        hostname: <KEYCLOAK_URL_HERE>
      resources:
        requests:
          cpu: "2"
          memory: "1250M"
        limits:
          cpu: "6"
          memory: "2250M"
      db:
        vendor: postgres
        url: jdbc:aws-wrapper:postgresql://<AWS_AURORA_URL_HERE>:5432/keycloak
        poolMinSize: 30 
    1
    
        poolInitialSize: 30
        poolMaxSize: 30
        usernameSecret:
          name: keycloak-db-secret
          key: username
        passwordSecret:
          name: keycloak-db-secret
          key: password
      image: <KEYCLOAK_IMAGE_HERE> 
    2
    
      startOptimized: false 
    3
    
      additionalOptions:
        - name: log-console-output
          value: json
        - name: metrics-enabled 
    4
    
          value: 'true'
        - name: event-metrics-user-enabled
          value: 'true'
        - name: db-driver
          value: software.amazon.jdbc.Driver
      http:
        tlsSecret: keycloak-tls-secret
      instances: 3
    Copy to Clipboard Toggle word wrap
    1
    数据库连接池 initial、max 和 min 大小应当相同,以允许数据库的声明缓存。调整这个数字以满足您的系统需求。由于大多数请求不会因为红帽构建的 Keycloak 嵌入式缓存而影响数据库,因此这个更改可以每秒负责几百个请求。详情请参阅数据库连接池的概念 章节。
    2 3
    指定自定义红帽构建的 Keycloak 镜像的 URL。如果您的镜像经过优化,请将 startOptimized 标志设置为 true
    4
    为了能够在负载下分析系统,启用指标端点。

2.13.3. 验证部署

确认红帽构建的 Keycloak 部署已就绪。

oc wait --for=condition=Ready keycloaks.k8s.keycloak.org/keycloak
oc wait --for=condition=RollingUpdate=False keycloaks.k8s.keycloak.org/keycloak
Copy to Clipboard Toggle word wrap

2.13.4. 可选: Load shedding

要启用负载均衡,请限制排队的请求数。

使用最大排队的 http 请求加载她

spec:
  additionalOptions:
    - name: http-max-queued-requests
      value: "1000"
Copy to Clipboard Toggle word wrap

所有超过的请求都使用 HTTP 503 提供。

您可以考虑进一步限制 http-pool-max-threads 的值,因为在达到请求的 CPU 限制后,OpenShift 会导致 OpenShift 节流。

有关详细信息 ,请参阅有关配置线程池 的概念 一章。

2.13.5. 可选:禁用粘性会话

当在 OpenShift 上运行以及由 Red Hat build of Keycloak Operator 提供的默认 passthrough Ingress 设置时,HAProxy 所做的负载均衡会根据源的 IP 地址使用粘性会话来实现。在运行负载测试时,或者在 HAProxy 前面运行反向代理时,您可能需要禁用此设置以避免在单个红帽构建的 Keycloak Pod 上接收所有请求。

在红帽构建的 Keycloak 自定义资源的 spec 下添加以下补充配置,以禁用粘性会话。

spec:
  ingress:
    enabled: true
    annotations:
      # When running load tests, disable sticky sessions on the OpenShift HAProxy router
      # to avoid receiving all requests on a single Red Hat build of Keycloak Pod.
      haproxy.router.openshift.io/balance: roundrobin
      haproxy.router.openshift.io/disable_cookies: 'true'
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat