12.2. 安装日志存储


您可以使用 OpenShift CLI (oc)或 OpenShift Container Platform Web 控制台在 OpenShift Container Platform 集群上部署日志存储。

注意

Logging 5.9 发行版本不包含 OpenShift Elasticsearch Operator 的更新版本。如果您目前使用随 Logging 5.8 发布的 OpenShift Elasticsearch Operator,它将继续使用 Logging,直到 Logging 5.8 的 EOL 为止。您可以使用 Loki Operator 作为 OpenShift Elasticsearch Operator 的替代方案来管理默认日志存储。如需有关日志记录生命周期日期的更多信息,请参阅平台 Agnostic Operator

12.2.1. 部署 Loki 日志存储

您可以使用 Loki Operator 在 OpenShift Container Platform 集群中部署内部 Loki 日志存储。安装 Loki Operator 后,您必须通过创建一个 secret 来配置 Loki 对象存储,并创建一个 LokiStack 自定义资源(CR)。

12.2.1.1. Loki 部署大小

Loki 的大小使用 1x.<size> 格式,其中值 1x 是实例数量,<size> 指定性能功能。

重要

对于部署大小,无法更改 1x 值。

表 12.1. Loki 大小
 1x.demo1x.extra-small1x.small1x.medium

数据传输

仅用于演示

100GB/day

500GB/day

2TB/day

每秒查询数 (QPS)

仅用于演示

1-25 QPS at 200ms

25-50 QPS at 200ms

25-75 QPS at 200ms

复制因子

None

2

2

2

总 CPU 请求

None

14 个 vCPU

34 个 vCPU

54 个 vCPU

使用标尺的 CPU 请求总数

None

16 个 vCPU

42 个 vCPU

70 个 vCPU

内存请求总数

None

31Gi

67Gi

139Gi

使用规则器的内存请求总数

None

35Gi

83Gi

171Gi

磁盘请求总数

40Gi

430Gi

430Gi

590Gi

使用标尺的磁盘请求总数

80Gi

750Gi

750Gi

910Gi

12.2.1.2. 使用 web 控制台安装 Logging 和 Loki Operator

要在 OpenShift Container Platform 集群上安装和配置日志记录,需要首先安装用于日志存储的 Operator,如 Loki Operator。这可以通过 web 控制台中的 OperatorHub 完成。

先决条件

  • 您可以访问受支持的对象存储 (AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation)。
  • 有管理员权限。
  • 访问 OpenShift Container Platform web 控制台。

流程

  1. 在 OpenShift Container Platform Web 控制台 Administrator 视角中,进入 Operators OperatorHub
  2. Filter by keyword 字段中输入 Loki Operator。点可用 Operator 列表中的 Loki Operator,然后点 Install

    重要

    红帽不支持社区版本的 Loki Operator。

  3. 选择 stablestable-x.y 作为 更新频道

    注意

    stable 频道只为日志记录的最新版本提供更新。要继续获得之前版本的更新,您必须将订阅频道改为 stable-x.y,其中 x.y 代表您安装的日志记录的主版本和次版本。例如,stable-5.7

    Loki Operator 必须部署到全局 operator 组命名空间 openshift-operators-redhat,因此已选择了 Installation modeInstalled Namespace。如果此命名空间不存在,则会为您创建它。

  4. 选择 Enable Operator recommended cluster monitoring on this namespace

    这个选项在 Namespace 对象中设置 openshift.io/cluster-monitoring: "true" 标签。您必须设置这个选项,以确保集群监控提取 openshift-operators-redhat 命名空间。

  5. 对于 Update approval,请选择 Automatic,然后点 Install

    如果订阅中的批准策略被设置为 Automatic,则更新过程会在所选频道中提供新的 Operator 版本时立即启动。如果批准策略设为 Manual,则必须手动批准待处理的更新。

  6. 安装 Red Hat OpenShift Logging Operator:

    1. 在 OpenShift Container Platform Web 控制台中,点击 Operators OperatorHub
    2. 从可用的 Operator 列表中选择 Red Hat OpenShift Logging,然后点 Install
    3. 确定在 Installation Mode 下选择了 A specific namespace on the cluster
    4. 确定在 Installed Namespace 下的 Operator recommended namespaceopenshift-logging
    5. 选择 Enable Operator recommended cluster monitoring on this namespace

      这个选项在 Namespace 对象中设置 openshift.io/cluster-monitoring: "true" 标识。您必须选择这个选项,以确保集群监控提取 openshift-logging 命名空间。

    6. 选择 stable-5.y 作为 更新频道
    7. 选择一个批准策略

      • Automatic 策略允许 Operator Lifecycle Manager(OLM)在有新版本可用时自动更新 Operator。
      • Manual 策略需要拥有适当凭证的用户批准 Operator 更新。
    8. Install
  7. 进入 Operators Installed Operators 页面。点 All instances 选项卡。
  8. Create new 下拉列表中,选择 LokiStack
  9. 选择 YAML 视图,然后使用以下模板来创建 LokiStack CR:

    LokiStack CR 示例

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki 1
      namespace: openshift-logging 2
    spec:
      size: 1x.small 3
      storage:
        schemas:
        - version: v13
          effectiveDate: "<yyyy>-<mm>-<dd>"
        secret:
          name: logging-loki-s3 4
          type: s3 5
          credentialMode: 6
      storageClassName: <storage_class_name> 7
      tenants:
        mode: openshift-logging 8

    1
    使用名称 logging-loki
    2
    您必须指定 openshift-logging 命名空间。
    3
    指定部署大小。在日志记录 5.8 及更新的版本中,Loki 实例支持的大小选项为 1x.extra-small1x.small1x.medium
    4
    指定日志存储 secret 的名称。
    5
    指定对应的存储类型。
    6
    可选字段,日志记录 5.9 及更新的版本。支持的用户配置值如下:对于所有被支持的对象存储,静态(static) 是默认的身份验证模式,它使用存储在 Secret 中的凭证。令牌用于从一个凭证源中获取的短生命令牌。在这个模式中,静态配置不包含对象存储所需的凭证。相反,它们会使用服务在运行时生成,允许提供较短的凭证,以及更精细的控制。这个身份验证模式并没有为所有对象存储提供。对于在受管 STS 模式中运行的 Loki, token-cco 是默认值,在 STS/WIF 集群中使用 CCO。
    7
    为临时存储指定存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群的可用存储类。
    8
    LokiStack 默认为以多租户模式运行,无法修改。为每个日志类型提供一个租户: audit、infrastructure 和 application logs。这为单个用户和用户组启用对不同的日志流的访问控制。
    重要

    对于部署大小,无法更改 1x 值。

  10. Create
  11. 创建 OpenShift Logging 实例:

    1. 切换到 Administration Custom Resource Definitions 页面。
    2. Custom Resource Definitions 页面上,点 ClusterLogging
    3. Custom Resource Definition details 页中,从 Actions 菜单中选择 View Instances
    4. ClusterLoggings 页中,点 Create ClusterLogging

      您可能需要刷新页面来加载数据。

    5. 将 YAML 项中的代码替换为以下内容:

      apiVersion: logging.openshift.io/v1
      kind: ClusterLogging
      metadata:
        name: instance 1
        namespace: openshift-logging 2
      spec:
        collection:
          type: vector
        logStore:
          lokistack:
            name: logging-loki
          type: lokistack
        visualization:
          type: ocp-console
          ocpConsole:
            logsLimit: 15
        managementState: Managed
      1
      名称必须是 instance
      2
      命令空间需要为 openshift-logging

