使用 Operator 部署

要启用持续的网络流量采集,你需要:

  1. 一个可访问的 ClickHouse server,用于存储 flow 日志
  2. NetObserv Operator
  3. 一个 FlowCollector 实例

ClickHouse 后端可以通过以下任一方式准备:

  • 使用现有的 ClickHouse server,并在 FlowCollector 配置中提供其连接信息
  • 通过 ClickHouse Operator 在集群中部署一个新的 ClickHouse 实例

选择 ClickHouse 部署选项

在创建 FlowCollector 实例之前,请从以下方式中选择一种:

  • 现有 ClickHouse server:如果你已经有一个 FlowCollector 可以访问的 ClickHouse 部署,请使用此选项。
  • 新建集群内 ClickHouse 实例:如果你希望使用 ClickHouse Operator 在集群中部署 ClickHouse,请使用此选项。

如果你使用现有的 ClickHouse server,请提前准备以下值:

  • host:port 格式提供的 ClickHouse service 地址
  • flow 日志的数据库名称
  • ClickHouse 认证的用户名和密码
  • 将用于 FlowCollector 的 .spec.namespace 的 namespace

可选:使用 ClickHouse Operator 部署 ClickHouse

如果你已经为 NetObserv 准备好了 ClickHouse server,请跳过本节,直接转到安装 NetObserv Operator

安装 ClickHouse Operator

  1. 导航到 管理员 > Marketplace > OperatorHub

  2. 搜索 "ClickHouse",并找到由 提供的 ClickHouse Operator。

  3. 如果 ClickHouse Operator 的状态为 Absent,请上传你从 Customer Portal 下载的 ClickHouse Operator 包。

  4. 单击 ClickHouse Operator 以打开详情页。

  5. 在 operator 详情页上,单击 安装

  6. 根据需要填写配置参数。

  7. 单击 安装 开始安装。

  8. 在弹窗对话框中单击 确认,确认安装。

  9. 等待安装完成。

NOTE

如果 提供的 ClickHouse Operator 已经安装,请跳过本节,直接创建用于 NetObserv 的 ClickHouse 集群。

创建 ClickHouseInstallation 实例

  1. 在 ClickHouse Operator 详情页中,进入 所有实例 页面并单击 创建

  2. 在弹窗对话框中,单击 ClickHouseInstallation 部分中的 创建

  3. 创建 ClickHouseInstallation 页面中,单击右上角的 YAML 以切换到 YAML 编辑模式。

  4. 根据需要编辑 YAML 文件,然后单击 创建 以创建 ClickHouseInstallation 实例。

示例 ClickHouseInstallation YAML:

apiVersion: clickhouse.altinity.com/v1
kind: ClickHouseInstallation
metadata:
  name: netobserv
  namespace: cpaas-system
spec:
  configuration:
    files:
      disable-trace-log: |
        <clickhouse>
          <trace_log remove="remove"/>
          <query_thread_log remove="remove"/>
          <query_log remove="remove"/>
          <text_log remove="remove"/>
          <metric_log remove="remove"/>
          <asynchronous_metric_log remove="remove"/>
          <part_log remove="remove"/>
        </clickhouse>
    clusters:
      - layout:
          replicasCount: 1
          shardsCount: 1
        name: replicated
    users:
      clickhouse_root/networks/ip:
        - 127.0.0.1
        - 0.0.0.0/0
        - ::/0
      clickhouse_root/password_sha256_hex: <SHA256_HEX_PASSWORD>
  defaults:
    templates:
      dataVolumeClaimTemplate: default
      logVolumeClaimTemplate: log-volume-template
      podTemplate: clickhouse:25.8
  templates:
    podTemplates:
      - name: clickhouse:25.8
        podDistribution:
          - type: ShardAntiAffinity
        spec:
          containers:
            - command:
                - clickhouse-server
                - --config-file=/etc/clickhouse-server/config.xml
              env:
                - name: CLICKHOUSE_DO_NOT_CHOWN
                  value: "1"
              image: build-harbor.alauda.cn/middleware/clickhouse-server:v25.8.16.34-61a7880e
              name: clickhouse-pod
              resources:
                limits:
                  cpu: "2"
                  memory: 4Gi
                requests:
                  cpu: "1"
                  memory: 2Gi
              securityContext:
                readOnlyRootFilesystem: true
          securityContext:
            fsGroup: 101
            runAsGroup: 101
            runAsNonRoot: true
            runAsUser: 101
    volumeClaimTemplates:
      - name: default
        spec:
          storageClassName: sc-topolvm
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 80Gi
      - name: log-volume-template
        spec:
          storageClassName: sc-topolvm
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 15Gi

