3.2. 安装 Loki Operator
Loki Operator 版本 5.7+ 是 Network Observabilty 支持的 Loki Operator 版本。这些版本提供了使用 openshift-network
租户配置模式创建 LokiStack
实例的功能,并为 Network Observability 提供完全自动的、集群内身份验证和授权支持。您可以通过几种方法安装 Loki。其中一种方法是使用 OpenShift Container Platform Web 控制台 Operator Hub。
先决条件
- 支持的日志存储(AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation)
- OpenShift Container Platform 4.10+
- Linux Kernel 4.18+
流程
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
OperatorHub。 - 从可用的 Operator 列表中选择 Loki Operator,然后点 Install。
- 在 Installation Mode 下,选择 All namespaces on the cluster。
验证
-
验证您安装了 Loki Operator。访问 Operators
Installed Operators 页面,并查找 Loki Operator。 - 验证 Loki Operator 是否在所有项目中 Status 为 Succeeded。
要卸载 Loki,请参考与用来安装 Loki 的方法相关的卸载过程。您可能会有剩余的 ClusterRole
和 ClusterRoleBindings
、存储在对象存储中的数据,以及需要被删除的持久性卷。
3.2.1. 为 Loki 存储创建 secret
Loki Operator 支持几个日志存储选项,如 AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation。以下示例演示了如何为 AWS S3 存储创建 secret。本例中创建的 secret loki-s3
在"Creating a LokiStack resource"中引用。您可以通过 web 控制台或 CLI 中创建此 secret。
-
使用 Web 控制台,进入到 Project
All Projects 下拉菜单,再选择 Create Project。将项目命名为 netobserv
,再点 Create。 使用右上角的 Import 图标 +。将 YAML 文件粘贴到编辑器中。
下面显示了一个 S3 存储的 secret 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
。您可以选择将不同的命名空间用于不同的组件
验证
-
创建 secret 后,您应该会在 web 控制台的 Workloads
Secrets 下看到它。
其他资源
3.2.2. 创建 LokiStack 自定义资源
您可以使用 Web 控制台或 CLI 部署 LokiStack 以创建命名空间或新项目。
以 cluster-admin
用户身份查询多个命名空间的应用程序日志,其中集群中所有命名空间的字符总和大于 5120,会导致错误 Parse error: input size too long (XXXX > 5120)
。为了更好地控制 LokiStack 中日志的访问,请使 cluster-admin
用户成为 cluster-admin
组的成员。如果 cluster-admin
组不存在,请创建它并将所需的用户添加到其中。
有关创建 cluster-admin
组的更多信息,请参阅"添加资源"部分。
流程
-
进入到 Operators
Installed Operators,从 Project 下拉菜单查看 All projects。 - 查找 Loki Operator。在详情的 Provided APIs 下,选择 LokiStack。
- 点 Create LokiStack。
确保在 Form View 或 YAML 视图中指定以下字段:
apiVersion: loki.grafana.com/v1 kind: LokiStack metadata: name: loki namespace: netobserv 1 spec: size: 1x.small storage: schemas: - version: v12 effectiveDate: '2022-06-01' secret: name: loki-s3 type: s3 storageClassName: gp3 2 tenants: mode: openshift-network
重要您不能重复使用用于集群日志记录的相同
LokiStack
。- 点 Create。
3.2.2.1. 部署大小
Loki 的大小使用 N<x>.<size>
格式,其中值 <N>
是实例的号,<size>
指定性能能力。
1x.extra-small 仅用于演示目录,它不被支持。
1x.extra-small | 1x.small | 1x.medium | |
---|---|---|---|
数据传输 | 仅用于演示。 | 500GB/day | 2TB/day |
每秒查询数 (QPS) | 仅用于演示。 | 25-50 QPS at 200ms | 25-75 QPS at 200ms |
复制因子 | 无 | 2 | 3 |
总 CPU 请求 | 5 个 vCPU | 36 个 vCPU | 54 个 vCPU |
总内存请求 | 7.5Gi | 63Gi | 139Gi |
总磁盘请求 | 150Gi | 300Gi | 450Gi |
3.2.3. LokiStack ingestion 限制和健康警报
LokiStack 实例会根据配置的大小带有默认设置。您可以覆盖其中的一些设置,如 ingestion 和查询限制。如果您在 Console 插件中或 flowlogs-pipeline
日志中发现 Loki 错误,则可能需要更新它们。Web 控制台中的自动警报会在达到这些限制时通知您。
以下是配置的限制示例:
spec: limits: global: ingestion: ingestionBurstSize: 40 ingestionRate: 20 maxGlobalStreamsPerTenant: 25000 queries: maxChunksPerQuery: 2000000 maxEntriesLimitPerQuery: 10000 maxQuerySeries: 3000
有关这些设置的更多信息,请参阅 LokiStack API 参考。
3.2.4. 配置授权和多租户
定义 ClusterRole
和 ClusterRoleBinding
。netobserv-reader
ClusterRole
启用多租户,并允许单独的用户访问或组访问 Loki 中的流。您可以创建一个 YAML 文件来定义这些角色。
流程
- 使用 Web 控制台,点 Import 图标 +。
- 将 YAML 文件放到编辑器中,然后点 Create :
ClusterRole reader yaml 示例
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: netobserv-reader 1
rules:
- apiGroups:
- 'loki.grafana.com'
resources:
- network
resourceNames:
- logs
verbs:
- 'get'
- 1
- 此角色可用于多租户。
ClusterRole writer yaml 示例
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: netobserv-writer rules: - apiGroups: - 'loki.grafana.com' resources: - network resourceNames: - logs verbs: - 'create'
ClusterRoleBinding yaml 示例
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: netobserv-writer-flp
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: netobserv-writer
subjects:
- kind: ServiceAccount
name: flowlogs-pipeline 1
namespace: netobserv
- kind: ServiceAccount
name: flowlogs-pipeline-transformer
namespace: netobserv
- 1
flowlogs-pipeline
写入 Loki。如果使用 Kafka,这个值为flowlogs-pipeline-transformer
。
3.2.5. 在网络可观察性中启用多租户
Network Observability Operator 中的多租户允许并将单独的用户访问或组访问限制为存储在 Loki 中的流。项目 admins 启用了访问权限。对某些命名空间具有有限访问权限的项目管理员只能访问这些命名空间的流。
前提条件
- 已安装 Loki Operator 版本 5.7
-
FlowCollector
spec.loki.authToken
配置必须设置为FORWARD
。 - 您必须以项目管理员身份登录
流程
运行以下命令,授权
user1
的读权限:$ oc adm policy add-cluster-role-to-user netobserv-reader user1
现在,数据仅限于允许的用户命名空间。例如,可以访问单个命名空间的用户可以查看此命名空间内部的所有流,以及从到这个命名空间流进入这个命名空间。项目管理员有权访问 OpenShift Container Platform 控制台中的 Administrator 视角,以访问 Network Flows Traffic 页面。