×

安装 Loki 是使用网络可观测性运算符的推荐前提条件。您可以选择使用无需 Loki 的网络可观测性,但这样做有一些注意事项,如前面链接的部分所述。

Loki 运算符集成了一个网关,该网关使用 Loki 实现多租户和身份验证,用于数据流存储。LokiStack 资源管理 Loki(一个可扩展、高可用、多租户日志聚合系统)和一个具有 OpenShift Container Platform 身份验证的 Web 代理。LokiStack 代理使用 OpenShift Container Platform 身份验证来强制执行多租户并促进在 Loki 日志存储中保存和索引数据。

Loki 运算符也可用于配置 LokiStack 日志存储。网络可观测性运算符需要一个与日志记录分离的专用 LokiStack。

无需 Loki 的网络可观测性

您可以通过不执行 Loki 安装步骤并直接跳到“安装网络可观测性运算符”来使用无需 Loki 的网络可观测性。如果您只想将流导出到 Kafka 消费者或 IPFIX 收集器,或者您只需要仪表板指标,则无需安装 Loki 或为 Loki 提供存储。下表比较了有 Loki 和无 Loki 的可用功能。

表 1. 有 Loki 和无 Loki 的功能可用性比较
有 Loki 无 Loki

导出器

check solid

check solid

多租户

check solid

check solid

完整的过滤和聚合功能 [1]

check solid

x solid

部分过滤和聚合功能 [2]

check solid

check solid

基于流的指标和仪表板

check solid

check solid

流量流视图概述 [3]

check solid

check solid

流量流视图表

check solid

x solid

拓扑视图

check solid

check solid

OpenShift Container Platform 控制台网络流量选项卡集成

check solid

check solid

  1. 例如,每个 Pod。

  2. 例如,每个工作负载或命名空间。

  3. 只有使用 Loki 时才能获得数据包丢失统计信息。

安装 Loki 运算符

Loki 运算符版本 5.7+ 是网络可观测性支持的 Loki 运算符版本;这些版本提供了使用openshift-network租户配置模式创建LokiStack实例的能力,并为网络可观测性提供完全自动的集群内身份验证和授权支持。您可以通过多种方式安装 Loki。一种方法是使用 OpenShift Container Platform Web 控制台 Operator Hub。

先决条件
  • 支持的日志存储(AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation)

  • OpenShift Container Platform 4.10+

  • Linux 内核 4.18+

步骤
  1. 在 OpenShift Container Platform Web 控制台中,单击运算符OperatorHub

  2. 从可用运算符列表中选择Loki 运算符,然后单击安装

  3. 安装模式下,选择集群上的所有命名空间

验证
  1. 验证您是否已安装 Loki 运算符。访问运算符已安装的运算符页面,查找Loki 运算符

  2. 验证在所有项目中Loki 运算符是否列出,且状态成功

要卸载 Loki,请参考与您用于安装 Loki 的方法相对应的卸载过程。您可能还有一些剩余的ClusterRolesClusterRoleBindings、存储在对象存储中的数据以及必须删除的持久卷。

为 Loki 存储创建密钥

Loki Operator 支持多种日志存储选项,例如 AWS S3、Google Cloud Storage、Azure、Swift、Minio 和 OpenShift Data Foundation。以下示例演示如何为 AWS S3 存储创建密钥。本例中创建的密钥 loki-s3 在“创建 LokiStack 资源”中有所引用。您可以在 Web 控制台或 CLI 中创建此密钥。

  1. 使用 Web 控制台,导航到**项目** → **所有项目**下拉菜单,然后选择**创建项目**。将项目命名为 netobserv 并单击**创建**。

  2. 导航到右上角的导入图标 +。将您的 YAML 文件粘贴到编辑器中。

    以下是 S3 存储的示例密钥 YAML 文件

    apiVersion: v1
    kind: Secret
    metadata:
      name: loki-s3
      namespace: netobserv   (1)
    stringData:
      access_key_id: QUtJQUlPU0ZPRE5ON0VYQU1QTEUK
      access_key_secret: d0phbHJYVXRuRkVNSS9LN01ERU5HL2JQeFJmaUNZRVhBTVBMRUtFWQo=
      bucketnames: s3-bucket-name
      endpoint: https://s3.eu-central-1.amazonaws.com
      region: eu-central-1
    1 本文档中的安装示例在所有组件中使用相同的命名空间 netobserv。您可以选择为不同的组件使用不同的命名空间。
验证
  • 创建密钥后,您应该可以在 Web 控制台的**工作负载** → **密钥**下看到它。

创建 LokiStack 自定义资源

您可以使用 Web 控制台或 OpenShift CLI (oc) 创建命名空间或新项目来部署 LokiStack 自定义资源 (CR)。

