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
值。
1x.demo | 1x.extra-small | 1x.small | 1x.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 控制台。
流程
-
在 OpenShift Container Platform Web 控制台 Administrator 视角中,进入 Operators
OperatorHub。 在 Filter by keyword 字段中输入 Loki Operator。点可用 Operator 列表中的 Loki Operator,然后点 Install。
重要红帽不支持社区版本的 Loki Operator。
选择 stable 或 stable-x.y 作为 更新频道。
注意stable 频道只为日志记录的最新版本提供更新。要继续获得之前版本的更新,您必须将订阅频道改为 stable-x.y,其中
x.y
代表您安装的日志记录的主版本和次版本。例如,stable-5.7。Loki Operator 必须部署到全局 operator 组命名空间
openshift-operators-redhat
,因此已选择了 Installation mode 和 Installed Namespace。如果此命名空间不存在,则会为您创建它。选择 Enable Operator recommended cluster monitoring on this namespace。
这个选项在
Namespace
对象中设置openshift.io/cluster-monitoring: "true"
标签。您必须设置这个选项,以确保集群监控提取openshift-operators-redhat
命名空间。对于 Update approval,请选择 Automatic,然后点 Install。
如果订阅中的批准策略被设置为 Automatic,则更新过程会在所选频道中提供新的 Operator 版本时立即启动。如果批准策略设为 Manual,则必须手动批准待处理的更新。
安装 Red Hat OpenShift Logging Operator:
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
OperatorHub。 - 从可用的 Operator 列表中选择 Red Hat OpenShift Logging,然后点 Install。
- 确定在 Installation Mode 下选择了 A specific namespace on the cluster。
- 确定在 Installed Namespace 下的 Operator recommended namespace 是 openshift-logging。
选择 Enable Operator recommended cluster monitoring on this namespace。
这个选项在 Namespace 对象中设置
openshift.io/cluster-monitoring: "true"
标识。您必须选择这个选项,以确保集群监控提取openshift-logging
命名空间。- 选择 stable-5.y 作为 更新频道。
选择一个批准策略。
- Automatic 策略允许 Operator Lifecycle Manager(OLM)在有新版本可用时自动更新 Operator。
- Manual 策略需要拥有适当凭证的用户批准 Operator 更新。
- 点 Install。
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
-
进入 Operators
Installed Operators 页面。点 All instances 选项卡。 - 在 Create new 下拉列表中,选择 LokiStack。
选择 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-small
、1x.small
或1x.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
值。- 点 Create。
创建 OpenShift Logging 实例:
-
切换到 Administration
Custom Resource Definitions 页面。 - 在 Custom Resource Definitions 页面上,点 ClusterLogging。
- 在 Custom Resource Definition details 页中,从 Actions 菜单中选择 View Instances。
在 ClusterLoggings 页中,点 Create ClusterLogging。
您可能需要刷新页面来加载数据。
将 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
-
切换到 Administration
验证
-
进入 Operators
Installed Operators。 - 确保已选中 openshift-logging 项目。
- 在 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。
流程
-
在 OpenShift Container Platform Web 控制台的 Administrator 视角中进入 Workloads
Secrets。 - 从 Create 下拉列表中选择 From YAML。
创建一个 secret,它使用
access_key_id
和access_key_secret
字段指定您的凭证和bucketnames
、endpoint
和region
字段来定义对象存储位置。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。
流程
-
进入 Operators
Installed Operators 页面。点 All instances 选项卡。 - 在 Create new 下拉列表中,选择 LokiStack。
选择 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-small
、1x.small
或1x.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。
为 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
命名空间。
运行以下命令来应用
Namespace
对象:$ oc apply -f <filename>.yaml
为 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
运行以下命令来应用
Subscription
对象:$ oc apply -f <filename>.yaml
为 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
运行以下命令来应用
namespace
对象:$ oc apply -f <filename>.yaml
创建一个
OperatorGroup
对象:OperatorGroup
对象示例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: cluster-logging namespace: openshift-logging 1 spec: targetNamespaces: - openshift-logging
- 1
- 您必须指定
openshift-logging
命名空间。
运行以下命令来应用
OperatorGroup
对象:$ oc apply -f <filename>.yaml
创建
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
运行以下命令来应用
Subscription
对象:$ oc apply -f <filename>.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-small
、1x.small
或1x.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。这为单个用户和用户组启用对不同的日志流的访问控制。
运行以下命令来应用
LokiStack CR
对象:$ oc apply -f <filename>.yaml
创建一个
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
运行以下命令来应用
ClusterLogging CR
:$ oc apply -f <filename>.yaml
运行以下命令来验证安装。
$ 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
)。
流程
-
创建
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-small
、1x.small
或1x.medium
。 - 3
- 指定用于日志存储的 secret。
- 4
- 指定对应的存储类型。
- 5
- 可选字段,日志记录 5.9 及更新的版本。支持的用户配置值如下:
static
是所有受支持的对象存储类型的默认身份验证模式,使用存储在 Secret 中的凭证。token
是从凭证源检索的短期令牌。在这个模式中,静态配置不包含对象存储所需的凭证。相反,它们会使用服务在运行时生成,允许提供较短的凭证,以及更精细的控制。并不是所有对象存储类型都支持这个身份验证模式。当 Loki 在受管 STS 模式下运行并使用 CCO on STS/WIF 集群时,token-cco
是默认值。 - 6
- 为临时存储输入存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用
oc get storageclasses
命令列出集群的可用存储类。-
运行以下命令来应用
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,以及 Minio 和 OpenShift Data Foundation 等其他 S3 兼容对象存储。Azure、GCS 和 Swift 也支持。
对于 Loki 存储,推荐的 nomenclature 是 logging-loki-<your_storage_provider>
。
下表显示了每个存储供应商 LokiStack
自定义资源(CR) 中的 type
值。如需更多信息,请参阅存储供应商部分。
存储供应商 | Secret type 值 |
---|---|
AWS | s3 |
Azure | azure |
Google Cloud | gcs |
Minio | s3 |
OpenShift Data Foundation | s3 |
Swift | swift |
12.2.3.1. AWS 存储
先决条件
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc
)。 - 您在 AWS 上创建了存储桶。
- 您创建了 AWS IAM 策略和 IAM 用户。
流程
运行以下命令,创建一个名为
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
- 支持的环境值包括
AzureGlobal
、AzureChinaCloud
、AzureGermanCloud
或AzureUSGovernment
。
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 存储
先决条件
流程
-
将从 GCP 接收的服务帐户凭证复制到名为
key.json
的文件中。 运行以下命令,使用名称
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 存储
流程
运行以下命令,创建一个名为
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 存储
先决条件
- 已安装 Loki Operator。
-
已安装 OpenShift CLI(
oc
)。 - 您已部署了 OpenShift Data Foundation。
- 为对象存储配置了 OpenShift Data Foundation 集群。
流程
在
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
运行以下命令,从关联的
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}')
运行以下命令,从关联的 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)
运行以下命令,创建一个名为
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 无法使用原始块卷。
流程
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
OperatorHub。 - 从可用的 Operator 列表中选择 OpenShift Elasticsearch Operator,然后点 Install。
- 确保在 Installation mode 下选择了 All namespaces on the cluster。
确定在 Installed Namespace 下选择了 openshift-operators-redhat。
您必须指定
openshift-operators-redhat
命名空间。openshift-operators
命名空间可能会包含社区提供的 operator。这些 operator 不被信任,其发布的 metric 可能与 OpenShift Container Platform metric 的名称相同,从而导致冲突。选择 Enable operator recommended cluster monitoring on this namespace。
这个选项在
Namespace
对象中设置openshift.io/cluster-monitoring: "true"
标签。您必须设置这个选项,以确保集群监控提取openshift-operators-redhat
命名空间。- 选择 stable-5.x 作为 更新频道。
选择一个 更新批准策略:
- Automatic 策略允许 Operator Lifecycle Manager(OLM)在有新版本可用时自动更新 Operator。
- Manual 策略需要拥有适当凭证的用户批准 Operator 更新。
- 点 Install。
验证
-
通过切换到 Operators
Installed Operators 页来验证 OpenShift Elasticsearch Operator 已被安装。 - 确定 OpenShift Elasticsearch Operator 在所有项目中被列出,请 Status 为 Succeeded。
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
)。
流程
创建一个
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
命名空间。
运行以下命令来应用
Namespace
对象:$ oc apply -f <filename>.yaml
以 YAML 文件形式创建
OperatorGroup
对象:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-operators-redhat namespace: openshift-operators-redhat 1 spec: {}
- 1
- 您必须指定
openshift-operators-redhat
命名空间。
运行以下命令来应用
OperatorGroup
对象:$ oc apply -f <filename>.yaml
创建一个
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 升级到主发行版本中的最新稳定次版本。运行以下命令来应用订阅:
$ oc apply -f <filename>.yaml
OpenShift Elasticsearch Operator 已安装到
openshift-operators-redhat
命名空间,并复制到集群中的每个项目。
验证
运行以下命令:
$ oc get csv -n --all-namespaces
观察输出,并确认每个命名空间中存在 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。
流程
修改
ClusterLogging
CRlogStore
规格: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: {} # ...
将 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 # ...
运行以下命令来应用
ClusterLogging
CR:$ oc apply -f <filename>.yaml