验证

  1. 进入 Operators Installed Operators
  2. 确保已选中 openshift-logging 项目。
  3. Status 列中,验证您看到了绿色的对勾标记,并为 InstallSucceeded,文本 Up to date
注意

Operator 可能会在安装完成前显示 Failed 状态。如果 Operator 安装完成并显示 InstallSucceeded 信息,请刷新页面。

12.2.1.3. 使用 Web 控制台为 Loki 对象存储创建 secret

要配置 Loki 对象存储,您必须创建一个 secret。您可以使用 OpenShift Container Platform Web 控制台创建 secret。

先决条件

  • 有管理员权限。
  • 访问 OpenShift Container Platform web 控制台。
  • 已安装 Loki Operator。

流程

  1. 在 OpenShift Container Platform Web 控制台的 Administrator 视角中进入 Workloads Secrets
  2. Create 下拉列表中选择 From YAML
  3. 创建一个 secret,它使用 access_key_idaccess_key_secret 字段指定您的凭证和 bucketnamesendpointregion 字段来定义对象存储位置。AWS 在以下示例中使用:

    Secret 对象示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: logging-loki-s3
      namespace: openshift-logging
    stringData:
      access_key_id: AKIAIOSFODNN7EXAMPLE
      access_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
      bucketnames: s3-bucket-name
      endpoint: https://s3.eu-central-1.amazonaws.com
      region: eu-central-1

其他资源

12.2.2. 在使用短期凭证的集群中部署 Loki 日志存储

对于某些存储供应商,您可以在安装过程中使用 CCO 实用程序(ccoctl) 来实现短期凭证。这些凭证在 OpenShift Container Platform 集群外创建和管理。带组件的短期凭证的手动模式

注意

在使用此凭证策略的集群上,必须在 Loki Operator 的新安装过程中配置短期凭证身份验证。您无法重新配置使用不同凭证策略的现有集群,以使用此功能。

12.2.2.1. 工作负载身份联邦

工作负载身份联邦允许使用简短的令牌对基于云的日志存储进行身份验证。

先决条件

  • OpenShift Container Platform 4.14 及更新的版本
  • 日志记录 5.9 及更新的版本

流程

  • 如果使用 OpenShift Container Platform Web 控制台安装 Loki Operator,则会自动检测到使用简短令牌的集群。系统将提示您创建角色,并提供 Loki Operator 所需的数据,以创建 CredentialsRequest 对象,该对象填充 secret。
  • 如果使用 OpenShift CLI (oc) 安装 Loki Operator,则必须使用存储供应商的适当模板手动创建订阅对象,如下例所示。此身份验证策略只支持所示的存储供应商。

Azure 订阅示例

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: loki-operator
  namespace: openshift-operators-redhat
spec:
  channel: "stable-5.9"
  installPlanApproval: Manual
  name: loki-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
  config:
    env:
      - name: CLIENTID
        value: <your_client_id>
      - name: TENANTID
        value: <your_tenant_id>
      - name: SUBSCRIPTIONID
        value: <your_subscription_id>
      - name: REGION
        value: <your_region>

