이 항목에서는 Fluent Bit용 TKG 확장 v1.3.1을 배포하는 방법을 설명합니다. Fluent Bit는 빠르고 가벼운 로그 프로세서 및 전달자이며, 다양한 소스에서 애플리케이션 데이터와 로그를 수집하고 통합하여 여러 대상으로 보내는 데 사용할 수 있습니다. Fluent Bit용 TKG 확장을 배포하여 Tanzu Kubernetes 클러스터 로그를 수집하고 선택한 대상에 전달합니다.
확장 사전 요구 사항
Fluent Bit용 TKG 확장 v1.3.1을 배포하기 전에 다음 요구 사항을 준수합니다.
- 클러스터를 프로비저닝합니다. TKGS v1alpha2 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 워크플로의 내용을 참조하십시오.
- 클러스터에 연결합니다. vCenter Single Sign-On 사용자로 Tanzu Kubernetes 클러스터에 연결의 내용을 참조하십시오.
- kubectl을 실행하는 클라이언트 호스트에 TKG 확장 v1.3.1 번들 다운로드합니다.
- 대상 클러스터에 TKG 확장 사전 요구 사항 설치합니다.
Fluent Bit 확장 배포
Fluent Bit용 TKG 확장은 클러스터에 Fluent Bit 컨테이너를 설치합니다. 이 컨테이너에 대한 자세한 내용은
https://fluentbit.io/에서 참조하십시오.
확장은 VMware 공용 레지스트리(
https://projects.registry.vmware.com/)에서 컨테이너를 가져오도록 구성됩니다. 개인 레지스트리를 사용하는 경우 데이터 값 및 확장 구성 파일에서 끝점 URL이 일치하도록 변경합니다.
Fluent Bit 확장 구성에서 필드 및 옵션에 대한 설명을 참조하십시오.
컨테이너 | 리소스 유형 | 복제 | 설명 |
---|---|---|---|
Fluent Bit | DaemonSet | 6 | 로그 수집기, 집계기, 전달자 |
- 각 확장 사전 요구 사항을 완료했는지 확인합니다. 확장 사전 요구 사항의 내용을 참조하십시오.
- 디렉토리를 Fluent Bit 확장으로 변경합니다.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
tanzu-system-logging
네임스페이스와 Fluent Bit 서비스 계정 및 역할 개체를 생성합니다.kubectl apply -f namespace-role.yaml
- Fluent Bit에 사용할 로그 대상을 결정합니다. 지원되는 출력에는 Elasticsearch, HTTP, Kafka, Splunk 및 Syslog가 포함됩니다. 자세한 내용은 https://docs.fluentbit.io/manual/pipeline/outputs의 내용을 참조하십시오.
<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
<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"
- 로그 대상에 대한 데이터 값을 사용하여 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
- Fluent Bit 애플리케이션을 배포합니다.
kubectl apply -f fluent-bit-extension.yaml
성공하면
app.kappctrl.k14s.io/fluent-bit created
가 표시됩니다. - Fluent Bit 애플리케이션의 상태를 확인합니다.
kubectl get app fluent-bit -n tanzu-system-logging
성공하면 상태가Reconciling
에서Reconcile succeeded
로 변경됩니다. 상태가Reconcile failed
인 경우 Fluent Bit 배포 문제 해결 항목을 참조하십시오. - 애플리케이션에 대한 세부 상태를 봅니다.
kubectl get app fluent-bit -n tanzu-system-logging -o yaml
- 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-XXXX
는
kubectl get pods -A
를 실행할 때 볼 수 있는 고유한 포드 이름입니다.
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging
Fluent Bit 확장 업데이트
Tanzu Kubernetes 클러스터에 배포된 Fluent Bit 확장을 업데이트합니다.
- 암호에서 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
fluent-bit-data-values.yaml
에서 Fluent Bit 데이터 값을 업데이트합니다. Fluent Bit 확장 구성의 내용을 참조하십시오.- 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.yaml
의syncPeriod
를 더 작은 값으로 변경하고kubectl apply -f fluent-bit-extension.yaml
을 사용하여 Fluent Bit 확장을 적용합니다. - 확장의 상태를 확인합니다.
kubectl get app fluent-bit -n tanzu-system-logging
- 자세한 상태를 살펴보고 문제를 해결합니다.
kubectl get app fluent-bit -n tanzu-system-logging -o yaml
- 필요한 경우 문제를 해결합니다. Fluent Bit 배포 문제 해결의 내용을 참조하십시오.
Fluent Bit 확장 삭제
Tanzu Kubernetes 클러스터에서 Fluent Bit 확장을 삭제합니다.
참고: 순서대로 단계를 완료하십시오. Fluent Bit 애플리케이션이 완전히 삭제되기 전에 네임스페이스, 서비스 계정 및 역할 개체를 삭제하지 마십시오. 그러면 시스템 오류가 발생할 수 있습니다.
- 디렉토리를 Fluent Bit 확장으로 변경합니다.
cd extensions/logging/fluent-bit/
- Fluent Bit 애플리케이션을 삭제합니다.
kubectl delete app fluent-bit -n tanzu-system-logging
예상 결과:
app.kappctrl.k14s.io "fluent-bit" deleted
. - Fluent Bit 애플리케이션이 삭제되었는지 확인합니다.
kubectl get app fluent-bit -n tanzu-system-logging
예상 결과:
apps.kappctrl.k14s.io "fluent-bit" not found
. tanzu-system-logging
네임스페이스와 Fluent Bit 확장 서비스 계정 및 역할 개체를 삭제합니다.kubectl delete -f namespace-role.yaml
Fluent Bit 확장 업그레이드
기존 Fluent Bit 확장이 배포된 경우 최신 버전으로 업그레이드할 수 있습니다.
- Fluent Bit configmap을 내보냅니다.
kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
- 기존 Fluent Bit 배포를 삭제합니다. Fluent Bit 확장 삭제의 내용을 참조하십시오.
- 최신 Fluent Bit 확장을 배포합니다. Fluent Bit 확장 배포의 내용을 참조하십시오.
Fluent Bit 확장 구성
구성 값은
extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml
에 설정되어 있습니다.
매개 변수 | 설명 | 유형 | 기본값 |
---|---|---|---|
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 |