第 12 章 管理 AMQ 流


本章论述了维护 AMQ 流部署的任务。

12.1. 使用自定义资源

您可以使用 oc 命令来检索信息,并对 AMQ Streams 自定义资源执行其他操作。

通过将 oc 与自定义资源的 status 子资源一起使用,您可以获取有关资源的信息。

12.1.1. 对自定义资源执行 oc 操作

使用 get、describe、edit deleteoc 命令对资源类型执行操作。例如,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
表 12.1. 每个 AMQ Streams 资源的长和短名称
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 属性,如下表中所述。

表 12.2. 自定义资源状态属性
AMQ Streams 资源架构参考在…​ 上发布状态信息

kafka

第 B.75 节 “KafkaStatus 架构参考”

Kafka 集群。

KafkaConnect

第 B.93 节 “KafkaConnectStatus 模式参考”

Kafka Connect 集群(如果已部署)。

KafkaConnectS2I

第 B.97 节 “KafkaConnectS2IStatus 模式参考”

带有 Source-to-Image 支持的 Kafka Connect 集群(如果已部署)。

KafkaConnector

第 B.132 节 “KafkaConnectorStatus 模式参考”

KafkaConnector 资源( 如果已部署)。

KafkaMirrorMaker

第 B.120 节 “KafkaMirrorMakerStatus 模式参考”

Kafka MirrorMaker 工具(如果已部署)。

KafkaTopic

第 B.100 节 “KafkaTopicStatus 模式参考”

Kafka 集群中的主题。

KafkaUser

第 B.113 节 “KafkaUserStatus 模式参考”

Kafka 集群中的用户。

KafkaBridge

第 B.129 节 “KafkaBridgeStatus 模式参考”

AMQ Streams Kafka Bridge(如果已部署)。

资源的 status 属性提供资源的信息:

  • 当前状态,在 status.conditions 属性中
  • 最后观察到的生成,在 status.observedGeneration 属性中

status 属性也提供特定于资源的信息。例如:

  • 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/v1beta1
kind: Kafka
metadata:
spec:
  # ...
status:
  conditions: 1
  - lastTransitionTime: 2019-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
    # ...

1
状态 条件 描述与无法从现有资源信息推断或特定于资源实例相关的条件。
2
Ready 条件指示 Cluster Operator 当前是否认为 Kafka 集群可以处理流量。
3
observedGeneration 表示最近由 Cluster Operator 协调的 Kafka 自定义资源的生成。
4
侦听器 根据类型描述当前的 Kafka bootstrap 地址。
重要

目前不支持带有 nodeport 类型的外部监听程序自定义资源状态中的地址。

注意

状态中列出的 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.listenersstatus.observedGeneration )来微调您希望看到的状态信息。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.