AWS 订阅示例

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: loki-operator
  namespace: openshift-operators-redhat
spec:
  channel: "stable-5.9"
  installPlanApproval: Manual
  name: loki-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
  config:
    env:
    - name: ROLEARN
      value: <role_ARN>

12.2.2.2. 使用 Web 控制台创建 LokiStack 自定义资源

您可以使用 OpenShift Container Platform Web 控制台创建 LokiStack 自定义资源(CR)。

先决条件

  • 有管理员权限。
  • 访问 OpenShift Container Platform web 控制台。
  • 已安装 Loki Operator。

流程

  1. 进入 Operators Installed Operators 页面。点 All instances 选项卡。
  2. Create new 下拉列表中,选择 LokiStack
  3. 选择 YAML 视图,然后使用以下模板来创建 LokiStack CR:

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki 1
      namespace: openshift-logging
    spec:
      size: 1x.small 2
      storage:
        schemas:
          - effectiveDate: '2023-10-15'
            version: v13
        secret:
          name: logging-loki-s3 3
          type: s3 4
          credentialMode: 5
      storageClassName: <storage_class_name> 6
      tenants:
        mode: openshift-logging
    1
    使用名称 logging-loki
    2
    指定部署大小。在日志记录 5.8 及更新的版本中,Loki 实例支持的大小选项为 1x.extra-small1x.small1x.medium
    3
    指定用于日志存储的 secret。
    4
    指定对应的存储类型。
    5
    可选字段,日志记录 5.9 及更新的版本。支持的用户配置值如下:static 是所有受支持的对象存储类型的默认身份验证模式,使用存储在 Secret 中的凭证。token 是从凭证源检索的短期令牌。在这个模式中,静态配置不包含对象存储所需的凭证。相反,它们会使用服务在运行时生成,允许提供较短的凭证,以及更精细的控制。并不是所有对象存储类型都支持这个身份验证模式。当 Loki 在受管 STS 模式下运行并使用 CCO on STS/WIF 集群时,token-cco 是默认值。
    6
    为临时存储输入存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群的可用存储类。

12.2.2.3. 使用 CLI 安装 Logging 和 Loki Operator

要在 OpenShift Container Platform 集群上安装和配置日志记录,需要首先安装用于日志存储的 Operator,如 Loki Operator。这可以通过 OpenShift Container Platform CLI 完成。

先决条件

  • 有管理员权限。
  • 已安装 OpenShift CLI(oc)。
  • 您可以访问受支持的对象存储。例如:AWS S3、Google Cloud Storage、Azure、Swift、Minio 或 OpenShift Data Foundation。
注意

