通过 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:

{
    "operationset": "my-operationset",
    "node": "my-node",
    "pod": "my-pod",
    "namespace": "default",
    "container": "my-container",
    "key1": "value1",
    "key2": "value2"
}

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

apiVersion: diagnosis.kubediag.org/v1
kind: Diagnosis
metadata:
  annotations:
    diagnosis.kubediag.org/kafka-message-headers: ""
    diagnosis.kubediag.org/kafka-message-key: ""
    diagnosis.kubediag.org/kafka-message-offset: "7"
    diagnosis.kubediag.org/kafka-message-partition: "0"
    diagnosis.kubediag.org/kafka-message-time: "20210603085224"
    diagnosis.kubediag.org/kafka-message-topic: my-topic
    diagnosis.kubediag.org/kafka-message-value: '{"operationset":"my-operationset","node":"my-node","pod":"my-pod","namespace":"default","container":"my-container","key1":"value1","key2":"value2"}'
  name: kafka-message.20210603085224
  namespace: kubediag
spec:
  nodeName: my-node
  operationSet: my-operationset
  parameters:
    container: my-container
    key1: value1
    key2: value2
    namespace: default
    node: my-node
    operationset: my-operationset
    pod: my-pod
  podReference:
    container: my-container
    name: my-pod
    namespace: default
最后修改 July 7, 2021 : First commit (f2fe7c7)