2.3. 使用 CLI 安装集群日志记录
您可以使用 OpenShift Container Platform CLI 安装 OpenShift Elasticsearch Operator 和 Cluster Logging Operator。
先决条件
确保具有 Elasticsearch 所需的持久性存储。注意每个 Elasticsearch 节点都需要自己的存储卷。
注意如果将本地卷用于持久性存储,请不要使用原始块卷,这在
LocalVolume
对象中的volumeMode: block
描述。Elasticsearch 无法使用原始块卷。Elasticsearch 是内存密集型应用程序。默认情况下,OpenShift Container Platform 安装 3 个 Elasticsearch 节点,其内存请求和限制为 16 GB。初始设置的三个 OpenShift Container Platform 节点可能没有足够的内存在集群中运行 Elasticsearch。如果遇到与 Elasticsearch 相关的内存问题,在集群中添加更多 Elasticsearch 节点,而不是增加现有节点上的内存。
流程
使用 CLI 安装 OpenShift Elasticsearch Operator 和 Cluster Logging Operator:
为 OpenShift Elasticsearch Operator 创建命名空间。
为 OpenShift Elasticsearch Operator 创建一个命名空间对象 YAML 文件(例如
eo-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
命名空间。为了防止可能与指标(metrics)冲突,您应该将 Prometheus Cluster Monitoring 堆栈配置为从openshift-operators-redhat
命名空间中提取指标数据,而不是从openshift-operators
命名空间中提取。openshift-operators
命名空间可能包含社区 Operator,这些 Operator 不被信任,并可能会发布与 OpenShift Container Platform 指标相同的名称,从而导致冲突。 - 2
- 字符串。您必须按照所示指定该标签,以确保集群监控提取
openshift-operators-redhat
命名空间。
创建命名空间:
$ oc create -f <file-name>.yaml
例如:
$ oc create -f eo-namespace.yaml
为 Cluster Logging Operator 创建命名空间:
为 Cluster Logging Operator 创建一个命名空间对象 YAML 文件(如
clo-namespace.yaml
):apiVersion: v1 kind: Namespace metadata: name: openshift-logging annotations: openshift.io/node-selector: "" labels: openshift.io/cluster-monitoring: "true"
创建命名空间:
$ oc create -f <file-name>.yaml
例如:
$ oc create -f clo-namespace.yaml
通过创建以下对象来安装 OpenShift Elasticsearch Operator:
为 OpenShift Elasticsearch Operator 创建 Operator Group 对象 YAML 文件(例如
eo-og.yaml
):apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-operators-redhat namespace: openshift-operators-redhat 1 spec: {}
- 1
- 您必须指定
openshift-operators-redhat
命名空间。
创建 Operator Group 对象:
$ oc create -f <file-name>.yaml
例如:
$ oc create -f eo-og.yaml
创建一个 Subscription 对象 YAML 文件(例如
eo-sub.yaml
)来订阅 OpenShift Elasticsearch Operator 的命名空间。订阅示例
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: "elasticsearch-operator" namespace: "openshift-operators-redhat" 1 spec: channel: "4.6" 2 installPlanApproval: "Automatic" source: "redhat-operators" 3 sourceNamespace: "openshift-marketplace" name: "elasticsearch-operator"
创建订阅对象:
$ oc create -f <file-name>.yaml
例如:
$ oc create -f eo-sub.yaml
OpenShift Elasticsearch Operator 已安装到
openshift-operators-redhat
命名空间,并复制到集群中的每个项目。验证 Operator 安装:
$ oc get csv --all-namespaces
输出示例
NAMESPACE NAME DISPLAY VERSION REPLACES PHASE default elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded kube-node-lease elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded kube-public elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded kube-system elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded openshift-apiserver-operator elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded openshift-apiserver elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded openshift-authentication-operator elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded openshift-authentication elasticsearch-operator.4.6.0-202007012112.p0 Elasticsearch Operator 4.6.0-202007012112.p0 Succeeded ...
每个命名空间中都应该有一个 OpenShift Elasticsearch Operator。版本号可能与所示不同。
通过创建以下对象来安装 Cluster Logging Operator:
为 Cluster Logging Operator 创建一个 OperatorGroup 对象 YAML 文件(例如,
clo-og.yaml
):apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: cluster-logging namespace: openshift-logging 1 spec: targetNamespaces: - openshift-logging 2
创建 OperatorGroup 对象:
$ oc create -f <file-name>.yaml
例如:
$ oc create -f clo-og.yaml
创建一个 Subscription 对象 YAML 文件(如
clo-sub.yaml
)来为 Cluster Logging Operator 订阅命名空间。apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: cluster-logging namespace: openshift-logging 1 spec: channel: "4.6" 2 name: cluster-logging source: redhat-operators 3 sourceNamespace: openshift-marketplace
创建订阅对象:
$ oc create -f <file-name>.yaml
例如:
$ oc create -f clo-sub.yaml
Cluster Logging Operator 已安装到
openshift-logging
命名空间。验证 Operator 安装:
在
openshift-logging
命名空间中应该有一个 Cluster Logging Operator。版本号可能与所示不同。$ oc get csv -n openshift-logging
输出示例
NAMESPACE NAME DISPLAY VERSION REPLACES PHASE ... openshift-logging clusterlogging.4.6.0-202007012112.p0 Cluster Logging 4.6.0-202007012112.p0 Succeeded ...
创建集群日志记录(Cluster Logging)实例:
为 Cluster Logging Operator 创建实例对象 YAML 文件(如
clo-instance.yaml
):注意此默认集群日志记录配置应该可以支持不同的环境。请参考有关调优和配置集群日志记录组件的主题,以了解有关可对集群日志记录集群进行修改的信息。
apiVersion: "logging.openshift.io/v1" kind: "ClusterLogging" metadata: name: "instance" 1 namespace: "openshift-logging" spec: managementState: "Managed" 2 logStore: type: "elasticsearch" 3 retentionPolicy: 4 application: maxAge: 1d infra: maxAge: 7d audit: maxAge: 7d elasticsearch: nodeCount: 3 5 storage: storageClassName: "<storage-class-name>" 6 size: 200G resources: 7 limits: memory: "16Gi" requests: memory: "16Gi" proxy: 8 resources: limits: memory: 256Mi requests: memory: 256Mi redundancyPolicy: "SingleRedundancy" visualization: type: "kibana" 9 kibana: replicas: 1 curation: type: "curator" curator: schedule: "30 3 * * *" 10 collection: logs: type: "fluentd" 11 fluentd: {}
- 1
- 名称必须是
instance
。 - 2
- 集群日志记录管理状态。在一些数情况下,如果更改了集群日志记录的默认值,则必须将其设置为
Unmanaged
。但是,非受管部署不接收更新,直到集群日志记录重新变为受管状态为止。将部署重新置于受管状态可能会使您所做的任何修改被恢复。 - 3
- 用于配置 Elasticsearch 的设置。通过使用子定义资源(CR),您可以配置分片复制策略和持久性存储。
- 4
- 指定 Elasticsearch 应该保留每个日志源的时间长度。输入一个整数和时间单位: 周(w)、小时(h/H)、分钟(m)和秒。例如,
7d
代表 7 天。时间超过maxAge
的旧日志会被删除。您必须为每个日志源指定一个保留策略,否则不会为该源创建 Elasticsearch 索引。 - 5
- 指定 Elasticsearch 节点的数量。请参阅此列表后面的备注。
- 6
- 为 Elasticsearch 存储输入现有存储类的名称。为获得最佳性能,请指定分配块存储的存储类。如果没有指定存储类,OpenShift Container Platform 只会使用临时存储部署 OpenShift Logging。
- 7
- 根据需要指定 Elasticsearch 的 CPU 和内存请求。如果这些值留空,OpenShift Elasticsearch Operator 会设置默认值,足以满足大多数部署的需要。内存请求的默认值为
16Gi
,CPU 请求为1
。 - 8
- 根据需要指定 Elasticsearch 代理的 CPU 和内存请求。如果这些值留白,则 OpenShift Elasticsearch Operator 会设置默认值,它们应足以满足大多数部署的需要。内存请求的默认值为
256Mi
,CPU 请求的默认值为100m
。 - 9
- 用于配置 Kibana 的设置。通过使用 CR,您可以扩展 Kibana 来实现冗余性,并为 Kibana Pod 配置 CPU 和内存。如需更多信息,请参阅配置日志可视化工具。
- 10
- 配置 Curator 计划Curator 用于移除 OpenShift Container Platform 4.5 之前的 Elasticsearch 索引格式的数据,它将在以后的版本中删除。
- 11
- 用于配置 Fluentd 的设置。通过使用 CR,您可以配置 Fluentd CPU 和内存限值。如需更多信息,请参阅配置 Fluentd。
注意Elasticsearch control plane 节点的最大数量为三个。如果您将
nodeCount
指定为大于3
,OpenShift Container Platform 只会创建三个符合 Master 节点条件的 Elasticsearch 节点(具有 master、client 和 data 角色)。其余 Elasticsearch 节点创建为“仅数据”节点,使用 client 和 data 角色。control plane 节点执行集群范围的操作,如创建或删除索引、分片分配和跟踪节点。数据节点保管分片,并执行与数据相关的操作,如 CRUD、搜索和聚合等。与数据相关的操作会占用大量 I/O、内存和 CPU。务必要监控这些资源,并在当前节点过载时添加更多数据节点。例如,如果
nodeCount = 4
,则创建以下节点:$ oc get deployment
输出示例
cluster-logging-operator 1/1 1 1 18h elasticsearch-cd-x6kdekli-1 1/1 1 0 6m54s elasticsearch-cdm-x6kdekli-1 1/1 1 1 18h elasticsearch-cdm-x6kdekli-2 1/1 1 0 6m49s elasticsearch-cdm-x6kdekli-3 1/1 1 0 6m44s
索引模板的主分片数量等于 Elasticsearch 数据节点的数目。
创建实例:
$ oc create -f <file-name>.yaml
例如:
$ oc create -f clo-instance.yaml
这将创建集群日志记录组件、
Elasticsearch
自定义资源和组件以及 Kibana 接口。
通过列出 openshift-logging 项目中的 pod 来验证安装。
您应该会看到几个用于 Cluster Logging、Elasticsearch、Fluentd 和 Kibana 的 pod,类似于以下内容:
$ oc get pods -n openshift-logging
输出示例
NAME READY STATUS RESTARTS AGE cluster-logging-operator-66f77ffccb-ppzbg 1/1 Running 0 7m elasticsearch-cdm-ftuhduuw-1-ffc4b9566-q6bhp 2/2 Running 0 2m40s elasticsearch-cdm-ftuhduuw-2-7b4994dbfc-rd2gc 2/2 Running 0 2m36s elasticsearch-cdm-ftuhduuw-3-84b5ff7ff8-gqnm2 2/2 Running 0 2m4s fluentd-587vb 1/1 Running 0 2m26s fluentd-7mpb9 1/1 Running 0 2m30s fluentd-flm6j 1/1 Running 0 2m33s fluentd-gn4rn 1/1 Running 0 2m26s fluentd-nlgb6 1/1 Running 0 2m30s fluentd-snpkt 1/1 Running 0 2m28s kibana-d6d5668c5-rppqm 2/2 Running 0 2m39s