stable 频道只为日志记录的最新版本提供更新。要继续获得之前版本的更新,您必须将订阅频道改为 stable-x.y,其中 x.y 代表您安装的日志记录的主版本和次版本。例如,stable-5.7

  1. 为 Loki Operator 创建一个 Namespace 对象:

    Namespace 对象示例

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-operators-redhat 1
      annotations:
        openshift.io/node-selector: ""
      labels:
        openshift.io/cluster-monitoring: "true" 2

    1
    您必须指定 openshift-operators-redhat 命名空间。为了防止可能与指标(metrics)冲突,您应该将 Prometheus Cluster Monitoring 堆栈配置为从 openshift-operators-redhat 命名空间中提取指标数据,而不是从 openshift-operators 命名空间中提取。openshift-operators 命名空间可能包含社区 Operator,这些 Operator 不被信任,并可能会发布与 OpenShift Container Platform 指标相同的名称,从而导致冲突。
    2
    指定所示的标签的字符串值,以确保集群监控提取 openshift-operators-redhat 命名空间。
  2. 运行以下命令来应用 Namespace 对象:

    $ oc apply -f <filename>.yaml
  3. 为 Loki Operator 创建一个 Subscription 对象:

    Subscription 对象示例

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: loki-operator
      namespace: openshift-operators-redhat 1
    spec:
      channel: stable 2
      name: loki-operator
      source: redhat-operators 3
      sourceNamespace: openshift-marketplace

    1
    您必须指定 openshift-operators-redhat 命名空间。
    2
    指定 stable, 或 stable-5.<y> 作为频道。
    3
    指定 redhat-operators。如果 OpenShift Container Platform 集群安装在受限网络中(也称为断开连接的集群),请指定配置 Operator Lifecycle Manager (OLM) 时创建的 CatalogSource 对象的名称。
  4. 运行以下命令来应用 Subscription 对象:

    $ oc apply -f <filename>.yaml
  5. 为 Red Hat OpenShift Logging Operator 创建一个 Namespace 对象:

    namespace 对象示例

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-logging 1
    annotations:
        openshift.io/node-selector: ""
    labels:
        openshift.io/cluster-logging: "true"
        openshift.io/cluster-monitoring: "true" 2

    1
    Red Hat OpenShift Logging Operator 只适用于在 openshift-logging 命名空间中部署。
    2
    指定所示的标签的字符串值,以确保集群监控提取 openshift-operators-redhat 命名空间。
  6. 运行以下命令来应用 namespace 对象:

    $ oc apply -f <filename>.yaml
  7. 创建一个 OperatorGroup 对象:

    OperatorGroup 对象示例

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: cluster-logging
      namespace: openshift-logging 1
    spec:
      targetNamespaces:
      - openshift-logging

    1
    您必须指定 openshift-logging 命名空间。
  8. 运行以下命令来应用 OperatorGroup 对象:

    $ oc apply -f <filename>.yaml
  9. 创建 Subscription 对象:

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: cluster-logging
      namespace: openshift-logging 1
    spec:
      channel: stable 2
      name: cluster-logging
      source: redhat-operators 3
      sourceNamespace: openshift-marketplace
    1
    您必须指定 openshift-logging 命名空间。
    2
    指定 stable, 或 stable-5.<y> 作为频道。
    3
    指定 redhat-operators。如果 OpenShift Container Platform 集群安装在受限网络中(也称为断开连接的集群),请指定配置 Operator Lifecycle Manager (OLM) 时创建的 CatalogSource 对象的名称。
  10. 运行以下命令来应用 Subscription 对象:

    $ oc apply -f <filename>.yaml
  11. 创建 LokiStack CR:

    LokiStack CR 示例

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki 1
      namespace: openshift-logging 2
    spec:
      size: 1x.small 3
      storage:
        schemas:
        - version: v13
          effectiveDate: "<yyyy>-<mm>-<dd>"
        secret:
          name: logging-loki-s3 4
          type: s3 5
          credentialMode: 6
      storageClassName: <storage_class_name> 7
      tenants:
        mode: openshift-logging 8

    1
    使用名称 logging-loki
    2
    您必须指定 openshift-logging 命名空间。
    3
    指定部署大小。在日志记录 5.8 及更新的版本中,Loki 实例支持的大小选项为 1x.extra-small1x.small1x.medium
    4
    指定日志存储 secret 的名称。
    5
    指定对应的存储类型。
    6
    可选字段,日志记录 5.9 及更新的版本。支持的用户配置值如下:static 是所有受支持的对象存储类型的默认身份验证模式,使用存储在 Secret 中的凭证。token 是从凭证源检索的短期令牌。在这个模式中,静态配置不包含对象存储所需的凭证。相反,它们会使用服务在运行时生成,允许提供较短的凭证,以及更精细的控制。并不是所有对象存储类型都支持这个身份验证模式。当 Loki 在受管 STS 模式下运行并使用 CCO on STS/WIF 集群时,token-cco 是默认值。
    7
    为临时存储指定存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群的可用存储类。
    8
    LokiStack 默认为以多租户模式运行,无法修改。为每个日志类型提供一个租户: audit、infrastructure 和 application logs。这为单个用户和用户组启用对不同的日志流的访问控制。
  12. 运行以下命令来应用 LokiStack CR 对象:

    $ oc apply -f <filename>.yaml
  13. 创建一个 ClusterLogging CR 实例。

    ClusterLogging CR 对象示例

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogging
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      collection:
        type: vector
      logStore:
        lokistack:
          name: logging-loki
        type: lokistack
      visualization:
        type: ocp-console
        ocpConsole:
          logsLimit: 15
      managementState: Managed

    1
    名称必须是 instance
    2
    命令空间需要为 openshift-logging
  14. 运行以下命令来应用 ClusterLogging CR

    $ oc apply -f <filename>.yaml
  15. 运行以下命令来验证安装。

    $ oc get pods -n openshift-logging

    输出示例

    $ oc get pods -n openshift-logging
    NAME                                               READY   STATUS    RESTARTS   AGE
    cluster-logging-operator-fb7f7cf69-8jsbq           1/1     Running   0          98m
    collector-222js                                    2/2     Running   0          18m
    collector-g9ddv                                    2/2     Running   0          18m
    collector-hfqq8                                    2/2     Running   0          18m
    collector-sphwg                                    2/2     Running   0          18m
    collector-vv7zn                                    2/2     Running   0          18m
    collector-wk5zz                                    2/2     Running   0          18m
    logging-view-plugin-6f76fbb78f-n2n4n               1/1     Running   0          18m
    lokistack-sample-compactor-0                       1/1     Running   0          42m
    lokistack-sample-distributor-7d7688bcb9-dvcj8      1/1     Running   0          42m
    lokistack-sample-gateway-5f6c75f879-bl7k9          2/2     Running   0          42m
    lokistack-sample-gateway-5f6c75f879-xhq98          2/2     Running   0          42m
    lokistack-sample-index-gateway-0                   1/1     Running   0          42m
    lokistack-sample-ingester-0                        1/1     Running   0          42m
    lokistack-sample-querier-6b7b56bccc-2v9q4          1/1     Running   0          42m
    lokistack-sample-query-frontend-84fb57c578-gq2f7   1/1     Running   0          42m

12.2.2.4. 使用 CLI 为 Loki 对象存储创建 secret

要配置 Loki 对象存储,您必须创建一个 secret。您可以使用 OpenShift CLI (oc)完成此操作。

先决条件

  • 有管理员权限。
  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。

流程

  • 运行以下命令,在包含您的证书和密钥文件的目录中创建 secret:

    $ oc create secret generic -n openshift-logging <your_secret_name> \
     --from-file=tls.key=<your_key_file>
     --from-file=tls.crt=<your_crt_file>
     --from-file=ca-bundle.crt=<your_bundle_file>
     --from-literal=username=<your_username>
     --from-literal=password=<your_password>
