第 6 章 自定义资源 API 参考


6.1. 常见配置属性

通用配置属性适用于多个资源。

6.1.1. replicas

使用 replicas 属性配置副本。

复制的类型取决于资源。

  • KafkaTopic 使用复制因素配置 Kafka 集群中每个分区的副本数。
  • Kafka 组件使用副本在部署中配置 pod 数量,以提供更好的可用性和可伸缩性。
注意

在 OpenShift 中运行 Kafka 组件时,可能需要运行多个副本才能实现高可用性。当部署组件的节点崩溃时,OpenShift 会自动将 Kafka 组件 pod 重新调度到其他节点。但是,运行多个副本的 Kafka 组件可以提供更快的故障转移时间,因为其他节点将启动并运行。

6.1.2. bootstrapServers

使用 bootstrapServers 属性配置 bootstrap 服务器列表。

bootstrap 服务器列表可以引用没有在同一 OpenShift 集群中部署的 Kafka 集群。它们也可以引用不是由 AMQ Streams 部署的 Kafka 集群。

如果在同一 OpenShift 集群中,每个列表都必须包含 Kafka 集群 bootstrap 服务,该服务名为 CLUSTER-NAME-kafka-bootstrap 和端口号。如果由 AMQ Streams 部署但在不同的 OpenShift 集群上,列表内容取决于用于公开集群的方法(routes、ingress、nodeports 或 loadbalancers)。

在将 Kafka 与不是由 AMQ Streams 管理的 Kafka 集群时,您可以根据给定集群的配置指定 bootstrap 服务器列表。

6.1.3. ssl

您可以纳入 SSL 配置和密码套件规格,以进一步保护客户端应用程序和 Kafka 集群之间的基于 TLS 的通信。除了标准 TLS 配置外,您还可以指定受支持的 TLS 版本,并在 Kafka 代理配置中启用密码套件。如果要限制它们使用的 TLS 版本和密码套件,您还可以将配置添加到客户端。客户端上的配置必须只使用代理上启用的协议和密码套件。

密码套件是一组用于安全连接和数据传输的安全机制。例如,密码套件 TLS_AES_256_GCM_SHA384 由以下机制组成,它们与 TLS 协议结合使用:

  • AES (高级加密标准)加密(256 位密钥)
  • GCM (Galois/Counter Mode)经过身份验证的加密
  • SHA384 (安全哈希算法)数据完整性保护

组合封装在 TLS_AES_256_GCM_SHA384 密码套件规格中。

ssl.enabled.protocols 属性指定可用于集群及其客户端之间安全通信的可用 TLS 版本。ssl.protocol 属性为所有连接设置默认 TLS 版本,且必须从启用的协议中选择它。使用 ssl.endpoint.identification.algorithm 属性启用或禁用主机名验证。

SSL 配置示例

# ...
config:
  ssl.cipher.suites: TLS_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 
1

  ssl.enabled.protocols: TLSv1.3, TLSv1.2 
2

  ssl.protocol: TLSv1.3 
3

  ssl.endpoint.identification.algorithm: HTTPS 
4

# ...

1
启用密码套件规格。
2
支持 TLS 版本。
3
默认 TLS 版本为 TLSv1.3。如果客户端只支持 TLSv1.2,它仍然可以连接到代理并使用这个支持的版本进行通信,如果配置位于客户端,且代理只支持 TLSv1.2。
4
通过设置为 HTTPS 来启用主机名验证。空字符串禁用验证。

6.1.4. trustedCertificates

在设置 tls 来配置 TLS 加密后,使用 trustedCertificates 属性提供带有证书以 X.509 格式存储的密钥名称的 secret 列表。

您可以使用 Cluster Operator 为 Kafka 集群创建的 secret,也可以创建自己的 TLS 证书文件,然后从文件创建一个 Secret

oc create secret generic MY-SECRET \
--from-file=MY-TLS-CERTIFICATE-FILE.crt

