第 12 章 管理 AMQ 流
本章论述了维护 AMQ 流部署的任务。
12.1. 使用自定义资源
您可以使用 oc
命令来检索信息,并对 AMQ Streams 自定义资源执行其他操作。
通过将 oc
与自定义资源的 status
子资源一起使用,您可以获取有关资源的信息。
12.1.1. 对自定义资源执行 oc
操作
使用 get
、describe、edit
或
delete
等 oc
命令对资源类型执行操作。例如,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 Connect S2I | kafkaconnects2i | kcs2i |
Kafka Connector | kafkaconnector | kctr |
Kafka Mirror Maker | kafkamirrormaker | kmm |
Kafka Mirror Maker 2 | kafkamirrormaker2 | kmm2 |
Kafka Bridge | kafkabridge | kb |
kafka 重新平衡 | kafkarebalance | kR |
12.1.1.1. 资源类型
oc
命令还可以使用自定义资源的类别。
所有 AMQ Streams 自定义资源都属于 category 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 功能时。
12.1.1.2. 查询子资源的状态
您也可以传递给 -o
选项的其他值。例如,通过使用 -o yaml
,您可以获取 YAML 格式的输出。usng -o json
将以 JSON 形式返回。
您可以查看 oc get --help
中的所有选项。
其中一个最有用的选项是 JSONPath 支持,它允许您传递 JSONPath 表达式来查询 Kubernetes API。JSONPath 表达式可以提取或导航任何资源的特定部分。
例如,您可以使用 JSONPath 表达式 {.status.listeners[?(@.type=="tls")].bootstrapServers}
从 Kafka 自定义资源的状态获取 bootstrap 地址,并在 Kafka 客户端中使用它。
此处,命令找到 tls
侦听器的 bootstrapServers
值。
oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.type=="tls")].bootstrapServers}{"\n"}' my-cluster-kafka-bootstrap.myproject.svc:9093
通过将类型条件更改为 @.type=="external"
或 @.type=="plain"
,您也可以获取其他 Kafka 侦听器的地址。
oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.type=="external")].bootstrapServers}{"\n"}' 192.168.1.247:9094
您可以使用 jsonpath
从任何自定义资源中提取任何其他属性或属性组。
12.1.2. AMQ Streams 自定义资源状态信息
几个资源具有 status
属性,如下表中所述。
AMQ Streams 资源 | 架构参考 | 在… 上发布状态信息 |
---|---|---|
| Kafka 集群。 | |
| Kafka Connect 集群(如果已部署)。 | |
| 带有 Source-to-Image 支持的 Kafka Connect 集群(如果已部署)。 | |
| KafkaConnector 资源(如果已部署)。 | |
| Kafka MirrorMaker 工具(如果已部署)。 | |
| Kafka 集群中的主题。 | |
| Kafka 集群中的用户。 | |
| AMQ Streams Kafka Bridge(如果已部署)。 |
资源的 status
属性提供资源的信息:
-
当前状态,在
status.conditions
属性中 -
最后观察到的生成,在
status.observedGeneration
属性中
status
属性也提供特定于资源的信息。例如:
-
KafkaStatus
提供有关监听地址和 Kafka 集群 ID 的信息。 -
KafkaConnectStatus
为 Kafka Connect 连接器提供 REST API 端点。 -
KafkaUserStatus
提供 Kafka 用户的用户名以及存储其凭证的Secret
。 -
KafkaBridgeStatus
提供 HTTP 地址,外部客户端应用程序可以访问 Bridge 服务。
资源的当前状态可用于跟踪与达到 所需 状态 的资源相关的进度,如 spec
属性所定义。状态条件提供了资源更改的时间和原因,以及防止或延迟 Operator 实现资源所需状态的事件详情。
最后观察到的生成 是 Cluster Operator 最后协调的资源的生成。如果 observedGeneration
的值与 metadata.generation
的值不同,Operator 还没有对资源的最新版本进行处理。如果这些值相同,状态信息反映了对资源的最新更改。
AMQ Streams 创建和维护自定义资源的状态,定期评估自定义资源的当前状态并相应地更新其状态。当使用 oc edit
对自定义资源执行更新时,其状态
不可编辑。此外,更改 状态
不会影响 Kafka 集群的配置。
此处,我们会看到为 Kafka 自定义资源指定的 status
属性。
带有状态的 Kafka 自定义资源
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: spec: # ... status: conditions: 1 - lastTransitionTime: 2021-07-23T23:46:57+0000 status: "True" type: Ready 2 observedGeneration: 4 3 listeners: 4 - addresses: - host: my-cluster-kafka-bootstrap.myproject.svc port: 9092 type: plain - addresses: - host: my-cluster-kafka-bootstrap.myproject.svc port: 9093 certificates: - | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- type: tls - addresses: - host: 172.29.49.180 port: 9094 certificates: - | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- type: external clusterId: CLUSTER-ID 5 # ...
状态中列出的 Kafka bootstrap 地址不表示这些端点或 Kafka 集群处于 ready 状态。
访问状态信息
您可以从命令行访问资源的状态信息。如需更多信息,请参阅 第 12.1.3 节 “查找自定义资源的状态”。
12.1.3. 查找自定义资源的状态
此流程描述了如何查找自定义资源的状态。
先决条件
- OpenShift 集群。
- Cluster Operator 正在运行。
流程
指定自定义资源,并使用
-o jsonpath
选项应用标准 JSONPath 表达式来选择status
属性:oc get kafka <kafka_resource_name> -o jsonpath='{.status}'
此表达式返回指定自定义资源的所有状态信息。您可以使用点表示法(如
status.listeners
或status.observedGeneration
)来微调您希望看到的状态信息。
其它资源
- 第 12.1.2 节 “AMQ Streams 自定义资源状态信息”
- 有关使用 JSONPath 的更多信息,请参阅 JSONPath 支持。