이 항목에서는 Fluent Bit용 TKG 확장 v1.3.1을 배포하는 방법을 설명합니다. Fluent Bit는 빠르고 가벼운 로그 프로세서 및 전달자이며, 다양한 소스에서 애플리케이션 데이터와 로그를 수집하고 통합하여 여러 대상으로 보내는 데 사용할 수 있습니다. Fluent Bit용 TKG 확장을 배포하여 Tanzu Kubernetes 클러스터 로그를 수집하고 선택한 대상에 전달합니다.

확장 사전 요구 사항

Fluent Bit용 TKG 확장 v1.3.1을 배포하기 전에 다음 요구 사항을 준수합니다.

Fluent Bit 확장 배포

Fluent Bit용 TKG 확장은 클러스터에 Fluent Bit 컨테이너를 설치합니다. 이 컨테이너에 대한 자세한 내용은 https://fluentbit.io/에서 참조하십시오.
컨테이너 리소스 유형 복제 설명
Fluent Bit DaemonSet 6 로그 수집기, 집계기, 전달자
확장은 VMware 공용 레지스트리( https://projects.registry.vmware.com/)에서 컨테이너를 가져오도록 구성됩니다. 개인 레지스트리를 사용하는 경우 데이터 값 및 확장 구성 파일에서 끝점 URL이 일치하도록 변경합니다. Fluent Bit 확장 구성에서 필드 및 옵션에 대한 설명을 참조하십시오.
  1. 각 확장 사전 요구 사항을 완료했는지 확인합니다. 확장 사전 요구 사항의 내용을 참조하십시오.
  2. 디렉토리를 Fluent Bit 확장으로 변경합니다.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
  3. tanzu-system-logging 네임스페이스와 Fluent Bit 서비스 계정 및 역할 개체를 생성합니다.
    kubectl apply -f namespace-role.yaml
  4. Fluent Bit에 사용할 로그 대상을 결정합니다. 지원되는 출력에는 Elasticsearch, HTTP, Kafka, Splunk 및 Syslog가 포함됩니다. 자세한 내용은 https://docs.fluentbit.io/manual/pipeline/outputs의 내용을 참조하십시오.
  5. <LOG_BACKEND>/fluent-bit-data-values.example.yaml 파일 중 하나를 복사하여 선택한 로그 대상에 대한 Fluent Bit 데이터 값 파일을 생성합니다.
    지원되는 각 로그 대상에 대한 예제 데이터 값 파일이 있습니다. 이 예에는 로그 대상에 대한 최소 구성이 제공됩니다.
    cp elasticsearch/fluent-bit-data-values.yaml.example elasticsearch/fluent-bit-data-values.yaml
    cp http/fluent-bit-data-values.yaml.example http/fluent-bit-data-values.yaml
    cp kafka/fluent-bit-data-values.yaml.example kafka/fluent-bit-data-values.yaml
    cp splunk/fluent-bit-data-values.yaml.example splunk/fluent-bit-data-values.yaml
    cp syslog/fluent-bit-data-values.yaml.example syslog/fluent-bit-data-values.yaml
  6. <LOG_BACKEND>/fluent-bit-data-values.yaml을 채워서 Fluent Bit 확장을 구성합니다. Fluent Bit 확장 구성에서 필드 및 옵션에 대한 설명을 참조하십시오.
    예를 들어 Fluent Bit syslog 구성에는 다음 값이 필요합니다.
    logging:
      image:
        repository: projects.registry.vmware.com/tkg # Public registry
    tkg:
      instance_name: "<TKG_INSTANCE_NAME>" #mandatory but arbitrary; appears in logs
      cluster_name: "<CLUSTER_NAME>" #name of the target tkgs cluster
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "<SYSLOG_HOST>"
        port: "<SYSLOG_PORT>"
        mode: "<SYSLOG_MODE>"
        format: "<SYSLOG_FORMAT>"
    Fluent Bit syslog에 대해 채워진 데이터 값 파일에는 다음과 같은 구성이 있을 수 있습니다.
    logging:
      image:
        repository: projects.registry.vmware.com/tkg
    tkg:
      instance_name: "tkgs-cluster-1"
      cluster_name: "tkgs-cluster-1"
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "10.192.175.59"
        port: "514"
        mode: "tcp"
        format: "rfc5424"
  7. 로그 대상에 대한 데이터 값을 사용하여 Fluent Bit 암호를 생성합니다.
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=elasticsearch/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=kafka/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=splunk/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=http/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=syslog/fluent-bit-data-values.yaml -n tanzu-system-logging
    tanzu-system-logging 네임스페이스에 secret/fluent-bit-data-values가 생성됩니다. 다음 명령을 사용하여 확인합니다.
    kubectl get secrets -n tanzu-system-logging
  8. Fluent Bit 애플리케이션을 배포합니다.
    kubectl apply -f fluent-bit-extension.yaml

    성공하면 app.kappctrl.k14s.io/fluent-bit created가 표시됩니다.

  9. Fluent Bit 애플리케이션의 상태를 확인합니다.
    kubectl get app fluent-bit -n tanzu-system-logging
    성공하면 상태가 Reconciling에서 Reconcile succeeded로 변경됩니다. 상태가 Reconcile failed인 경우 Fluent Bit 배포 문제 해결 항목을 참조하십시오.
  10. 애플리케이션에 대한 세부 상태를 봅니다.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  11. Fluent Bit DeamonSet을 확인합니다.
    kubectl get daemonsets -n tanzu-system-logging
    성공하면 다음이 표시됩니다.
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    fluent-bit   6         6         6       6            6           <none>          105s

Fluent Bit 배포 문제 해결

배포 또는 조정이 실패하면 kubectl get pods -A를 실행하여 포드 상태를 확인합니다. fluent-bit 포드는 Running이어야 합니다. 포드 상태가 ImagePullBackOff 또는 ImageCrashLoopBackOff이면 컨테이너 이미지를 끌어올 수 없습니다. 데이터 값 및 확장 YAML 파일에서 레지스트리 URL을 확인하고 정확한지 확인합니다.

컨테이너 로그를 확인합니다.여기서 name-XXXXkubectl get pods -A를 실행할 때 볼 수 있는 고유한 포드 이름입니다.
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging

Fluent Bit 확장 업데이트

Tanzu Kubernetes 클러스터에 배포된 Fluent Bit 확장을 업데이트합니다.

  1. 암호에서 Fluent Bit 데이터 값을 얻습니다.
    kubectl get secret fluent-bit-data-values -n tanzu-system-logging -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > fluent-bit-data-values.yaml
    
  2. fluent-bit-data-values.yaml에서 Fluent Bit 데이터 값을 업데이트합니다. Fluent Bit 확장 구성의 내용을 참조하십시오.
  3. Fluent Bit 데이터 값 암호를 업데이트합니다.
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=fluent-bit-data-values.yaml -n tanzu-system-logging -o yaml --dry-run | kubectl replace -f-
    
    Fluent Bit 확장이 위의 데이터 값으로 조정됩니다.
    참고: 기본적으로 kapp-controller는 5분마다 애플리케이션을 동기화합니다. 업데이트는 5분 이내에 적용됩니다. 업데이트를 즉시 적용하려면 fluent-bit-extension.yamlsyncPeriod를 더 작은 값으로 변경하고 kubectl apply -f fluent-bit-extension.yaml을 사용하여 Fluent Bit 확장을 적용합니다.
  4. 확장의 상태를 확인합니다.
    kubectl get app fluent-bit -n tanzu-system-logging
  5. 자세한 상태를 살펴보고 문제를 해결합니다.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  6. 필요한 경우 문제를 해결합니다. Fluent Bit 배포 문제 해결의 내용을 참조하십시오.

Fluent Bit 확장 삭제

Tanzu Kubernetes 클러스터에서 Fluent Bit 확장을 삭제합니다.
참고: 순서대로 단계를 완료하십시오. Fluent Bit 애플리케이션이 완전히 삭제되기 전에 네임스페이스, 서비스 계정 및 역할 개체를 삭제하지 마십시오. 그러면 시스템 오류가 발생할 수 있습니다.
  1. 디렉토리를 Fluent Bit 확장으로 변경합니다.
    cd extensions/logging/fluent-bit/
  2. Fluent Bit 애플리케이션을 삭제합니다.
    kubectl delete app fluent-bit -n tanzu-system-logging

    예상 결과: app.kappctrl.k14s.io "fluent-bit" deleted.

  3. Fluent Bit 애플리케이션이 삭제되었는지 확인합니다.
    kubectl get app fluent-bit -n tanzu-system-logging

    예상 결과: apps.kappctrl.k14s.io "fluent-bit" not found.

  4. tanzu-system-logging 네임스페이스와 Fluent Bit 확장 서비스 계정 및 역할 개체를 삭제합니다.
    kubectl delete -f namespace-role.yaml

Fluent Bit 확장 업그레이드

기존 Fluent Bit 확장이 배포된 경우 최신 버전으로 업그레이드할 수 있습니다.
  1. Fluent Bit configmap을 내보냅니다.
    kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
    
  2. 기존 Fluent Bit 배포를 삭제합니다. Fluent Bit 확장 삭제의 내용을 참조하십시오.
  3. 최신 Fluent Bit 확장을 배포합니다. Fluent Bit 확장 배포의 내용을 참조하십시오.

Fluent Bit 확장 구성

구성 값은 extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml에 설정되어 있습니다.
표 1. Fluent Bit 확장 구성
매개 변수 설명 유형 기본값
logging.namespace Fluent Bit가 배포될 네임스페이스 문자열 tanzu-system-logging
logging.service_account_name Fluent Bit 서비스 계정의 이름 문자열 fluent-bit
logging.cluster_role_name Fluent Bit에 대한 get, watch 및 list 권한을 부여하는 클러스터 역할의 이름 문자열 fluent-bit-read
logging.image.name Fluent Bit 이미지의 이름 문자열 fluent-bit
logging.image.tag Fluent Bit 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. 문자열 v1.6.9_vmware.1
logging.image.repository Fluent Bit 이미지가 있는 저장소의 위치입니다. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. 문자열 projects.registry.vmware.com/tkg
logging.image.pullPolicy Fluent Bit 이미지 Pull 정책 문자열 IfNotPresent
logging.update_strategy DaemonSet 업데이트 시 사용할 업데이트 전략 문자열 RollingUpdate
tkg.cluster_name Tanzu Kubernetes 클러스터의 이름 문자열 Null(필수 매개 변수)
tkg.instance_name 하나의 배포에서 모든 Tanzu Kubernetes 클러스터 및 감독자 클러스터가 공유하는 TKG 인스턴스의 사용자 정의 이름. 설치와 관련된 모든 이름을 사용할 수 있습니다. 문자열 Null(필수 매개 변수)
참고: 이 필드는 필수이지만 임의의 필드입니다. 로그에 나타나는 이름입니다.
fluent_bit.log_level Fluent Bit에 사용할 로그 수준 문자열 정보
fluent_bit.output_plugin Fluent-Bit가 수집한 정보를 플러시해야 하는 백엔드 설정 문자열 Null(필수 매개 변수)
fluent_bit.elasticsearch.host 대상 Elasticsearch 인스턴스의 IP 주소 또는 호스트 이름 문자열 Null(output_plugin이 elastic search인 경우 매개 변수)
fluent_bit.elasticsearch.port 대상 Elasticsearch 인스턴스의 TCP 포트 정수 Null(output_plugin이 elastic search인 경우 매개 변수)
fluent_bit.elasticsearch.buffer_size Elasticsearch 서비스의 응답을 읽는 데 사용되는 버퍼 크기를 지정. False인 경우 제한 없음으로 설정 문자열 False
fluent_bit.elasticsearch.tls Elasticsearch에 대한 TLS의 기본 설정 지정 문자열 꺼짐
fluent_bit.kafka.broker_service_name Kafka 브로커의 여러 목록 중 하나(예: 192.168.1.3:9092) 문자열 Null(output_plugin이 kafka인 경우 필수 매개 변수)
fluent_bit.kafka.topic_name Fluent Bit가 Kafka에 메시지를 보내는 데 사용할 단일 항목 또는 (,)로 구분된 항목의 목록 문자열 Null(output_plugin이 kafka인 경우 필수 매개 변수)
fluent_bit.splunk.host 대상 Splunk 서버의 IP 주소 또는 호스트 이름 문자열 Null(output_plugin이 splunk인 경우 필수 매개 변수)
fluent_bit.splunk.port 대상 Splunk 서버의 TCP 포트 정수 Null(output_plugin이 splunk인 경우 필수 매개 변수)
fluent_bit.splunk.token HTTP 이벤트 수집기 인터페이스에 대한 인증 토큰 지정 문자열 Null(output_plugin이 splunk인 경우 필수 매개 변수)
fluent_bit.http.host 대상 HTTP 서버의 IP 주소 또는 호스트 이름 문자열 Null(output_plugin이 http인 경우 필수 매개 변수)
fluent_bit.http.port 대상 HTTP 서버의 TCP 포트 정수 Null(output_plugin이 http인 경우 필수 매개 변수)
fluent_bit.http.mode 대상 웹 서버에 대한 HTTP URI 지정 문자열 Null(output_plugin이 http인 경우 필수 매개 변수)
fluent_bit.http.header_key_value HTTP 헤더 키/값 쌍. 여러 헤더를 설정할 수 있음 문자열 Null(output_plugin이 http인 경우 필수 매개 변수)
fluent_bit.http.format HTTP 요청 본문에 사용할 데이터 형식 지정 문자열 Null(output_plugin이 http인 경우 필수 매개 변수)
fluent_bit.syslog.host 원격 Syslog 서버의 도메인 또는 IP 주소 문자열 Null(output_plugin이 syslog인 경우 필수 매개 변수)
fluent_bit.syslog.port 원격 Syslog 서버의 TCP 또는 UDP 포트 정수 Null(output_plugin이 syslog인 경우 필수 매개 변수)
fluent_bit.syslog.mode TCP, UDP 및 TLS 중에 전송 유형 지정 문자열 Null(output_plugin이 syslog인 경우 필수 매개 변수)
fluent_bit.syslog.format HTTP 요청 본문에 사용할 데이터 형식 지정 문자열 Null(output_plugin이 syslog인 경우 필수 매개 변수)
host_path.volume_1 볼륨 1에 대한, 호스트 노드의 파일 시스템에서 포드로의 디렉토리 경로 문자열 /var/log
host_path.volume_2 볼륨 2에 대한, 호스트 노드의 파일 시스템에서 포드로의 디렉토리 경로 문자열 /var/lib/docker/containers
host_path.volume_3 볼륨 3에 대한, 호스트 노드의 파일 시스템에서 포드로의 디렉토리 경로 문자열 /run/log
systemd.path Systemd 저널 디렉토리의 경로 문자열 /var/log/journal