通过 Kafka 消息触发诊断

通过 Kafka 消息创建 Diagnosis 来触发诊断。

本文介绍了如何通过 Kafka 消息创建 Diagnosis 来触发诊断。

开始之前

在教程开始前,您需要确定 Kubernetes 集群中已经正确安装 KubeDiag。

在 KubeDiag Master 参数中指定需要消费的 Kafka 和 Topic

您需要在 KubeDiag Master 启动时指定下列参数以使用该功能:

参数类型描述示例
–kafka-brokersstrings需要连接 Kafka 集群的 Broker 地址列表。my-cluster-kafka-0:9092,my-cluster-kafka-1:9092
–kafka-topicstring获取消息的 Topic。my-topic

如果上述参数均未指定,则通过 Kafka 消息触发诊断的功能不开启。

Kafka 消息格式

Kafka 消息中必须包含用于创建 Diagnosis 的元信息,一个能够触发诊断的 Kafka 消息的 Value 必须是一个 JSON 对象,且对象中的键值对必须均为 String 类型。JSON 对象中支持的键值对包括:

字段描述必须指定
operationset用于指定被创建 Diagnosis 的 .spec.operationSet 字段。
node用于指定被创建 Diagnosis 的 .spec.nodeName 字段。
pod用于指定被创建 Diagnosis 的 .spec.podReference.name 字段。
namespace用于指定被创建 Diagnosis 的 .spec.podReference.namespace 字段。
container用于指定被创建 Diagnosis 的 .spec.podReference.container 字段。

JSON 对象中的所有键值对会被注入到生成 Diagnosis 的 .spec.parameters 字段。

举例说明

当 KubeDiag 接收到包含下列 Value 的 Kafka 消息时会根据 JSON 对象创建 Diagnosis:

  1. {
  2. "operationset": "my-operationset",
  3. "node": "my-node",
  4. "pod": "my-pod",
  5. "namespace": "default",
  6. "container": "my-container",
  7. "key1": "value1",
  8. "key2": "value2"
  9. }

通过该 Kafka 消息创建出的 Diagnosis 如下所示:

  1. apiVersion: diagnosis.kubediag.org/v1
  2. kind: Diagnosis
  3. metadata:
  4. annotations:
  5. diagnosis.kubediag.org/kafka-message-headers: ""
  6. diagnosis.kubediag.org/kafka-message-key: ""
  7. diagnosis.kubediag.org/kafka-message-offset: "7"
  8. diagnosis.kubediag.org/kafka-message-partition: "0"
  9. diagnosis.kubediag.org/kafka-message-time: "20210603085224"
  10. diagnosis.kubediag.org/kafka-message-topic: my-topic
  11. diagnosis.kubediag.org/kafka-message-value: '{"operationset":"my-operationset","node":"my-node","pod":"my-pod","namespace":"default","container":"my-container","key1":"value1","key2":"value2"}'
  12. name: kafka-message.20210603085224
  13. namespace: kubediag
  14. spec:
  15. nodeName: my-node
  16. operationSet: my-operationset
  17. parameters:
  18. container: my-container
  19. key1: value1
  20. key2: value2
  21. namespace: default
  22. node: my-node
  23. operationset: my-operationset
  24. pod: my-pod
  25. podReference:
  26. container: my-container
  27. name: my-pod
  28. namespace: default

最后修改 July 7, 2021 : First commit (f2fe7c7)