TLS 加密配置示例

tls:
  trustedCertificates:
    - secretName: my-cluster-cluster-cert
      certificate: ca.crt
    - secretName: my-cluster-cluster-cert
      certificate: ca2.crt

如果证书存储在同一 secret 中,它可以多次列出。

如果要启用 TLS 加密,但使用 Java 附带的默认公共证书颁发机构集合,您可以将 trustedCertificates 指定为空数组:

使用默认 Java 证书启用 TLS 的示例

tls:
  trustedCertificates: []

有关配置 mTLS 身份验证的详情,请参考 KafkaClientAuthenticationTls 模式参考

6.1.5. 资源

配置 资源的 requestslimits,以控制 AMQ Streams 容器的资源。您可以为 内存和 cpu 资源指定请求和限值。请求应该足以确保 Kafka 的稳定性能。

在生产环境中如何配置资源取决于多个因素。例如,应用程序可能会共享 OpenShift 集群中的资源。

对于 Kafka,部署的以下方面可能会影响您需要的资源:

  • 信息吞吐量和大小
  • 处理消息的网络线程数量
  • 生产者和消费者的数量
  • 主题和分区的数量

为资源请求指定的值会被保留,始终供容器使用。资源限值指定给定容器可以消耗的最大资源。请求和限制之间的数量不会被保留,可能并不总是可用。容器只能在有限制时才使用资源。资源限值是临时的,可以重新分配。

资源请求和限值

Boundaries of a resource requests and limits

如果您在设置限制时没有设置请求,或反之,OpenShift 会将相同的值用于限制和请求。为资源设置相等的请求和限值可确保服务质量,因为 OpenShift 将不会终止容器,除非容器超过其限值。

您可以为一个或多个支持的资源配置资源请求和限值。

资源配置示例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    #...
    resources:
      requests:
        memory: 64Gi
        cpu: "8"
      limits:
        memory: 64Gi
        cpu: "12"
  entityOperator:
    #...
    topicOperator:
      #...
      resources:
        requests:
          memory: 512Mi
          cpu: "1"
        limits:
          memory: 512Mi
          cpu: "1"

Topic Operator 和 User Operator 的资源请求和限值在 Kafka 资源中设置。

如果资源请求超过 OpenShift 集群中的可用可用资源,则不会调度该 Pod。

注意

AMQ Streams 使用 OpenShift 语法来指定 内存cpu 资源。有关在 OpenShift 中管理计算资源的更多信息,请参阅管理容器计算资源

内存资源

在配置内存资源时,请考虑组件的总要求。

Kafka 在 JVM 中运行,并使用操作系统页面缓存在写入磁盘前存储消息数据。Kafka 的内存请求应该适合 JVM 堆和页面缓存。您可以配置 jvmOptions 属性 来控制最小和最大堆大小。

其他组件不依赖于页面缓存。您可以在不配置 jvmOptions 的情况下,控制堆大小的情况下配置内存资源。

内存请求和限值以 MB、GB、兆字节和千兆字节为单位指定。在规格中使用以下后缀:

  • M 表示 MB
  • G 表示千兆字节
  • Mi 代表兆字节
  • gibibytes Gi

使用不同内存单元的资源示例

# ...
resources:
  requests:
    memory: 512Mi
  limits:
    memory: 2Gi
# ...

有关内存规格和其他支持单元的详情,请参阅内存

CPU 资源

应该有足够的 CPU 请求,随时提供可靠的性能。CPU 请求和限值指定为 coresmillicpus/millicores

CPU 内核被指定为整数(5 个 CPU 内核)或十进制(2.5 个 CPU 内核)。1000 millicores1 个 CPU 内核相同。

CPU 单元示例

# ...
resources:
  requests:
    cpu: 500m
  limits:
    cpu: 2.5
# ...

1 个 CPU 内核的计算能力可能会因部署 OpenShift 的平台而异。