在 ClickHouse 实例就绪后,通过查看 ClickHouseInstallation 实例的字段 .status.endpoint 获取 service endpoint。 你也可以运行以下命令来获取 endpoint:

kubectl -n cpaas-system get chi netobserv -o jsonpath="{.status.endpoint}"

命令中的 cpaas-systemnetobserv 必须分别与 ClickHouseInstallation 实例的 namespace 和名称一致。 如果你使用了不同的 namespace 或名称,请相应替换命令中的 cpaas-systemnetobserv

记录 ClickHouse endpoint 地址和凭据,供后续使用。 在创建 FlowCollector 实例时,你将需要这些信息。

安装 NetObserv Operator

  1. 导航到 管理员 > Marketplace > OperatorHub

  2. 搜索 "Alauda Container Platform Network Observability Operator"。

  3. 单击 安装 以打开安装配置页面。

  4. 根据需要填写配置参数。

  5. 单击 安装 开始安装。

  6. 在弹窗对话框中单击 确认,确认安装。

  7. 等待安装完成。

创建 ClickHouse 认证 Secret

在创建 FlowCollector 实例之前,先为 ClickHouse 认证创建一个 Kubernetes secret。

该 secret 会在 FlowCollector 配置中通过 .spec.clickhouse.authSecret.name 引用。

  1. 创建一个名为 ck-auth.env 的本地文件,内容如下:

    username=<USERNAME>
    password=<PASSWORD>
  2. 创建 Kubernetes secret:

    # 如果 namespace 不存在则创建
    test ! -n "$(kubectl get ns netobserv --ignore-not-found -o name)" && kubectl create ns netobserv
    # 从环境文件创建 secret
    kubectl -n netobserv create secret generic ck-auth --from-env-file=./ck-auth.env

在此命令中,netobserv 必须与 FlowCollector 配置中的 .spec.namespace 值一致。

如果你在 FlowCollector 配置中使用了不同的 namespace,请相应替换命令中的 netobserv

创建 FlowCollector 实例

在创建 FlowCollector 实例之前,请确认:

  • ClickHouse server 可以从集群访问
  • ck-auth secret 已存在于 .spec.namespace 指定的 namespace 中
  • ClickHouse 地址、数据库和凭据均正确

然后创建 FlowCollector 实例:

  1. 导航到 所有实例 页面并单击 创建

  2. 在弹窗对话框中,单击 FlowCollector 部分中的 创建

  3. 创建 FlowCollector 页面中,单击右上角的 YAML 以切换到 YAML 编辑模式。

  4. 根据需要编辑 YAML 文件,然后单击 创建 以创建 FlowCollector 实例。

示例 FlowCollector YAML:

apiVersion: flows.netobserv.io/v1beta2
kind: FlowCollector
metadata:
  name: cluster
spec:
  agent:
    ebpf:
      features:
        - DNSTracking
        - FlowRTT
        - PacketTranslation
        - TLSTracking
      metrics:
        enable: false
      sampling: 50
    type: eBPF
  clickhouse:
    addresses:
      - clickhouse-netobserv.cpaas-system.svc.cluster.local:9000
    authSecret:
      name: ck-auth
    database: netobserv
    enable: true
    protocol: native
    readTimeout: 30s
    retention: 24h
    writeBatchSize: 128
    writeBatchWait: 1s
    writeTimeout: 10s
  deploymentModel: Service
  namespace: netobserv
  processor:
    consumerReplicas: 1
    logTypes: Flows
    service:
      tlsType: Disabled
  1. eBPF agent 启用的功能。
  2. eBPF probe 的采样间隔。值为 100 表示每 100 个 packet 采样 1 个。值为 0 或 1 表示采样所有 packet。
  3. ClickHouse server 地址。使用 host:port 格式。这些地址可以指向集群中创建的 ClickHouse 实例,也可以指向现有的外部 ClickHouse server。
  4. ClickHouse 认证 secret。该 secret 必须 包含两个 key:usernamepassword。该 secret 必须创建在与 .spec.namespace 相同的 namespace 中。
  5. ClickHouse 中用于存储 flow 日志的数据库名称。如果数据库不存在,将自动创建。
  6. ClickHouse 中的数据保留期。使用数字加时间单位,例如 24h。此设置仅在创建 ClickHouse table 时生效。
  7. eBPF agents 和 flow 日志 pipeline 所部署的 namespace。
  8. flow 日志 pipeline 的副本数。

如果你使用的是现有的 ClickHouse server,请确保 FlowCollector 可以访问该 server 地址,并且引用的 secret 中包含有效凭据。

在创建 FlowCollector 实例后,eBPF agents 和 flow 日志 pipeline 将部署到 .spec.namespace 指定的 namespace 中。