步骤
  1. 导航到**操作符** → **已安装的操作符**,从**项目**下拉菜单查看**所有项目**。

  2. 查找**Loki Operator**。在详细信息下的**提供的 API**中,选择**LokiStack**。

  3. 单击**创建 LokiStack**。

  4. 确保在**表单视图**或**YAML 视图**中指定以下字段

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: loki
      namespace: netobserv (1)
    spec:
      size: 1x.small (2)
      storage:
        schemas:
        - version: v12
          effectiveDate: '2022-06-01'
        secret:
          name: loki-s3
          type: s3
      storageClassName: gp3 (3)
      tenants:
        mode: openshift-network
    1 本文档中的安装示例在所有组件中使用相同的命名空间 netobserv。您可以选择使用不同的命名空间。
    2 指定部署规模。在 Loki Operator 5.8 及更高版本中,Loki 生产实例支持的规模选项为 1x.extra-small1x.small1x.medium

    无法更改部署规模中的数字 1x

    3 使用集群中可用的存储类名称,访问模式为 ReadWriteOnce。您可以使用 oc get storageclasses 查看集群中可用的存储类。

    您不能重复使用用于日志记录的相同 LokiStack CR。

  5. 单击**创建**。

为集群管理员用户角色创建新组

作为 cluster-admin 用户查询多个命名空间的应用程序日志时,如果集群中所有命名空间字符总数超过 5120,则会导致错误 Parse error: input size too long (XXXX > 5120)。为了更好地控制对 LokiStack 中日志的访问,请将 cluster-admin 用户设为 cluster-admin 组的成员。如果 cluster-admin 组不存在,请创建它并将所需用户添加到其中。

使用以下步骤为具有 cluster-admin 权限的用户创建新组。

步骤
  1. 输入以下命令以创建新组

    $ oc adm groups new cluster-admin
  2. 输入以下命令将所需用户添加到 cluster-admin

    $ oc adm groups add-users cluster-admin <username>
  3. 输入以下命令将 cluster-admin 用户角色添加到组

    $ oc adm policy add-cluster-role-to-group cluster-admin cluster-admin

自定义管理员组访问

如果您需要查看集群范围的日志而无需成为管理员,或者您已经定义了要在此处使用的任何组,则可以使用 adminGroup 字段指定自定义组。LokiStack 自定义资源 (CR) 的 adminGroups 字段中指定的任何组的成员都具有与管理员相同的日志读取权限。

管理员用户可以访问集群中的所有网络日志。

LokiStack CR 示例
apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: loki
  namespace: netobserv
spec:
  tenants:
    mode: openshift-network (1)
    openshift:
      adminGroups: (2)
      - cluster-admin
      - custom-admin-group (3)
1 自定义管理员组仅在此模式下可用。
2 为此字段输入空列表 [] 值将禁用管理员组。
3 覆盖默认组 (system:cluster-adminscluster-admindedicated-admin)

Loki 部署规模

Loki 的规模遵循 1x.<size> 的格式,其中 1x 是实例数,<size> 指定性能能力。

无法更改部署规模中的数字 1x

表 2. Loki 规模
1x.demo 1x.extra-small 1x.small 1x.medium

数据传输

仅限演示使用

100GB/天

500GB/天

2TB/天

每秒查询数 (QPS)

仅限演示使用

1-25 QPS,200ms

25-50 QPS,200ms

25-75 QPS,200ms

复制因子

2

2

2

总 CPU 请求

14 个 vCPU

34 个 vCPU

54 个 vCPU

总内存请求

31Gi

67Gi

139Gi

总磁盘请求

40Gi

430Gi

430Gi

590Gi

LokiStack 摄取限制和健康警报

LokiStack 实例具有根据配置规模设置的默认设置。可以覆盖其中一些设置,例如摄取和查询限制。如果您在控制台插件或 flowlogs-pipeline 日志中看到 Loki 错误,则可能需要更新这些设置。Web 控制台中的自动警报会在达到这些限制时通知您。

以下是配置限制的示例

spec:
  limits:
    global:
      ingestion:
        ingestionBurstSize: 40
        ingestionRate: 20
        maxGlobalStreamsPerTenant: 25000
      queries:
        maxChunksPerQuery: 2000000
        maxEntriesLimitPerQuery: 10000
        maxQuerySeries: 3000

有关这些设置的更多信息,请参阅 LokiStack API 参考

安装网络可观测性操作符

您可以使用 OpenShift Container Platform Web 控制台 Operator Hub 安装网络可观测性操作符。安装操作符后,它将提供 FlowCollector 自定义资源定义 (CRD)。创建 FlowCollector 时,您可以在 Web 控制台中设置规范。