有关 CPU 规格的更多信息,请参阅 CPU 机制

6.1.6. image

使用 image 属性配置组件使用的容器镜像。

只有在需要使用其他容器 registry 或自定义镜像时,才建议在特殊情况下覆盖容器镜像。

例如,如果您的网络不允许访问 AMQ Streams 使用的容器存储库,您可以复制 AMQ Streams 镜像或从源进行构建。但是,如果配置的镜像与 AMQ Streams 镜像不兼容,它可能无法正常工作。

容器镜像的副本也可能会被自定义并用于调试。

您可以使用以下资源中的 image 属性指定要用于组件的容器镜像:

  • Kafka.spec.kafka
  • Kafka.spec.zookeeper
  • Kafka.spec.entityOperator.topicOperator
  • Kafka.spec.entityOperator.userOperator
  • Kafka.spec.entityOperator.tlsSidecar
  • KafkaConnect.spec
  • KafkaMirrorMaker.spec
  • KafkaMirrorMaker2.spec
  • KafkaBridge.spec

为 Kafka、Kafka Connect 和 Kafka MirrorMaker 配置 image 属性

Kafka、Kafka Connect 和 Kafka MirrorMaker 支持多个 Kafka 版本。每个组件都需要自己的镜像。不同 Kafka 版本的默认镜像在以下环境变量中配置:

  • STRIMZI_KAFKA_IMAGES
  • STRIMZI_KAFKA_CONNECT_IMAGES
  • STRIMZI_KAFKA_MIRROR_MAKER_IMAGES

这些环境变量包含 Kafka 版本及其对应镜像之间的映射。映射 与镜像 和版本 属性一同使用:

  • 如果自定义资源中未给出 imageversion,则版本将默认为 Cluster Operator 的默认 Kafka 版本,且镜像将是环境变量中与此版本对应的镜像。
  • 如果给定 镜像 但没有 版本,则使用给定镜像,版本 被假定为 Cluster Operator 的默认 Kafka 版本。
  • 如果给出 version,但没有提供 image,则使用与环境变量中给定版本对应的镜像。
  • 如果同时提供了 versionimage,则使用给定的镜像。假定镜像包含具有给定版本的 Kafka 镜像。

不同组件的 imageversion 可在以下属性中配置:

  • 对于 spec.kafka.imagespec.kafka.version 中的 Kafka。
  • 对于 spec.imagespec.version 中的 Kafka Connect 和 Kafka MirrorMaker。
警告

建议您仅提供 version,并不指定 image 属性。这可减少配置自定义资源时出错的几率。如果您需要更改用于不同 Kafka 版本的镜像,最好配置 Cluster Operator 的环境变量。

在其他资源中配置 image 属性

对于其他自定义资源中的 image 属性,部署过程中将使用给定的值。如果缺少 image 属性,则会使用 Cluster Operator 配置中指定 的镜像。如果 Cluster Operator 配置中没有定义镜像名称,则使用默认值。

  • 对于主题 Operator:

    1. STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.4.0 container image.
  • 对于 User Operator:

    1. STRIMZI_DEFAULT_USER_OPERATOR_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.4.0 container image.
  • 对于 Entity Operator TLS sidecar:

    1. STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq-streams/kafka-34-rhel8:2.4.0 container image.
  • 对于 Kafka Exporter:

    1. 在 Cluster Operator 配置中的 STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq-streams/kafka-34-rhel8:2.4.0 container image.
  • 对于 Kafka Bridge:

    1. 在 Cluster Operator 配置中的 STRIMZI_DEFAULT_KAFKA_BRIDGE_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq-streams/bridge-rhel8:2.4.0 container image.
  • 对于 Kafka 代理初始化器:

    1. 在 Cluster Operator 配置中的 STRIMZI_DEFAULT_KAFKA_INIT_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.4.0 container image.

容器镜像配置示例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    image: my-org/my-image:latest
    # ...
  zookeeper:
    # ...