注意

使用通用或 opaque secret 以获得最佳结果。

验证

  • 运行以下命令验证 secret 是否已创建:

    $ oc get secrets

其他资源

12.2.2.5. 使用 CLI 创建 LokiStack 自定义资源

您可以使用 OpenShift CLI (oc)创建 LokiStack 自定义资源(CR)。

先决条件

  • 有管理员权限。
  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建 LokiStack CR:

LokiStack CR 示例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki 1
  namespace: openshift-logging
spec:
  size: 1x.small 2
  storage:
    schemas:
      - effectiveDate: '2023-10-15'
        version: v13
    secret:
      name: logging-loki-s3 3
      type: s3 4
      credentialMode: 5
  storageClassName: <storage_class_name> 6
  tenants:
    mode: openshift-logging

1
使用名称 logging-loki
2
指定部署大小。在日志记录 5.8 及更新的版本中,Loki 实例支持的大小选项为 1x.extra-small1x.small1x.medium
3
指定用于日志存储的 secret。
4
指定对应的存储类型。
5
可选字段,日志记录 5.9 及更新的版本。支持的用户配置值如下:static 是所有受支持的对象存储类型的默认身份验证模式,使用存储在 Secret 中的凭证。token 是从凭证源检索的短期令牌。在这个模式中,静态配置不包含对象存储所需的凭证。相反,它们会使用服务在运行时生成,允许提供较短的凭证,以及更精细的控制。并不是所有对象存储类型都支持这个身份验证模式。当 Loki 在受管 STS 模式下运行并使用 CCO on STS/WIF 集群时,token-cco 是默认值。
6
为临时存储输入存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群的可用存储类。
  1. 运行以下命令来应用 LokiStack CR:

验证

  • 运行以下命令并查看输出,在 openshift-logging 项目中列出 pod 来验证安装:

    $ oc get pods -n openshift-logging

    确认您看到了多个用于日志记录组件的 pod,类似于以下列表:

    输出示例

    NAME                                           READY   STATUS    RESTARTS   AGE
    cluster-logging-operator-78fddc697-mnl82       1/1     Running   0          14m
    collector-6cglq                                2/2     Running   0          45s
    collector-8r664                                2/2     Running   0          45s
    collector-8z7px                                2/2     Running   0          45s
    collector-pdxl9                                2/2     Running   0          45s
    collector-tc9dx                                2/2     Running   0          45s
    collector-xkd76                                2/2     Running   0          45s
    logging-loki-compactor-0                       1/1     Running   0          8m2s
    logging-loki-distributor-b85b7d9fd-25j9g       1/1     Running   0          8m2s
    logging-loki-distributor-b85b7d9fd-xwjs6       1/1     Running   0          8m2s
    logging-loki-gateway-7bb86fd855-hjhl4          2/2     Running   0          8m2s
    logging-loki-gateway-7bb86fd855-qjtlb          2/2     Running   0          8m2s
    logging-loki-index-gateway-0                   1/1     Running   0          8m2s
    logging-loki-index-gateway-1                   1/1     Running   0          7m29s
    logging-loki-ingester-0                        1/1     Running   0          8m2s
    logging-loki-ingester-1                        1/1     Running   0          6m46s
    logging-loki-querier-f5cf9cb87-9fdjd           1/1     Running   0          8m2s
    logging-loki-querier-f5cf9cb87-fp9v5           1/1     Running   0          8m2s
    logging-loki-query-frontend-58c579fcb7-lfvbc   1/1     Running   0          8m2s
    logging-loki-query-frontend-58c579fcb7-tjf9k   1/1     Running   0          8m2s
    logging-view-plugin-79448d8df6-ckgmx           1/1     Running   0          46s

12.2.3. Loki 对象存储

Loki Operator 支持 AWS S3,以及 MinioOpenShift Data Foundation 等其他 S3 兼容对象存储。AzureGCSSwift 也支持。

对于 Loki 存储,推荐的 nomenclature 是 logging-loki-<your_storage_provider>

下表显示了每个存储供应商 LokiStack 自定义资源(CR) 中的 type 值。如需更多信息,请参阅存储供应商部分。

表 12.2. Secret 类型快速参考
存储供应商Secret type

AWS

s3

Azure

azure

Google Cloud

gcs

Minio

s3

OpenShift Data Foundation

s3

Swift

swift

12.2.3.1. AWS 存储

先决条件

流程

  • 运行以下命令,创建一个名为 logging-loki-aws 的对象存储 secret:

    $ oc create secret generic logging-loki-aws \
      --from-literal=bucketnames="<bucket_name>" \
      --from-literal=endpoint="<aws_bucket_endpoint>" \
      --from-literal=access_key_id="<aws_access_key_id>" \
      --from-literal=access_key_secret="<aws_access_key_secret>" \
      --from-literal=region="<aws_region_of_your_bucket>"
12.2.3.1.1. 启用 STS 的集群的 AWS 存储

如果您的集群启用了 STS,Cloud Credential Operator (CCO) 支持使用 AWS 令牌进行短期身份验证。

您可以运行以下命令来手动创建 Loki 对象存储 secret:

$ oc -n openshift-logging create secret generic "logging-loki-aws" \
--from-literal=bucketnames="<s3_bucket_name>" \
--from-literal=region="<bucket_region>" \
--from-literal=audience="<oidc_audience>" 1
1
可选注解,默认值为 openshift

