第 20 章 管理 AMQ Streams
管理 AMQ Streams 需要执行各种任务来保持 Kafka 集群和相关资源平稳运行。使用 oc
命令检查资源的状态,配置维护窗口以进行滚动更新,并使用 AMQ Streams Drain Cleaner 和 Kafka Static Quota 插件等工具来有效地管理您的部署。
20.1. 使用自定义资源
您可以使用 oc
命令检索信息,并对 AMQ Streams 自定义资源执行其他操作。
将 oc
与自定义资源的 status
子资源一起使用,您可以获取有关资源的信息。
20.1.1. 对自定义资源执行 oc
操作
使用 oc
命令,如 get
, describe
, edit
, 或 delete
, 对资源类型执行操作。例如,oc get kafkatopics
检索所有 Kafka 主题和 oc get kafkas
列表,检索所有部署的 Kafka 集群。
在引用资源类型时,您可以使用单数和复数名称: oc get kafkas
获取与 oc get kafka
相同的结果。
您还可以使用资源 的短名称。学习短名称可在管理 AMQ Streams 时节省时间。Kafka
的短名称为 k
,因此您也可以运行 oc get k
来列出所有 Kafka 集群。
oc get k NAME DESIRED KAFKA REPLICAS DESIRED ZK REPLICAS my-cluster 3 3
AMQ Streams 资源 | 长名称 | 短名称 |
---|---|---|
Kafka | kafka | k |
Kafka 主题 | kafkatopic | kt |
Kafka 用户 | kafkauser | ku |
Kafka Connect | kafkaconnect | kc |
Kafka Connector | kafkaconnector | kctr |
Kafka Mirror Maker | kafkamirrormaker | kmm |
Kafka Mirror Maker 2 | kafkamirrormaker2 | kmm2 |
Kafka Bridge | kafkabridge | kb |
Kafka Rebalance | kafkarebalance | kr |
20.1.1.1. 资源类别
自定义资源的类别也可以在 oc
命令中使用。
所有 AMQ Streams 自定义资源都属于类别 strimzi
,因此您可以使用 strimzi
通过一个命令获取所有 AMQ Streams 资源。
例如,运行 oc get strimzi
列出了给定命名空间中的所有 AMQ Streams 自定义资源。
oc get strimzi NAME DESIRED KAFKA REPLICAS DESIRED ZK REPLICAS kafka.kafka.strimzi.io/my-cluster 3 3 NAME PARTITIONS REPLICATION FACTOR kafkatopic.kafka.strimzi.io/kafka-apps 3 3 NAME AUTHENTICATION AUTHORIZATION kafkauser.kafka.strimzi.io/my-user tls simple
oc get strimzi -o name
命令返回所有资源类型和资源名称。-o name
选项以 type/name 格式获取输出
oc get strimzi -o name kafka.kafka.strimzi.io/my-cluster kafkatopic.kafka.strimzi.io/kafka-apps kafkauser.kafka.strimzi.io/my-user
您可以将这个 strimzi
命令与其他命令合并。例如,您可以将其传递给 oc delete
命令,以删除单个命令中的所有资源。
oc delete $(oc get strimzi -o name) kafka.kafka.strimzi.io "my-cluster" deleted kafkatopic.kafka.strimzi.io "kafka-apps" deleted kafkauser.kafka.strimzi.io "my-user" deleted
删除单个操作中的所有资源可能很有用,例如,当您测试新的 AMQ Streams 功能时。
20.1.1.2. 查询子资源的状态
您可以使用其他值传递给 -o
选项。例如,通过使用 -o yaml
,您可以以 YAML 格式获取输出。使用 -o json
会将它返回为 JSON。
您可以查看 oc get --help
中的所有选项。
最有用的选项是 JSONPath 支持,它允许您传递 JSONPath 表达式来查询 Kubernetes API。JSONPath 表达式可以提取或导航任何资源的特定部分。
例如,您可以使用 JSONPath 表达式 {.status.listeners[? (@.name=="tls")].bootstrapServers}
从 Kafka 自定义资源的状态中获取 bootstrap 地址,并在 Kafka 客户端中使用它。
在这里,命令找到名为 tls
的监听程序的 bootstrapServers
值:
oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.name=="tls")].bootstrapServers}{"\n"}' my-cluster-kafka-bootstrap.myproject.svc:9093
通过更改名称条件,您还可以获取其他 Kafka 侦听程序的地址。
您可以使用 jsonpath
从任何自定义资源中提取任何其他属性或属性组。
20.1.2. AMQ Streams 自定义资源状态信息
status 属性为特定自定义资源提供状态信息。
下表列出了提供状态信息(部署时)和定义 status 属性的 schema 的自定义资源。
如需有关架构的更多信息,请参阅 自定义资源 API 参考。
AMQ Streams 资源 | 模式参考 | 在… 中发布状态信息 |
---|---|---|
|
| Kafka 集群 |
|
| Kafka 集群中的 Kafka 主题 |
|
| Kafka 集群中的 Kafka 用户 |
|
| Kafka Connect 集群 |
|
|
|
|
| Kafka MirrorMaker 2 集群 |
|
| Kafka MirrorMaker 集群 |
|
| AMQ Streams Kafka Bridge |
|
| 重新平衡的状态和结果 |
资源的 status
属性提供有关资源状态的信息。status.conditions
和 status.observedGeneration
属性都是所有资源通用的。
status.conditions
-
状态条件描述了资源的当前状态。状态条件属性可用于跟踪与资源相关的进度,达到其 所需状态,这由
spec
中指定的配置定义。状态条件属性提供资源更改的时间和原因,以及阻止或延迟 Operator 实际状态的事件详情。 status.observedGeneration
-
最后观察到的生成表示 Cluster Operator 资源的最新协调。如果
观察到的Generation
的值与metadata.generation
的值(部署当前版本)不同,Operator 尚未处理对资源的最新更新。如果这些值相同,状态信息反映了资源的最新更改。
status
属性还提供特定于资源的信息。例如,KafkaStatus
提供有关监听器地址的信息,以及 Kafka 集群的 ID。
AMQ Streams 创建和维护自定义资源的状态,定期评估自定义资源的当前状态并相应地更新其状态。当使用 oc edit
在自定义资源上执行更新时,则其状态
不可编辑。另外,更改 状态
不会影响 Kafka 集群的配置。
在这里,我们看到 Kafka
自定义资源的状态
属性。
Kafka 自定义资源状态
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: spec: # ... status: clusterId: XP9FP2P-RByvEy0W4cOEUA 1 conditions: 2 - lastTransitionTime: '2023-01-20T17:56:29.396588Z' status: 'True' type: Ready 3 listeners: 4 - addresses: - host: my-cluster-kafka-bootstrap.prm-project.svc port: 9092 bootstrapServers: 'my-cluster-kafka-bootstrap.prm-project.svc:9092' name: plain type: plain - addresses: - host: my-cluster-kafka-bootstrap.prm-project.svc port: 9093 bootstrapServers: 'my-cluster-kafka-bootstrap.prm-project.svc:9093' certificates: - | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- name: tls type: tls - addresses: - host: >- 2054284155.us-east-2.elb.amazonaws.com port: 9095 bootstrapServers: >- 2054284155.us-east-2.elb.amazonaws.com:9095 certificates: - | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- name: external2 type: external2 - addresses: - host: ip-10-0-172-202.us-east-2.compute.internal port: 31644 bootstrapServers: 'ip-10-0-172-202.us-east-2.compute.internal:31644' certificates: - | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- name: external1 type: external1 observedGeneration: 3 5
状态中列出的 Kafka bootstrap 地址并不表示这些端点或 Kafka 集群处于 Ready
状态。
访问状态信息
您可以从命令行访问资源的状态信息。更多信息请参阅 第 20.1.3 节 “查找自定义资源的状态”。
20.1.3. 查找自定义资源的状态
这个步骤描述了如何查找自定义资源的状态。
先决条件
- 一个 OpenShift 集群。
- Cluster Operator 正在运行。
流程
指定自定义资源,并使用
-o jsonpath
选项应用标准 JSONPath 表达式来选择status
属性:oc get kafka <kafka_resource_name> -o jsonpath='{.status}'
此表达式返回指定自定义资源的所有状态信息。您可以使用点表示法(如
status.listeners
或status.observedGeneration
)来微调您想要查看的状态信息。
其他资源
- 第 20.1.2 节 “AMQ Streams 自定义资源状态信息”
- 有关使用 JSONPath 的更多信息,请参阅 JSONPath 支持。