操作符的实际内存消耗取决于您的集群规模和已部署资源的数量。可能需要相应地调整内存消耗。有关更多信息,请参阅“重要 Flow Collector 配置注意事项”部分中的“Network Observability 控制器管理器 pod 内存不足”。

先决条件
  • 如果您选择使用 Loki,请安装 Loki Operator 5.7+ 版本

  • 您必须具有 cluster-admin 权限。

  • 需要以下支持的架构之一:amd64ppc64learm64s390x

  • Red Hat Enterprise Linux (RHEL) 9 支持的任何 CPU。

  • 必须配置 OVN-Kubernetes 作为主要的网络插件,并且可以选择使用 Multus 和 SR-IOV 的辅助接口。

此外,此安装示例使用 netobserv 命名空间,该命名空间用于所有组件。您可以选择使用不同的命名空间。

步骤
  1. 在 OpenShift Container Platform Web 控制台中,单击运算符OperatorHub

  2. 从**OperatorHub**中可用操作符列表中选择**网络可观测性操作符**,然后单击**安装**。

  3. 选中复选框 在此命名空间上启用操作符推荐的集群监控

  4. 导航到**操作符** → **已安装的操作符**。在网络可观测性的提供的 API 下,选择**Flow Collector**链接。

  5. 导航到**Flow Collector**选项卡,然后单击**创建 FlowCollector**。在表单视图中进行以下选择

    1. spec.agent.ebpf.Sampling:为流指定采样大小。较低的采样大小将对资源利用率产生更大的影响。有关更多信息,请参阅“FlowCollector API 参考”,spec.agent.ebpf

    2. 如果您不使用 Loki,请单击**Loki 客户端设置**并将**启用**更改为**禁用**。默认情况下,此设置为**启用**。

    3. 如果您使用 Loki,请设置以下规范

      1. spec.loki.mode:将其设置为 LokiStack 模式,该模式会自动设置 URL、TLS、集群角色和集群角色绑定,以及 authToken 值。或者,Manual 模式允许更精细地控制这些设置的配置。

      2. spec.loki.lokistack.name:将其设置为您的LokiStack资源的名称。在本文档中,使用的是loki

    4. 可选:如果您处于大规模环境中,请考虑使用 Kafka 配置FlowCollector,以便以更具弹性、更可扩展的方式转发数据。请参阅“重要 Flow Collector 配置注意事项”部分中的“使用 Kafka 存储配置 Flow Collector 资源”。

    5. 可选:在创建FlowCollector的下一步之前,配置其他可选设置。例如,如果您选择不使用 Loki,则可以配置将流导出到 Kafka 或 IPFIX。请参阅“重要 Flow Collector 配置注意事项”部分中的“将丰富的网络流量数据导出到 Kafka 和 IPFIX”以及更多内容。

  6. 单击**创建**。

验证

要确认此操作成功,当您导航到观察时,您应该看到选项中列出的网络流量

在 OpenShift Container Platform 集群中没有应用程序流量的情况下,默认过滤器可能会显示“无结果”,这会导致没有可视化流量。在过滤器选择旁边,选择清除所有过滤器以查看流量。

启用网络可观察性中的多租户

网络可观察性 Operator 中的多租户允许和限制单个用户访问或组访问存储在 Loki 和/或 Prometheus 中的流。项目管理员可以访问。对某些命名空间访问权限有限的项目管理员只能访问这些命名空间的流。

对于开发人员,Loki 和 Prometheus 都可以使用多租户,但这需要不同的访问权限。

先决条件
步骤
  • 对于每个租户的访问,您必须具有netobserv-reader集群角色和netobserv-metrics-reader命名空间角色才能使用开发人员视角。运行以下命令以获得此级别的访问权限

    $ oc adm policy add-cluster-role-to-user netobserv-reader <user_group_or_name>
    $ oc adm policy add-role-to-user netobserv-metrics-reader <user_group_or_name> -n <namespace>
  • 对于集群范围的访问,非集群管理员必须具有netobserv-readercluster-monitoring-viewnetobserv-metrics-reader集群角色。在这种情况下,您可以使用管理员视角或开发人员视角。运行以下命令以获得此级别的访问权限

    $ oc adm policy add-cluster-role-to-user netobserv-reader <user_group_or_name>
    $ oc adm policy add-cluster-role-to-user cluster-monitoring-view <user_group_or_name>
    $ oc adm policy add-cluster-role-to-user netobserv-metrics-reader <user_group_or_name>

重要的 Flow Collector 配置注意事项

创建FlowCollector实例后,您可以重新配置它,但 Pod 将被终止并重新创建,这可能会造成中断。因此,您可以在首次创建FlowCollector时考虑配置以下选项

其他资源