12.2.3.2. Azure 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 您在 Azure 上创建了存储桶

流程

  • 运行以下命令,使用名称 logging-loki-azure 创建对象存储 secret:

    $ oc create secret generic logging-loki-azure \
      --from-literal=container="<azure_container_name>" \
      --from-literal=environment="<azure_environment>" \ 1
      --from-literal=account_name="<azure_account_name>" \
      --from-literal=account_key="<azure_account_key>"
    1
    支持的环境值包括 AzureGlobalAzureChinaCloudAzureGermanCloudAzureUSGovernment
12.2.3.2.1. 为 Microsoft Entra Workload ID 启用集群的 Azure 存储

如果您的集群启用了 Microsoft Entra Workload ID,Cloud Credential Operator (CCO) 支持使用 Workload ID 进行短期身份验证。

您可以运行以下命令来手动创建 Loki 对象存储 secret:

$ oc -n openshift-logging create secret generic logging-loki-azure \
--from-literal=environment="<azure_environment>" \
--from-literal=account_name="<storage_account_name>" \
--from-literal=container="<container_name>"

12.2.3.3. Google Cloud Platform 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 您在 Google Cloud Platform (GCP)上创建了一个 项目
  • 您在同一项目中创建了存储桶
  • 您在用于 GCP 身份验证的同一项目中创建了服务帐户

流程

  1. 将从 GCP 接收的服务帐户凭证复制到名为 key.json 的文件中。
  2. 运行以下命令,使用名称 logging-loki-gcs 创建对象存储 secret:

    $ oc create secret generic logging-loki-gcs \
      --from-literal=bucketname="<bucket_name>" \
      --from-file=key.json="<path/to/key.json>"

12.2.3.4. Minio 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 在集群中部署了 Minio
  • 您在 Minio 上创建了存储桶

流程

  • 运行以下命令,创建一个名为 logging-loki-minio 的对象存储 secret:

    $ oc create secret generic logging-loki-minio \
      --from-literal=bucketnames="<bucket_name>" \
      --from-literal=endpoint="<minio_bucket_endpoint>" \
      --from-literal=access_key_id="<minio_access_key_id>" \
      --from-literal=access_key_secret="<minio_access_key_secret>"

12.2.3.5. OpenShift Data Foundation 存储

先决条件

流程

  1. openshift-logging 命名空间中创建 ObjectBucketClaim 自定义资源:

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: loki-bucket-odf
      namespace: openshift-logging
    spec:
      generateBucketName: loki-bucket-odf
      storageClassName: openshift-storage.noobaa.io
  2. 运行以下命令,从关联的 ConfigMap 对象获取存储桶属性:

    BUCKET_HOST=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_HOST}')
    BUCKET_NAME=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_NAME}')
    BUCKET_PORT=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_PORT}')
  3. 运行以下命令,从关联的 secret 获取存储桶访问密钥:

    ACCESS_KEY_ID=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d)
    SECRET_ACCESS_KEY=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)
  4. 运行以下命令,创建一个名为 logging-loki-odf 的对象存储 secret:

    $ oc create -n openshift-logging secret generic logging-loki-odf \
    --from-literal=access_key_id="<access_key_id>" \
    --from-literal=access_key_secret="<secret_access_key>" \
    --from-literal=bucketnames="<bucket_name>" \
    --from-literal=endpoint="https://<bucket_host>:<bucket_port>"

12.2.3.6. Swift 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 您在 Swift 上创建了一个存储桶

流程

  • 运行以下命令,创建一个名为 logging-loki-swift 的对象存储 secret:

    $ oc create secret generic logging-loki-swift \
      --from-literal=auth_url="<swift_auth_url>" \
      --from-literal=username="<swift_usernameclaim>" \
      --from-literal=user_domain_name="<swift_user_domain_name>" \
      --from-literal=user_domain_id="<swift_user_domain_id>" \
      --from-literal=user_id="<swift_user_id>" \
      --from-literal=password="<swift_password>" \
      --from-literal=domain_id="<swift_domain_id>" \
      --from-literal=domain_name="<swift_domain_name>" \
      --from-literal=container_name="<swift_container_name>"
  • 您可以通过运行以下命令来提供项目特定数据、区域或两者:

    $ oc create secret generic logging-loki-swift \
      --from-literal=auth_url="<swift_auth_url>" \
      --from-literal=username="<swift_usernameclaim>" \
      --from-literal=user_domain_name="<swift_user_domain_name>" \
      --from-literal=user_domain_id="<swift_user_domain_id>" \
      --from-literal=user_id="<swift_user_id>" \
      --from-literal=password="<swift_password>" \
      --from-literal=domain_id="<swift_domain_id>" \
      --from-literal=domain_name="<swift_domain_name>" \
      --from-literal=container_name="<swift_container_name>" \
      --from-literal=project_id="<swift_project_id>" \
      --from-literal=project_name="<swift_project_name>" \
      --from-literal=project_domain_id="<swift_project_domain_id>" \
      --from-literal=project_domain_name="<swift_project_domain_name>" \
      --from-literal=region="<swift_region>"

12.2.4. 部署 Elasticsearch 日志存储