6.1.7. livenessProbe 和 readinessProbe 状况检查

使用 livenessProbereadinessProbe 属性配置 AMQ Streams 中支持的健康检查探测。

健康检查是定期测试,用于验证应用程序的健康状态。当 Healthcheck 探测失败时,OpenShift 会假定应用程序不是健康的,并尝试修复它。

有关探测的详情,请参阅配置存活度和就绪度探测

livenessProbereadinessProbe 支持以下选项:

  • initialDelaySeconds
  • timeoutSeconds
  • periodSeconds
  • successThreshold
  • failureThreshold

存活度和就绪度探测配置示例

# ...
readinessProbe:
  initialDelaySeconds: 15
  timeoutSeconds: 5
livenessProbe:
  initialDelaySeconds: 15
  timeoutSeconds: 5
# ...

有关 livenessProbereadinessProbe 选项的更多信息,请参阅 探测模式参考

6.1.8. metricsConfig

使用 metricsConfig 属性启用和配置 Prometheus 指标。

metricsConfig 属性包含对 ConfigMap 的引用,该 ConfigMap 具有 Prometheus JMX Exporter 的额外配置。AMQ Streams 支持使用 Prometheus JMX exporter 的 Prometheus 指标将 Apache Kafka 和 ZooKeeper 支持的 JMX 指标转换为 Prometheus 指标。

要在不进一步配置的情况下启用 Prometheus metrics 导出,您可以在 metricsConfig.valueFrom.configMapKeyRef.key 下引用包含空文件的 ConfigMap。当引用空文件时,所有指标都会公开,只要它们尚未重命名。

带有 Kafka 指标配置的 ConfigMap 示例

kind: ConfigMap
apiVersion: v1
metadata:
  name: my-configmap
data:
  my-key: |
    lowercaseOutputName: true
    rules:
    # Special cases and very specific rules
    - pattern: kafka.server<type=(.+), name=(.+), clientId=(.+), topic=(.+), partition=(.*)><>Value
      name: kafka_server_$1_$2
      type: GAUGE
      labels:
       clientId: "$3"
       topic: "$4"
       partition: "$5"
    # further configuration

Kafka 的指标配置示例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    metricsConfig:
      type: jmxPrometheusExporter
      valueFrom:
        configMapKeyRef:
          name: my-config-map
          key: my-key
    # ...
  zookeeper:
    # ...

启用指标后,它们会在端口 9404 上公开。

当资源中没有定义 metricsConfig (或已弃用的 metrics)属性时,Prometheus 指标会被禁用。

有关设置和部署 Prometheus 和 Grafana 的更多信息,请参阅在 OpenShift 中 部署和升级 AMQ Streams 指南中的将指标引入到 Kafka

6.1.9. jvmOptions

以下 AMQ Streams 组件在 Java 虚拟机(JVM)内运行:

  • Apache Kafka
  • Apache ZooKeeper
  • Apache Kafka Connect
  • Apache Kafka MirrorMaker
  • AMQ Streams Kafka Bridge

要在不同的平台和构架中优化其性能,您可以在以下资源中配置 jvmOptions 属性:

  • Kafka.spec.kafka
  • Kafka.spec.zookeeper
  • Kafka.spec.entityOperator.userOperator
  • Kafka.spec.entityOperator.topicOperator
  • Kafka.spec.cruiseControl
  • KafkaConnect.spec
  • KafkaMirrorMaker.spec
  • KafkaMirrorMaker2.spec
  • KafkaBridge.spec

您可以在配置中指定以下选项:

-Xms
JVM 启动时的最小初始分配堆大小
-Xmx
最大堆大小
-XX
JVM 的高级运行时选项
javaSystemProperties
其他系统属性
gcLoggingEnabled
启用垃圾收集器日志记录
注意

