搜索

第 13 章 自定义资源 API 参考

download PDF

13.1. 常见配置属性

常见配置属性应用到多个资源。

13.1.1. replicas

使用 replicas 属性来配置副本。

复制的类型取决于资源。

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

在 OpenShift 上运行 Kafka 组件时,可能不需要运行多个副本来获取高可用性。当部署组件的节点崩溃时,OpenShift 将自动将 Kafka 组件容器集重新调度到其他节点。但是,运行带有多个副本的 Kafka 组件可能会提供更快的故障转移时间,因为其他节点将会启动并运行。

13.1.2. bootstrapServers

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

bootstrap 服务器列表可以引用未在同一 OpenShift 集群中部署的 Kafka 集群。它们还可以引用 AMQ Streams 未部署的 Kafka 集群。

如果在同一 OpenShift 集群中,每个列表必须理想包含名为 CLUSTER-NAME -kafka-bootstrap 和端口号的 Kafka 集群 bootstrap 服务。如果由 AMQ Streams 部署,但在不同的 OpenShift 集群上,列表内容取决于用于公开集群的方法(路由、入口、节点端口或负载均衡器)。

当在由 AMQ Streams 管理的 Kafka 集群中使用 Kafka 时,您可以根据给定集群的配置指定 bootstrap 服务器列表。

13.1.3. ssl

使用三个允许的 ssl 配置选项,将特定的 密码套件 用于 TLS 版本。密码套件组合了用于安全连接和数据传输的算法。

您还可以配置 ssl.endpoint.identification.algorithm 属性来 启用或禁用主机名验证。

SSL 配置示例

# ...
spec:
  config:
    ssl.cipher.suites: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" 1
    ssl.enabled.protocols: "TLSv1.2" 2
    ssl.protocol: "TLSv1.2" 3
    ssl.endpoint.identification.algorithm: HTTPS 4
# ...

1
用于 TLS 的加密套件使用 ECDHE 密钥交换机制、RSA 身份验证算法、AES 批量机密算法和 SHA384 MAC 算法的组合。
2
启用 SSl 协议 TLSv1.2
3
指定用于生成 SSL 上下文的 TLSv1.2 协议。允许的值有 TLSv1.1TLSv1.2
4
通过将 设置为 HTTPS 来启用主机名验证。空字符串将禁用验证。

13.1.4. trustedCertificates

通过 set tls 配置 TLS 加密,请使用 trustedCertificates 属性提供带有密钥名称的 secret 列表,并在其中以 X.509 格式存储证书。

您可以使用 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: []

有关配置 TLS 客户端身份验证的详情,请参考 KafkaClientAuthenticationTls schema 参考

13.1.5. 资源

您可以为组件请求 CPU 和内存资源。limits 指定给定容器可以消耗的最大资源。

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

使用 reources.requestsresources.limits 属性来配置资源请求和限值。

对于每个部署的容器,AMQ Streams 允许您请求特定资源并定义这些资源的最大消耗。

AMQ Streams 支持以下资源类型的请求和限值:

  • cpu
  • 内存

AMQ Streams 使用 OpenShift 语法来指定这些资源。

有关在 OpenShift 中管理计算资源的更多信息,请参阅为容器管理计算资源

资源请求

请求指定要为给定容器保留的资源。保留资源可确保资源始终可用。

重要

如果资源请求针对的是 OpenShift 集群中可用的可用资源,则不会调度该容器集。

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

资源请求配置示例

# ...
resources:
  requests:
    cpu: 12
    memory: 64Gi
# ...

资源限值

limits 指定给定容器可以消耗的最大资源。限制不是保留的,可能并不总是可用。容器只能在资源可用时才使用资源限制。资源限制应始终大于资源请求。

资源可以被配置为一个或多个支持的限制。

资源限制配置示例

# ...
resources:
  limits:
    cpu: 12
    memory: 64Gi
# ...

支持的 CPU 格式

支持 CPU 请求和限制,其格式如下:

  • CPU 内核数作为整数(5 个 CPU 内核)或十进制(2.5 个 CPU 内核)。
  • 数字或 millicpus / millicores( 100m),其中 1000 millicores 相同 1 个 CPU 内核。

CPU 单元示例

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

注意

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

有关 CPU 规格的更多信息,请参阅 CPU 含义

支持的内存格式

内存请求和限值以兆字节、千兆字节、兆字节和千兆字节为单位指定。

  • 要指定内存(以 MB 为单位),请使用 M 后缀。例如 1000M
  • 要指定以 GB 为单位的内存,请使用 G 后缀。例如 1G
  • 要以兆字节为单位指定内存,请使用 Mi 后缀。例如 1000Mi
  • 要以千兆字节为单位指定内存,请使用 Gi 后缀。例如 1Gi

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

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

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