有关 Flow Collector 规范以及网络可观察性 Operator 架构和资源使用的更多一般信息,请参阅以下资源

迁移已删除的 FlowCollector CRD 存储版本

网络可观察性 Operator 版本 1.6 删除了旧的和已弃用的FlowCollector API 的v1alpha1版本。如果您之前在集群上安装了此版本,即使它已从 etcd 存储中删除,它也可能仍在FlowCollector CRD 的storedVersion中引用,这会阻止升级过程。这些引用需要手动删除。

有两种方法可以删除存储的版本

  1. 使用存储版本迁移 Operator。

  2. 卸载并重新安装网络可观察性 Operator,确保安装处于干净状态。

先决条件
  • 您安装了较旧版本的 Operator,并且想要准备您的集群以安装最新版本的 Operator。或者您尝试安装网络可观察性 Operator 1.6 并遇到错误:Failed risk of data loss updating "flowcollectors.flows.netobserv.io": new CRD removes version v1alpha1 that is listed as a stored version on the existing CRD

步骤
  1. 验证旧的FlowCollector CRD 版本是否仍在storedVersion中引用

    $ oc get crd flowcollectors.flows.netobserv.io -ojsonpath='{.status.storedVersions}'
  2. 如果结果列表中出现v1alpha1,请继续执行步骤 a 使用 Kubernetes 存储版本迁移器或步骤 b 卸载并重新安装 CRD 和 Operator。

    1. 选项 1:Kubernetes 存储版本迁移器:创建一个 YAML 来定义StorageVersionMigration对象,例如migrate-flowcollector-v1alpha1.yaml

      apiVersion: migration.k8s.io/v1alpha1
      kind: StorageVersionMigration
      metadata:
        name: migrate-flowcollector-v1alpha1
      spec:
        resource:
          group: flows.netobserv.io
          resource: flowcollectors
          version: v1alpha1
      1. 保存文件。

      2. 通过运行以下命令应用StorageVersionMigration

        $ oc apply -f migrate-flowcollector-v1alpha1.yaml
      3. 更新FlowCollector CRD 以手动从storedVersion中删除v1alpha1

        $ oc edit crd flowcollectors.flows.netobserv.io
    2. 选项 2:重新安装:将网络可观察性 Operator 1.5 版本的FlowCollector CR 保存到文件,例如flowcollector-1.5.yaml

      $ oc get flowcollector cluster -o yaml > flowcollector-1.5.yaml
      1. 按照“卸载网络可观察性 Operator”中的步骤操作,这将卸载 Operator 并删除现有的FlowCollector CRD。

      2. 安装网络可观察性 Operator 最新版本 1.6.0。

      3. 使用步骤 b 中保存的备份创建FlowCollector

验证
  • 运行以下命令

    $ oc get crd flowcollectors.flows.netobserv.io -ojsonpath='{.status.storedVersions}'

    结果列表中不应再显示v1alpha1,而只显示最新版本v1beta1

安装 Kafka(可选)

Kafka Operator 支持大规模环境。Kafka 提供高吞吐量和低延迟的数据馈送,以便以更具弹性、更可扩展的方式转发网络流量数据。您可以从 Operator Hub 安装 Kafka Operator 作为Red Hat AMQ Streams,就像安装 Loki Operator 和网络可观察性 Operator 一样。请参阅“使用 Kafka 配置 FlowCollector 资源”以将 Kafka 配置为存储选项。

要卸载 Kafka,请参阅与您用于安装的方法相对应的卸载过程。

卸载网络可观察性 Operator

您可以使用 OpenShift Container Platform Web 控制台 Operator Hub 卸载网络可观察性 Operator,在Operators已安装的 Operators区域中工作。

步骤
  1. 删除FlowCollector自定义资源。

    1. 单击Flow Collector,它位于提供的 API列中网络可观察性 Operator旁边。

    2. 单击选项菜单 kebab (**集群**)并选择**删除 FlowCollector**。

  2. 卸载网络可观测性操作符。

    1. 返回到**操作符** → **已安装的操作符**区域。

    2. 单击**网络可观测性操作符**旁边的选项菜单 kebab 并选择**卸载操作符**。

    3. **主页** → **项目** 并选择 `openshift-netobserv-operator`

    4. 导航到**操作**并选择**删除项目**

  3. 移除 `FlowCollector` 自定义资源定义 (CRD)。

    1. 导航到**管理** → **CustomResourceDefinitions**。

    2. 查找**FlowCollector** 并单击选项菜单 kebab

    3. 选择**删除 CustomResourceDefinition**。

      如果已安装 Loki 操作符和 Kafka,则它们将保留,必须单独移除。此外,您可能在对象存储中还有剩余数据以及必须移除的持久卷。