10.6. 쿠버네티스 이벤트 수집 및 저장
OpenShift Dedicated 이벤트 라우터는 Kubernetes 이벤트를 감시하고 로깅을 통해 수집을 위해 기록하는 Pod입니다. 이벤트 라우터를 수동으로 배포해야 합니다.
이벤트 라우터는 모든 프로젝트에서 이벤트를 수집하여 STDOUT
에 씁니다. 그런 다음 수집기는 이러한 이벤트를 ClusterLogForwarder
사용자 정의 리소스(CR)에 정의된 저장소로 전달합니다.
이벤트 라우터는 Fluentd에 추가 로드를 추가하고 처리할 수 있는 다른 로그 메시지 수에 영향을 미칠 수 있습니다.
10.6.1. 이벤트 라우터 배포 및 구성
다음 단계를 사용하여 이벤트 라우터를 클러스터에 배포합니다. 항상 이벤트 라우터를 openshift-logging
프로젝트에 배포하여 클러스터 전체에서 이벤트를 수집해야 합니다.
이벤트 라우터 이미지는 Red Hat OpenShift Logging Operator의 일부가 아니며 별도로 다운로드해야 합니다.
다음 템플릿
오브젝트는 이벤트 라우터에 필요한 서비스 계정, 클러스터 역할 및 클러스터 역할 바인딩을 생성합니다. 템플릿은 또한 이벤트 라우터 Pod를 구성하고 배포합니다. 템플릿을 변경하지 않고 사용하거나 템플릿을 편집하여 배포 오브젝트 CPU 및 메모리 요청을 변경할 수 있습니다.
사전 요구 사항
- 서비스 계정을 생성하고 클러스터 역할 바인딩을 업데이트하려면 적절한 권한이 필요합니다. 예를 들어 cluster-admin 역할이 있는 사용자로 다음 템플릿을 실행할 수 있습니다.
- Red Hat OpenShift Logging Operator가 설치되어 있어야 합니다.
절차
이벤트 라우터용 템플릿을 생성합니다.
apiVersion: template.openshift.io/v1 kind: Template 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 securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault volumes: - name: config-volume configMap: name: eventrouter parameters: - name: IMAGE 6 displayName: Image value: "registry.redhat.io/openshift-logging/eventrouter-rhel9:v0.4" - 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.4
와 같은 태그로 식별되는 이미지를 지정합니다.- 7
- 이벤트 라우터 Pod에 할당할 최소 CPU 양을 지정합니다. 기본값은
100m
입니다. - 8
- 이벤트 라우터 Pod에 할당할 최소 메모리 양을 지정합니다. 기본값은
128Mi
입니다. - 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.rbac.authorization.k8s.io/event-reader created clusterrolebinding.rbac.authorization.k8s.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을 사용할 수도 있습니다.