13.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
  • KafkaConnectS2I.spec
  • KafkaMirrorMaker.spec
  • KafkaMirrorMaker2.spec
  • KafkaBridge.spec

为 Kafka、Kafka Connect 和 Kafka MirrorMaker 配置 镜像 属性

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

  • STRIMZI_KAFKA_IMAGES
  • STRIMZI_KAFKA_CONNECT_IMAGES
  • STRIMZI_KAFKA_CONNECT_S2I_IMAGES
  • STRIMZI_KAFKA_MIRROR_MAKER_IMAGES

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

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

可以在以下属性中配置不同组件 的镜像版本

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

建议仅提供 版本,不指定 镜像 属性。这降低了配置自定义资源时出错的机会。如果需要更改用于不同 Kafka 版本的镜像,最好配置 Cluster Operator 的环境变量。

在其他资源中配置 image 属性

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

  • 对于主题 Operator:

    1. 在 Cluster Operator 配置中的 STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq7/amq-streams-rhel7-operator:1.8.0 container image.
  • 对于 User Operator:

    1. 在 Cluster Operator 配置中的 STRIMZI_DEFAULT_USER_OPERATOR_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq7/amq-streams-rhel7-operator:1.8.0 container image.
  • 对于实体 Operator TLS sidecar:

    1. 在 Cluster Operator 配置中的 STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq7/amq-streams-kafka-28-rhel7:1.8.0 container image.
  • 对于 Kafka Exporter:

    1. 在 Cluster Operator 配置中的 STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE 环境变量中指定的容器镜像。
    2. registry.redhat.io/amq7/amq-streams-kafka-28-rhel7:1.8.0 container image.
  • 对于 Kafka 网桥:

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

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

容器镜像配置示例

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

13.1.7. livenessProbereadinessProbe 健康检查

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

健康检查是定期测试,可验证应用的健康状况。当健康检查探测失败时,OpenShift 假定应用不健康,并尝试修复它。

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

Live nessProbereadinessProbe 均支持以下选项:

  • initialDelaySeconds
  • timeoutSeconds
  • periodSeconds
  • successThreshold
  • failureThreshold

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

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

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

13.1.8. metricsConfig

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

metricsConfig 属性包含对 ConfigMap 的引用,其中包含 Prometheus JMX 导出器的额外配置。AMQ Streams 支持使用 Prometheus JMX 导出器的 Prometheus 指标将 Apache Kafka 和 ZooKeeper 支持的 JMX 指标转换为 Prometheus 指标。

要在不进一步配置的情况下启用 Prometheus 指标导出,您可以在 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(或已弃用的指标 )属性时,Prometheus 指标会被禁用。

有关设置和部署 Prometheus 和 Grafana 的更多信息,请参阅 OpenShift 指南中的 Deploying 和 升级 AMQ Streams 中的 介绍 Metrics 到 Kafka

13.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
  • KafkaConnect.spec
  • KafkaConnectS2I.spec
  • KafkaMirrorMaker.spec
  • KafkaMirrorMaker2.spec
  • KafkaBridge.spec

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

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

jvmOptions 的完整架构包括在 JvmOptions 架构引用 中。

注意

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 的最小内存将设置为 128M。JVM 的最大内存未定义为允许内存根据需要增加。这是测试和开发环境中单节点环境的理想选择。

在设置 -Xmx 明确考虑以下内容前:

  • JVM 的总内存使用量大约为最大堆的 4 ¹,如 -Xmx 配置。
  • 如果在未设置适当的 OpenShift 内存限值的情况下设置 -Xmx,如果 OpenShift 节点遇到运行的其他 Pod 的内存压力,则可能会被终止。
  • 如果设置 -Xmx 时不设置适当的 OpenShift 内存请求,则容器可能会调度到内存不足的节点。在这种情况下,容器不会立即启动,但如果 -Xms 设为 -Xm x,则不会立即崩溃,否则稍后将不立即崩溃。

建议您

  • 将内存请求和内存限值设置为相同的值
  • 使用至少 4.5 的值请求 -Xmx
  • 考虑将 -Xms 设置为与 -Xmx相同的值

在本例中,JVM 将 2 GiB(=2,147,483,648 字节)用于其堆。其总内存用量大约为 8GiB。

示例 -Xmx-Xms 配置

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

为初始(-Xms)和最大(-Xmx)堆大小设置相同的值可避免 JVM 启动后分配内存,其代价可能是分配超过真正需要的堆数。

重要

执行大量磁盘 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 选项,则会使用 KAFKA_JVM_PERFORMANCE_OPTS 的默认 Apache Kafka 配置。

javaSystemProperties

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

javaSystemProperties 配置示例

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

13.1.10. 垃圾收集器日志记录

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

GC 日志配置示例

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.