9장. 쿠버네티스 이벤트 수집 및 저장
OpenShift Container Platform 이벤트 라우터는 Kubernetes 이벤트를 감시하고 OpenShift Logging에 따른 수집을 위해 이러한 이벤트를 기록하는 Pod입니다. 이벤트 라우터를 수동으로 배포해야 합니다.
이벤트 라우터는 모든 프로젝트에서 이벤트를 수집하여 STDOUT
에 씁니다. Fluentd는 이러한 이벤트를 수집하여 OpenShift Container Platform Elasticsearch 인스턴스로 전달합니다. Elasticsearch는 이벤트를 인프라
인덱스에 인덱싱합니다.
이벤트 라우터는 Fluentd에 추가 로드를 추가하고 처리할 수 있는 다른 로그 메시지 수에 영향을 미칠 수 있습니다.
9.1. 이벤트 라우터 배포 및 구성
다음 단계를 사용하여 이벤트 라우터를 클러스터에 배포합니다. 항상 이벤트 라우터를 openshift-logging
프로젝트에 배포하여 클러스터 전체에서 이벤트를 수집해야 합니다.
다음 템플릿 오브젝트는 이벤트 라우터에 필요한 서비스 계정, 클러스터 역할 및 클러스터 역할 바인딩을 생성합니다. 템플릿은 또한 이벤트 라우터 Pod를 구성하고 배포합니다. 변경하지 않고 이 템플릿을 사용하거나 배포 오브젝트 CPU 및 메모리 요청을 변경할 수 있습니다.
사전 요구 사항
- 서비스 계정을 생성하고 클러스터 역할 바인딩을 업데이트하려면 적절한 권한이 필요합니다. 예를 들어 cluster-admin 역할이 있는 사용자로 다음 템플릿을 실행할 수 있습니다.
- OpenShift Logging이 설치되어 있어야 합니다.
프로세스
이벤트 라우터용 템플릿을 생성합니다.
kind: Template apiVersion: template.openshift.io/v1 metadata: name: eventrouter-template annotations: description: "A pod forwarding kubernetes events to OpenShift Logging stack." tags: "events,EFK,logging,cluster-logging" objects: - kind: ServiceAccount 1 apiVersion: v1 metadata: name: eventrouter namespace: ${NAMESPACE} - kind: ClusterRole 2 apiVersion: rbac.authorization.k8s.io/v1 metadata: name: event-reader rules: - apiGroups: [""] resources: ["events"] verbs: ["get", "watch", "list"] - kind: ClusterRoleBinding 3 apiVersion: rbac.authorization.k8s.io/v1 metadata: name: event-reader-binding subjects: - kind: ServiceAccount name: eventrouter namespace: ${NAMESPACE} roleRef: kind: ClusterRole name: event-reader - kind: ConfigMap 4 apiVersion: v1 metadata: name: eventrouter namespace: ${NAMESPACE} data: config.json: |- { "sink": "stdout" } - kind: Deployment 5 apiVersion: apps/v1 metadata: name: eventrouter namespace: ${NAMESPACE} labels: component: "eventrouter" logging-infra: "eventrouter" provider: "openshift" spec: selector: matchLabels: component: "eventrouter" logging-infra: "eventrouter" provider: "openshift" replicas: 1 template: metadata: labels: component: "eventrouter" logging-infra: "eventrouter" provider: "openshift" name: eventrouter spec: serviceAccount: eventrouter containers: - name: kube-eventrouter image: ${IMAGE} imagePullPolicy: IfNotPresent resources: requests: cpu: ${CPU} memory: ${MEMORY} volumeMounts: - name: config-volume mountPath: /etc/eventrouter volumes: - name: config-volume configMap: name: eventrouter parameters: - name: IMAGE 6 displayName: Image value: "registry.redhat.io/openshift-logging/eventrouter-rhel8:v0.3" - name: CPU 7 displayName: CPU value: "100m" - name: MEMORY 8 displayName: Memory value: "128Mi" - name: NAMESPACE displayName: Namespace value: "openshift-logging" 9
- 1
openshift-logging
프로젝트에서 이벤트 라우터용 서비스 계정을 생성합니다.- 2
- 클러스터의 이벤트를 모니터링할 ClusterRole을 생성합니다.
- 3
- ClusterRole을 서비스 계정에 바인딩하는 ClusterRoleBinding을 생성합니다.
- 4
openshift-logging
프로젝트에서 구성 맵을 생성하여 필요한config.json
파일을 생성합니다.- 5
openshift-logging
프로젝트에서 배포를 생성하여 이벤트 라우터 Pod를 생성하고 구성합니다.- 6
v0.3
과 같은 태그로 식별되는 이미지를 지정합니다.- 7
- 이벤트 라우터 Pod에 할당할 최소 메모리 양을 지정합니다. 기본값은
128Mi
입니다. - 8
- 이벤트 라우터 Pod에 할당할 최소 CPU 양을 지정합니다. 기본값은
100m
입니다. - 9
- 오브젝트를 설치할
openshift-logging
프로젝트를 지정합니다.
다음 명령을 사용하여 템플릿을 처리하고 적용합니다.
$ oc process -f <templatefile> | oc apply -n openshift-logging -f -
예를 들면 다음과 같습니다.
$ oc process -f eventrouter.yaml | oc apply -n openshift-logging -f -
출력 예
serviceaccount/eventrouter created clusterrole.authorization.openshift.io/event-reader created clusterrolebinding.authorization.openshift.io/event-reader-binding created configmap/eventrouter created deployment.apps/eventrouter created
openshift-logging
프로젝트에 이벤트 라우터가 설치되었는지 확인합니다.새 이벤트 라우터 Pod 보기:
$ oc get pods --selector component=eventrouter -o name -n openshift-logging
출력 예
pod/cluster-logging-eventrouter-d649f97c8-qvv8r
이벤트 라우터에서 수집한 이벤트 보기:
$ oc logs <cluster_logging_eventrouter_pod> -n openshift-logging
예를 들면 다음과 같습니다.
$ oc logs cluster-logging-eventrouter-d649f97c8-qvv8r -n openshift-logging
출력 예
{"verb":"ADDED","event":{"metadata":{"name":"openshift-service-catalog-controller-manager-remover.1632d931e88fcd8f","namespace":"openshift-service-catalog-removed","selfLink":"/api/v1/namespaces/openshift-service-catalog-removed/events/openshift-service-catalog-controller-manager-remover.1632d931e88fcd8f","uid":"787d7b26-3d2f-4017-b0b0-420db4ae62c0","resourceVersion":"21399","creationTimestamp":"2020-09-08T15:40:26Z"},"involvedObject":{"kind":"Job","namespace":"openshift-service-catalog-removed","name":"openshift-service-catalog-controller-manager-remover","uid":"fac9f479-4ad5-4a57-8adc-cb25d3d9cf8f","apiVersion":"batch/v1","resourceVersion":"21280"},"reason":"Completed","message":"Job completed","source":{"component":"job-controller"},"firstTimestamp":"2020-09-08T15:40:26Z","lastTimestamp":"2020-09-08T15:40:26Z","count":1,"type":"Normal"}}
Elasticsearch
인프라
인덱스를 사용하는 인덱스 패턴을 생성하여 이벤트를 보도록 Kibana을 사용할 수도 있습니다.