JVM 设置接受的单元(如 -Xmx-Xms )是相应镜像中 JDK java 二进制文件接受的相同单元。因此,1g1G 表示 1,073,741,824 字节,Gi 不是有效的单元后缀。这与用于 内存请求和限值 的单元不同,它遵循 OpenShift 约定 1G 表示 1,000,000,000 个字节,1Gi 表示 1,073,741,824 字节。

-Xms-Xmx 选项

除了为容器设置内存请求和限制值外,您还可以使用 -Xms-Xmx JVM 选项为您的 JVM 设置特定的堆大小。使用 -Xms 选项设置初始堆大小,并使用 -Xmx 选项来设置最大堆大小。

指定堆大小,以便对分配给 JVM 的内存进行更多控制。堆大小应尽可能利用容器 的内存限值(和请求), 而不超过它。堆大小和其他任何内存要求需要在指定的内存限值内容纳。如果您没有在配置中指定堆大小,但您配置内存限制(和请求),Cluster Operator 会自动实施默认堆大小。Cluster Operator 根据内存资源配置百分比设置默认的最大值和最小堆值。

下表显示了默认的堆值。

Expand
表 6.1. 组件的默认堆设置
组件分配给堆的可用内存百分比最大限制

Kafka

50%

5 GB

ZooKeeper

75%

2 GB

Kafka Connect

75%

None

MirrorMaker 2

75%

None

MirrorMaker

75%

None

Sything Control

75%

None

Kafka Bridge

50%

31 Gi

如果没有指定内存限制(和请求),则 JVM 的最小堆大小设置为 128M。JVM 的最大堆大小未定义,以允许根据需要增大内存。这是用于测试和开发中的单一节点环境的理想选择。

设置适当的内存请求可能会阻止以下内容:

  • 如果节点上运行的其他 pod 面临内存压力,OpenShift 会终止容器。
  • OpenShift 将容器调度到内存不足的节点。如果将 -Xms 设置为 -Xmx,则容器会立即崩溃;如果没有,容器将稍后崩溃。

在本例中,JVM 将 2 GiB (=2,147,483,648 字节)用于其堆。JVM 内存用量总量可以超过最大堆大小。

示例 -Xmx-Xms 配置

# ...
jvmOptions:
  "-Xmx": "2g"
  "-Xms": "2g"
# ...

为 initial (-Xms)和最大(-Xmx)堆大小设置相同的值可以避免在启动时必须分配内存,而可能分配比真正需要的堆更多的成本。

重要

执行大量磁盘 I/O (如 Kafka 代理容器)的容器需要可用内存用作操作系统页面缓存。对于此类容器,请求的内存应比 JVM 使用的内存要高得多。

-XX 选项

-XX 选项用于配置 Apache Kafka 的 KAFKA_JVM_PERFORMANCE_OPTS 选项。

示例 -XX 配置示例

jvmOptions:
  "-XX":
    "UseG1GC": true
    "MaxGCPauseMillis": 20
    "InitiatingHeapOccupancyPercent": 35
    "ExplicitGCInvokesConcurrent": true

-XX 配置生成的 JVM 选项

-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:-UseParNewGC

注意

如果没有指定 -XX 选项,则使用默认的 Apache Kafka 配置 KAFKA_JVM_PERFORMANCE_OPTS

javaSystemProperties

javaSystemProperties 用于配置其他 Java 系统属性,如调试实用程序。

javaSystemProperties 配置示例

jvmOptions:
  javaSystemProperties:
    - name: javax.net.debug
      value: ssl

有关 jvmOptions 的更多信息,请参阅 JvmOptions 模式参考

6.1.10. 垃圾收集器日志记录

jvmOptions 属性还允许您启用和禁用垃圾收集器(GC)日志记录。默认情况下禁用 GC 日志记录。要启用它,请按如下所示设置 gcLoggingEnabled 属性:

GC 日志记录配置示例

# ...
jvmOptions:
  gcLoggingEnabled: true
# ...

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部