附录 B. 自定义资源 API 参考
B.1. 常见配置属性
常见配置属性应用到多个资源。
B.1.1. replicas
使用 replicas
属性来配置副本。
复制的类型取决于资源。
-
KafkaTopic
使用复制因子配置 Kafka 集群中每个分区的副本数。 - Kafka 组件使用副本来配置部署中的 pod 数量,以提供更好的可用性和可扩展性。
在 OpenShift 上运行 Kafka 组件时,可能不需要运行多个副本来获取高可用性。当部署组件的节点崩溃时,OpenShift 将自动将 Kafka 组件容器集重新调度到其他节点。但是,运行带有多个副本的 Kafka 组件可能会提供更快的故障转移时间,因为其他节点将会启动并运行。
B.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 服务器列表。
B.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 # ...
B.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 参考。
B.1.5. 资源
您可以为组件请求 CPU 和内存资源。limits 指定给定容器可以消耗的最大资源。
在 Kafka
资源中设置 Topic Operator 和 User Operator 的资源请求和限值。
使用 reources.requests
和 resources.limits
属性来配置资源请求和限值。
对于每个部署的容器,AMQ Streams 允许您请求特定资源并定义这些资源的最大消耗。
AMQ Streams 支持以下资源类型的请求和限值:
-
cpu
-
memory
AMQ Streams 使用 OpenShift 语法来指定这些资源。
有关在 OpenShift 中管理计算资源的更多信息,请参阅为容器管理计算资源。
资源请求
请求指定要为给定容器保留的资源。保留资源可确保资源始终可用。
如果资源请求针对的是 OpenShift 集群中可用的可用资源,则不会调度该容器集。
可以为一个或多个支持的资源配置请求。
资源限值
limits 指定给定容器可以消耗的最大资源。限制不是保留的,可能并不总是可用。容器只能在资源可用时才使用资源限制。资源限制应始终大于资源请求。
资源可以被配置为一个或多个支持的限制。
支持的 CPU 格式
支持 CPU 请求和限制,其格式如下:
-
CPU 内核数作为整数(
5
个 CPU 内核)或十进制(2.5
个 CPU 内核)。 -
数字或 millicpus / millicores(
100m
),其中 1000 millicores 相同1 个
CPU 内核。
1 个 CPU 核心的计算能力可能因部署 OpenShift 的平台而异。
有关 CPU 规格的更多信息,请参阅 CPU 含义。
支持的内存格式
内存请求和限值以兆字节、千兆字节、兆字节和千兆字节为单位指定。
-
要指定内存(以 MB 为单位),请使用
M
后缀。例如1000M
。 -
要指定以 GB 为单位的内存,请使用
G
后缀。例如1G
: -
要以兆字节为单位指定内存,请使用
Mi
后缀。例如1000Mi
。 -
要以千兆字节为单位指定内存,请使用
Gi
后缀。例如1Gi
。
有关内存规格和其他支持单元的详情,请参阅 内存含义。
B.1.6. 镜像
使用 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.image
和spec.kafka.version
中的 Kafka。 -
对于 Kafka Connect、Kafka Connect S2I 和 Kafka MirrorMaker,在
spec.image
和spec.version 中
。
建议仅提供 版本
,不指定 镜像
属性。这降低了配置自定义资源时出错的机会。如果需要更改用于不同 Kafka 版本的镜像,最好配置 Cluster Operator 的环境变量。
在其他资源中配置 image
属性
对于其他自定义资源中的 image
属性,在部署期间将使用给定值。如果缺少 image
属性,将使用 Cluster Operator 配置中指定的 镜像
。如果 Cluster Operator 配置中没有定义 镜像名称
,则会使用默认值。
对于主题 Operator:
-
在 Cluster Operator 配置中的
STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE
环境变量中指定的容器镜像。 -
registry.redhat.io/amq7/amq-streams-rhel7-operator:1.6.7
container image.
-
在 Cluster Operator 配置中的
对于 User Operator:
-
在 Cluster Operator 配置中的
STRIMZI_DEFAULT_USER_OPERATOR_IMAGE
环境变量中指定的容器镜像。 -
registry.redhat.io/amq7/amq-streams-rhel7-operator:1.6.7
container image.
-
在 Cluster Operator 配置中的
对于实体 Operator TLS sidecar:
-
在 Cluster Operator 配置中的
STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
环境变量中指定的容器镜像。 -
registry.redhat.io/amq7/amq-streams-kafka-26-rhel7:1.6.7
container image.
-
在 Cluster Operator 配置中的
对于 Kafka Exporter:
-
在 Cluster Operator 配置中的
STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE
环境变量中指定的容器镜像。 -
registry.redhat.io/amq7/amq-streams-kafka-26-rhel7:1.6.7
container image.
-
在 Cluster Operator 配置中的
对于 Kafka 网桥:
-
在 Cluster Operator 配置中的
STRIMZI_DEFAULT_KAFKA_BRIDGE_IMAGE
环境变量中指定的容器镜像。 -
registry.redhat.io/amq7/amq-streams-bridge-rhel7:1.6.7
container image.
-
在 Cluster Operator 配置中的
对于 Kafka 代理初始化器:
-
在 Cluster Operator 配置中的
STRIMZI_DEFAULT_KAFKA_INIT_IMAGE
环境变量中指定的容器镜像。 -
registry.redhat.io/amq7/amq-streams-rhel7-operator:1.6.7
container image.
-
在 Cluster Operator 配置中的
对于 Kafka 代理初始化器:
-
registry.redhat.io/amq7/amq-streams-rhel7-operator:1.6.7
container image.
-
容器镜像配置示例
apiVersion: kafka.strimzi.io/v1beta1 kind: Kafka metadata: name: my-cluster spec: kafka: # ... image: my-org/my-image:latest # ... zookeeper: # ...
B.1.7. livenessProbe
和 readinessProbe
健康检查
使用 livenessProbe
和 readinessProbe
属性来配置 AMQ Streams 中支持的健康检查探测。
健康检查是定期测试,可验证应用的健康状况。当健康检查探测失败时,OpenShift 假定应用不健康,并尝试修复它。
有关探测的详情,请参阅 配置存活度和就绪度探测。
Live nessProbe
和 readinessProbe
均支持以下选项:
-
initialDelaySeconds
-
timeoutSeconds
-
periodSeconds
-
successThreshold
-
failureThreshold
存活度和就绪度探测配置示例
# ... readinessProbe: initialDelaySeconds: 15 timeoutSeconds: 5 livenessProbe: initialDelaySeconds: 15 timeoutSeconds: 5 # ...
有关 livenessProbe 和
选项的更多信息,请参阅 探测模式参考。
readinessProbe
B.1.8. metrics
使用 metrics
属性来启用和配置 Prometheus 指标。
指标
属性也可以包含 Prometheus JMX 导出器的其他配置。AMQ Streams 支持使用 Prometheus JMX 导出器的 Prometheus 指标将 Apache Kafka 和 ZooKeeper 支持的 JMX 指标转换为 Prometheus 指标。
要在不进一步配置的情况下启用 Prometheus 指标导出,您可以将其设置为空对象({}
)。
启用指标数据后,它们会在端口 9404 上公开。
当资源中没有定义 metrics
属性时,Prometheus 指标会被禁用。
有关设置和部署 Prometheus 和 Grafana 的更多信息,请参阅 OpenShift 指南中的 Deploying 和 升级 AMQ Streams 中的 介绍 Metrics 到 Kafka。
B.1.9. jvmOptions
可以使用以下资源中的 jvmOptions
属性配置 JVM 选项:
-
Kafka.spec.kafka
-
Kafka.spec.zookeeper
-
KafkaConnect.spec
-
KafkaConnectS2I.spec
-
KafkaMirrorMaker.spec
-
KafkaMirrorMaker2.spec
-
KafkaBridge.spec
只支持以下 JVM 选项:
-Xms
- 配置 JVM 启动时的最小初始分配堆大小。
-Xmx
- 配置最大堆大小。
JVM 设置(如 -Xmx 和 -
Xms)
接受的单元是对应镜像中的 JDK java
二进制文件接受的单元。因此,1g
或 1G
表示 1,073,741,824 字节和 Gi
不是有效的单元后缀。这与用于 内存请求和限值 的单位相反,后者遵循 OpenShift 约定,1G 表示 1,000
,000,000 字节,1Gi
表示 1,073,741,824 字节
用于 -Xms
和 -Xmx
的默认值取决于是否有为容器配置的 内存请求 限值。
- 如果有内存限制,JVM 的最小和最大内存将设置为与限值对应的值。
-
如果没有内存限制,JVM 的最小内存将设置为
128M
。JVM 的最大内存未定义为允许内存根据需要增加,这非常适合测试和开发环境中的单节点环境。
设置 -Xmx
明确需要注意:
-
JVM 的总内存使用量大约为最大堆的 4 ¹,如
-Xmx
配置。 -
如果设置
-Xmx
时不设置适当的 OpenShift 内存限值,如果 OpenShift 节点遇到内存压力(来自其上运行的其他 Pod),则容器可能会被终止。 -
如果设置
-Xmx
时不设置适当的 OpenShift 内存请求,则容器可能会调度到内存不足的节点。在这种情况下,容器不会启动,而是崩溃(如果-Xms 被设置为
,或稍后某个时间(如果不是),则容器不会启动。-Xm
x
在明确设置 -Xmx
时,建议您这样做:
- 将内存请求和内存限值设置为相同的值
-
使用至少 4.5 的值请求
-Xmx
-
考虑将
-Xms
设置为与-Xmx
相同的值
容器执行很多磁盘 I/O(如 Kafka 代理容器),需要保留一些内存以用作操作系统页面缓存。在这样的容器中,请求的内存应当显著高于 JVM 使用的内存。
配置 -Xmx
和 -Xms 的
片段示例
# ... jvmOptions: "-Xmx": "2g" "-Xms": "2g" # ...
在上例中,JVM 会将 2 GiB(=2,147,483,648 字节)用于其堆。其总内存用量大约为 8GiB。
为初始(-Xms
)和最大(-Xmx
)堆大小设置相同的值可避免 JVM 启动后分配内存,其代价可能是分配超过真正需要的堆数。对于 Kafka 和 ZooKeeper pod,此类分配可能会导致不必要的延迟。对于 Kafka Connect 避免过度分配,可能是最重要的问题,特别是在分布式模式中,过度分配的效果会乘以消费者的数量。
-server
-server
启用服务器 JVM。这个选项可以设为 true 或 false。
配置 -server
的片段示例
# ... jvmOptions: "-server": true # ...
当两个选项(-server 和 -
XX
)都没有指定时,会使用 KAFKA_JVM_PERFORMANCE_OPTS
的默认 Apache Kafka 配置。
-XX
-XX
对象可用于配置 JVM 的高级运行时选项。server 和
-XX
选项用于配置 Apache Kafka 的 KAFKA_JVM_PERFORMANCE_OPTS
选项。
显示 -XX
对象使用的示例
jvmOptions: "-XX": "UseG1GC": true "MaxGCPauseMillis": 20 "InitiatingHeapOccupancyPercent": 35 "ExplicitGCInvokesConcurrent": true
以上示例配置将导致以下 JVM 选项:
-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:-UseParNewGC
当两个选项(-server 和 -
XX
)都没有指定时,会使用 KAFKA_JVM_PERFORMANCE_OPTS
的默认 Apache Kafka 配置。
B.1.10. 垃圾收集器日志记录
jvmOptions
属性还允许您启用和禁用垃圾收集器(GC)日志记录。默认禁用 GC 日志。要启用它,请按如下方式设置 gcLoggingEnabled
属性:
启用 GC 日志示例
# ... jvmOptions: gcLoggingEnabled: true # ...