在 OpenShift 4 上部署 ClusterLogging 运算符(Elasticsearch,Fluentd,Kibana,Curator)
这篇摘要
前一次,在AWS上安装了OpenShift 4,但这次我们要尝试安装OpenShift的日志聚合基础设施ClusterLogging,该基础设施在安装时并没有部署。
原本OpenShift是通过部署Elasticsearch,Fluentd和Kibana来收集和查看容器日志的。在OpenShift 3中,提供了通过Ansible安装计划的选项。但是在OpenShift 4.1中,改为通过ClusterLogging Operator进行安装计划的选择,因此我将记录下相关步骤作为备忘。
集群日志记录操作员概述
ClusterLogging Operator可以生成以下对象。
Curator の CronJob, ConfigMap
Fluentd の DaemonSet, Secret, ConfigMap, Service
Kibana の Deployment, Secret, Service, Route
Elasticsearch の Secret
Elasticsearch Operator の Custom Resource Object (Elasticsearch)
※ Elasticsearch Operator会生成服务、部署、配置映射等。
虽然我写了”诸如此类” ,但“Operator”就像另一个应用程序包一样,即使没有特别了解也可以进行安装。
即使在安装过程中出现问题,我认为只需通过监控各种Pod的启动,了解出现了什么问题并加以处理即可。
摘要工序
-
- Elasticsearch Operator 用の Project (Namespace) を作成
-
- Elasticsearch Operator 用に OperatorGroup を作成
-
- Elasticsearch Operator を使えるようにするための CatalogSourceConfig を作成
-
- Prometheus によるモニタリング用に Role と RoleBindings を作成
-
- ClusterLogging がデプロイされるProject (Namespace) を作成
-
- Web Console から ClusterLogging Operator を Install
-
- Web Console から ClusterLogging Operator の Subscription を作成
- ClusterLogging オブジェクトを作成
剩下的工作都由 ClusterLogging 运算符完成,过一段时间后,可以通过 Kibana 访问并搜索 Fluentd 从容器收集并汇总到 Elasticsearch 中的日志。
请详细说明步骤。
提前准备
我会预先编写仅有K8s资源对象清单的manifest文件。
其内容与官方文档相同。
apiVersion: v1
kind: Namespace
metadata:
# Namespace 名は固定で、これ以外にすることができないようです
name: openshift-operators-redhat
annotations:
openshift.io/node-selector: ""
labels:
openshift.io/cluster-logging: "true"
openshift.io/cluster-monitoring: "true"
---
apiVersion: v1
kind: Namespace
metadata:
name: openshift-logging
annotations:
openshift.io/node-selector: ""
labels:
openshift.io/cluster-logging: "true"
openshift.io/cluster-monitoring: "true"
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
# 名前を変えられるのかは調べてないですが、このままのほうが後々良さそう
name: openshift-operators-redhat
# ここは固定で変更できないようです
namespace: openshift-operators-redhat
spec: {}
apiVersion: "operators.coreos.com/v1"
kind: "CatalogSourceConfig"
metadata:
name: "elasticsearch"
namespace: "openshift-marketplace"
spec:
targetNamespace: "openshift-operators-redhat"
packages: "elasticsearch-operator"
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: prometheus-k8s
namespace: openshift-operators-redhat
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- pods
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: prometheus-k8s
namespace: openshift-operators-redhat
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: prometheus-k8s
subjects:
- kind: ServiceAccount
name: prometheus-k8s
namespace: openshift-operators-redhat
apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogging"
metadata:
name: "instance"
namespace: openshift-logging
spec:
managementState: "Managed"
logStore:
type: "elasticsearch"
elasticsearch:
nodeCount: 2
resources:
limits:
memory: 2Gi
requests:
cpu: 200m
memory: 2Gi
storage:
storageClassName: "gp2"
size: "200G"
redundancyPolicy: "SingleRedundancy"
visualization:
type: "kibana"
kibana:
resources:
limits:
memory: 1Gi
requests:
cpu: 500m
memory: 1Gi
proxy:
resources:
limits:
memory: 100Mi
requests:
cpu: 100m
memory: 100Mi
replicas: 2
curation:
type: "curator"
curator:
resources:
limits:
memory: 200Mi
requests:
cpu: 200m
memory: 200Mi
schedule: "*/10 * * * *"
collection:
logs:
type: "fluentd"
fluentd:
resources:
limits:
memory: 1Gi
requests:
cpu: 200m
memory: 1Gi
安装
部署已创建的清单(不包括 clusterlogging.yaml)。
oc apply -f eo-project.yaml
oc apply -f eo-og.yaml
oc apply -f eo-csc.yaml
oc apply -f eo-rbac.yaml
安装ClusterLogging Operator
在 OpenShift 的 Web 控制台上操作
从操作员中心选择集群日志(设置为选择OpenShift日志)。
选择安装
选择订阅
几十秒后,安装操作符将在已安装操作符中显示 Cluster Logging 的安装成功状态。
选择“创建新的”。
复制并粘贴”clusterlogging.yaml”的内容,然后选择”创建”。
直到所有的Pod都上线之前需要一些时间。
当您访问 https://kibana-openshift-logging.apps.YOURCLUSTERNAME.YOURDOMAIN/,您应该能够访问Kibana,并从那里查看存储在Elasticsearch中的日志。
引起关注的问题
类似集群日志运算符的订阅方式,我认为 Elasticsearch 运算符也需要进行订阅,但官方文档中似乎没有提到。
虽然提到了确认是否安装,但仅订阅 Elasticsearch 运算符并不会使其被订阅…(操作错误了吗?)
资料来源
- About cluster logging and OpenShift Container Platform