Cloud/Kubernetes

Fluent Bit 설치

Happy@Cloud 2024. 10. 6. 01:55

 

이 가이드는 k8s 1.30이상에 Elasticsearch 8.x를 설치한 경우 Fluent bit를 설치하는 방법을 안내합니다.

Elasticsearch 8.x 설치 가이드는 아래 글을 참조하세요.

https://happycloud-lee.tistory.com/294

 

 

엘라스틱 서치 헬름 저장소 추가

아래와 같이 엘라스틱 서치 헬름 차트 저장소를 추가 하고 차트 리스트를 업데이트 합니다.

[root@osboxes ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
[root@osboxes ~]# helm repo update

Fluent bit의 헬름 차트명과 버전을 찾습니다.

ubuntu@bastion:~/install/efk$ helm search repo fluent-bit
NAME              	CHART VERSION	APP VERSION	DESCRIPTION                                       
bitnami/fluent-bit	2.3.21       	3.1.9      	Fluent Bit is a Fast and Lightweight Log Proces..

 

설치 Config파일 작성

작업 디렉토리를 만들고 이동 합니다.

[root@osboxes ~]# mkdir -p ~/install/efk && cd ~/install/efk

 

설치를 위한 환경설정 파일을 만듭니다. fluentbit.yaml이라는 이름을 만들었다고 가정하고 설명하겠습니다. 

Elasticsearch의 Service 주소과 password는 변경 하셔야 합니다. 

SSL키를 갖고 있는 Secret이 정확한 지 확인하십시오. 위 Elasticsearch 가이드대로 설치했으면 맞을 겁니다. 

daemonset:
  enabled: true

config:
  outputs: |
    [OUTPUT]
        Name           es
        Match          *
        Host           elasticsearch-master-hl.efk.svc.cluster.local
        Port           9200
        Logstash_Format On
        Logstash_Prefix fluent-bit
        Suppress_Type_Name On
        Retry_Limit    False
        tls            On
        tls.verify     On
        tls.ca_file    /opt/bitnami/fluent-bit/certs/ca.crt
        HTTP_User      elastic
        HTTP_Passwd    P@ssw0rd$

existingSecret:
  - name: elasticsearch-master-crt
    keys: 
      tls.crt: tls.crt
      tls.key: tls.key
      ca.crt: ca.crt

extraVolumeMounts:
  - name: elasticsearch-certs
    mountPath: /opt/bitnami/fluent-bit/certs
    readOnly: true

extraVolumes:
  - name: elasticsearch-certs
    secret:
      secretName: elasticsearch-master-crt

 

이 설정에서 중요한 부분은 Elasticsearch 연결 정보를 셋팅하는 아래 부분입니다. 

- Host: Elasticsearch의 service객체 주소로서, SSL통신을 하므로 인증서의 SAN(Subject Alternative Name)과 반드시 일치해야 함

- HTTP_Passwd: elastic 서버 인증 암호. Secret 'elasticsearch-master-credentials'에서 구함

CA, Cert, Key는 Secret 'elasticsearch-master-crt'에서 마운트 함

 

아래는 SSL인증서(tls.crt)의 SAN값을 확인하는 방법입니다. 

kubectl get secret elasticsearch-master-crt -o jsonpath="{.data['tls\.crt']}" | base64 --decode > elastic-tls.crt

openssl x509 -in elastic-tls.crt -text -noout

아래와 같이 SAN을 확인할 수 있습니다. 

...

            X509v3 Subject Alternative Name: 
                DNS:*.elasticsearch-master-hl.efk.svc.cluster.local, DNS:elasticsearch-master-hl.efk.svc.cluster.local, DNS:elasticsearch-master, DNS:127.0.0.1, DNS:localhost


...

 

설치하기

namespace를 만들고 이동합니다. 

k create ns efk
kubens efk

helm 명령으로 설치합니다. 

helm upgrade fluentbit -i -f fluentbit.yaml bitnami/fluent-bit

Pod가 실행될때까지 기다립니다. 아래와 같이 모든 Pod가 실행되어야 합니다. 

파드는 DaemonSet으로 설치되므로 각 노드 당 1개씩 생성됩니다. 

ubuntu@bastion:~/install/efk$ k get po
NAME                                     READY   STATUS    RESTARTS   AGE
elasticsearch-coordinating-0             1/1     Running   0          6h54m
elasticsearch-data-0                     1/1     Running   0          6h54m
elasticsearch-ingest-0                   1/1     Running   0          6h54m
elasticsearch-kibana-6486cc7b88-vq9fd    1/1     Running   0          6h54m
elasticsearch-master-0                   1/1     Running   0          6h54m
elasticsearch-metrics-85c74dfbdf-hb69p   1/1     Running   0          6h54m
fluentbit-fluent-bit-fcsp6               1/1     Running   0          9m17s
fluentbit-fluent-bit-qs4xg               1/1     Running   0          9m17s
fluentbit-fluent-bit-rkgh2               1/1     Running   0          9m17s
fluentbit-fluent-bit-v8gtg               1/1     Running   0          9m17s