您可以使用 OpenShift Elasticsearch Operator 在 OpenShift Container Platform 集群上部署内部 Elasticsearch 日志存储。

注意

Logging 5.9 发行版本不包含 OpenShift Elasticsearch Operator 的更新版本。如果您目前使用随 Logging 5.8 发布的 OpenShift Elasticsearch Operator,它将继续使用 Logging,直到 Logging 5.8 的 EOL 为止。您可以使用 Loki Operator 作为 OpenShift Elasticsearch Operator 的替代方案来管理默认日志存储。如需有关日志记录生命周期日期的更多信息,请参阅平台 Agnostic Operator

12.2.4.1. Elasticsearch 的存储注意事项

每个 Elasticsearch 部署配置都需要一个持久性卷。在 OpenShift Container Platform 中,这使用持久性卷声明(PVC)来实现。

注意

如果将本地卷用于持久性存储,请不要使用原始块卷,这在 LocalVolume 对象中的 volumeMode: block 描述。Elasticsearch 无法使用原始块卷。

OpenShift Elasticsearch Operator 使用 Elasticsearch 资源名称为 PVC 命名。

Fluentd 将 systemd journal/var/log/containers/*.log 的所有日志都传输到 Elasticsearch。

Elasticsearch 需要足够内存来执行大型合并操作。如果没有足够的内存,它将会变得无响应。要避免这个问题,请评估应用程序日志数据的数量,并分配大约两倍的可用存储容量。

默认情况下,当存储容量为 85% 满时,Elasticsearch 会停止向节点分配新数据。90% 时,Elasticsearch 会在可能的情况下将现有分片重新定位到其他节点。但是,如果存储消耗低于 85% 时无节点有可用存储空间,Elasticsearch 会拒绝创建新索引并且变为 RED。

注意

这些高、低水位线值是当前版本中的 Elasticsearch 默认值。您可以修改这些默认值。虽然警报使用相同的默认值,但无法在警报中更改这些值。

12.2.4.2. 使用 Web 控制台安装 OpenShift Elasticsearch Operator

OpenShift Elasticsearch Operator 会创建和管理 OpenShift Logging 使用的 Elasticsearch 集群。

先决条件

  • Elasticsearch 是内存密集型应用程序。每个 Elasticsearch 节点都需要至少 16GB 内存来满足内存请求和限值的需要,除非 ClusterLogging 自定义资源中另有指定。

    最初的 OpenShift Container Platform 节点组可能不足以支持 Elasticsearch 集群。您必须在 OpenShift Container Platform 集群中添加额外的节点才能使用推荐或更高的内存运行,每个 Elasticsearch 节点最多可使用 64GB 个内存。

    Elasticsearch 节点都可以在较低的内存设置下运行,但在生产环境中不建议这样做。

  • 确保具有 Elasticsearch 所需的持久性存储。注意每个 Elasticsearch 节点都需要自己的存储卷。

    注意

    如果将本地卷用于持久性存储,请不要使用原始块卷,这在 LocalVolume 对象中的 volumeMode: block 描述。Elasticsearch 无法使用原始块卷。

流程

  1. 在 OpenShift Container Platform Web 控制台中,点击 Operators OperatorHub
  2. 从可用的 Operator 列表中选择 OpenShift Elasticsearch Operator,然后点 Install
  3. 确保在 Installation mode 下选择了 All namespaces on the cluster
  4. 确定在 Installed Namespace 下选择了 openshift-operators-redhat

    您必须指定 openshift-operators-redhat 命名空间。openshift-operators 命名空间可能会包含社区提供的 operator。这些 operator 不被信任,其发布的 metric 可能与 OpenShift Container Platform metric 的名称相同,从而导致冲突。

  5. 选择 Enable operator recommended cluster monitoring on this namespace

    这个选项在 Namespace 对象中设置 openshift.io/cluster-monitoring: "true" 标签。您必须设置这个选项,以确保集群监控提取 openshift-operators-redhat 命名空间。

  6. 选择 stable-5.x 作为 更新频道
  7. 选择一个 更新批准策略:

    • Automatic 策略允许 Operator Lifecycle Manager(OLM)在有新版本可用时自动更新 Operator。
    • Manual 策略需要拥有适当凭证的用户批准 Operator 更新。
  8. Install

验证

  1. 通过切换到 Operators Installed Operators 页来验证 OpenShift Elasticsearch Operator 已被安装。
  2. 确定 OpenShift Elasticsearch Operator 在所有项目中被列出,请 StatusSucceeded

12.2.4.3. 使用 CLI 安装 OpenShift Elasticsearch Operator

您可以使用 OpenShift CLI (oc)安装 OpenShift Elasticsearch Operator。

先决条件

  • 确保具有 Elasticsearch 所需的持久性存储。注意每个 Elasticsearch 节点都需要自己的存储卷。

    注意

    如果将本地卷用于持久性存储,请不要使用原始块卷,这在 LocalVolume 对象中的 volumeMode: block 描述。Elasticsearch 无法使用原始块卷。

    Elasticsearch 是内存密集型应用程序。默认情况下,OpenShift Container Platform 安装 3 个 Elasticsearch 节点,其内存请求和限制为 16 GB。初始设置的三个 OpenShift Container Platform 节点可能没有足够的内存在集群中运行 Elasticsearch。如果遇到与 Elasticsearch 相关的内存问题,在集群中添加更多 Elasticsearch 节点,而不是增加现有节点上的内存。

  • 有管理员权限。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建一个 Namespace 对象作为一个 YAML 文件:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-operators-redhat 1
      annotations:
        openshift.io/node-selector: ""
      labels:
        openshift.io/cluster-monitoring: "true" 2
    1
    您必须指定 openshift-operators-redhat 命名空间。要防止可能与指标冲突,请将 Prometheus Cluster Monitoring 堆栈配置为从 openshift-operators-redhat 命名空间中提取指标,而不是从 openshift-operators 命名空间中提取。openshift-operators 命名空间可能会包含社区 Operator,这些 Operator 不被信任,并可能会发布与 metric 的名称相同的指标,从而导致冲突。
    2
    字符串.您必须按照所示指定该标签,以确保集群监控提取 openshift-operators-redhat 命名空间。
  2. 运行以下命令来应用 Namespace 对象:

    $ oc apply -f <filename>.yaml
  3. 以 YAML 文件形式创建 OperatorGroup 对象:

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-operators-redhat
      namespace: openshift-operators-redhat 1
    spec: {}
    1
    您必须指定 openshift-operators-redhat 命名空间。
  4. 运行以下命令来应用 OperatorGroup 对象:

    $ oc apply -f <filename>.yaml
  5. 创建一个 Subscription 对象来订阅 OpenShift Elasticsearch Operator 的命名空间:

    订阅示例

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: elasticsearch-operator
      namespace: openshift-operators-redhat 1
    spec:
      channel: stable-x.y 2
      installPlanApproval: Automatic 3
      source: redhat-operators 4
      sourceNamespace: openshift-marketplace
      name: elasticsearch-operator

    1
    您必须指定 openshift-operators-redhat 命名空间。
    2
    指定 stable, 或 stable-x.y 作为频道。请参见以下注释。
    3
    Automatic 允许 Operator Lifecycle Manager (OLM) 在有新版本可用时自动更新 Operator。Manual 要求具有适当凭证的用户批准 Operator 更新。
    4
    指定 redhat-operators。如果 OpenShift Container Platform 集群安装在受限网络中(也称为断开连接的集群),请指定配置 Operator Lifecycle Manager (OLM)时创建的 CatalogSource 对象的名称。
    注意

    指定 stable 安装最新稳定版本的当前版本。使用带有 installPlanApproval: "Automatic"stable 会自动将 Operator 升级到最新的稳定主版本和次版本。

    指定 stable-x.y 会安装特定主版本的当前次版本。使用带有 installPlanApproval: "Automatic"stable-x.y 会自动将 Operator 升级到主发行版本中的最新稳定次版本。

  6. 运行以下命令来应用订阅:

    $ oc apply -f <filename>.yaml

    OpenShift Elasticsearch Operator 已安装到 openshift-operators-redhat 命名空间,并复制到集群中的每个项目。

验证

  1. 运行以下命令:

    $ oc get csv -n --all-namespaces
  2. 观察输出,并确认每个命名空间中存在 OpenShift Elasticsearch Operator 的 Pod

    输出示例

    NAMESPACE                                          NAME                            DISPLAY                            VERSION          REPLACES                        PHASE
    default                                            elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    kube-node-lease                                    elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    kube-public                                        elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    kube-system                                        elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    non-destructive-test                               elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    openshift-apiserver-operator                       elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    openshift-apiserver                                elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    ...

12.2.5. 配置日志存储

您可以通过修改 ClusterLogging 自定义资源(CR)来配置日志使用的日志存储类型。

先决条件

  • 有管理员权限。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 Red Hat OpenShift Logging Operator 和一个内部日志存储,它是 LokiStack 或 Elasticsearch。
  • 您已创建了 ClusterLogging CR。
注意

Logging 5.9 发行版本不包含 OpenShift Elasticsearch Operator 的更新版本。如果您目前使用随 Logging 5.8 发布的 OpenShift Elasticsearch Operator,它将继续使用 Logging,直到 Logging 5.8 的 EOL 为止。您可以使用 Loki Operator 作为 OpenShift Elasticsearch Operator 的替代方案来管理默认日志存储。如需有关日志记录生命周期日期的更多信息,请参阅平台 Agnostic Operator

流程

  1. 修改 ClusterLogging CR logStore 规格:

    ClusterLogging CR 示例

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogging
    metadata:
    # ...
    spec:
    # ...
      logStore:
        type: <log_store_type> 1
        elasticsearch: 2
          nodeCount: <integer>
          resources: {}
          storage: {}
          redundancyPolicy: <redundancy_type> 3
        lokistack: 4
          name: {}
    # ...

    1
    指定日志存储类型。这可以是 lokistackelasticsearch
    2
    Elasticsearch 日志存储的可选配置选项。
    3
    指定冗余类型。这个值可以是 ZeroRedundancySingleRedundancyMultipleRedundancyFullRedundancy
    4
    LokiStack 的可选配置选项。

    将 LokiStack 指定为日志存储的 ClusterLogging CR 示例

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogging
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      managementState: Managed
      logStore:
        type: lokistack
        lokistack:
          name: logging-loki
    # ...

  2. 运行以下命令来应用 ClusterLogging CR:

    $ oc apply -f <filename>.yaml
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.