AWS/Project

[K8S 환경에 Kafka 및 EFK 배포] 구성도

jih0ssang 2024. 4. 8. 17:20

참고 블로그

https://potato-yong.tistory.com/126

https://coding-start.tistory.com/m/383

쿠버네티스 로깅 파이프라인

이번에 CKA 자격증 따면서 배운 쿠버네티스와 

AWS 강의 들으며 흥미 돋은 Kafka와

EFK 조합을 사용하여 쿠버네티스 로깅 파이프라인을 구성해보려고 한다.

 

 

구성도

fluentd  →  kafka  →  elasticsearch  →  kibana  →  visualization

logstash 없어도 될듯 ..?

 

 

fluentd 

  • 여러 다양한 리소스에서 로그 및 이벤트를 수집하여 이를 여러 대상으로 전달하도록 설계
  • 주로 컨테이너 로그 수집
  • daemonset으로 생성

 

kafka

 

elk 구축 서버 cpu:2core, ram:4gb

 

1. helm을 사용해서 kafka 생성

2. elk 구성(deployment, service)

 

각 서비스별 최소 사양 확인
온디맨드 요금 !!

헬름 : 쿠버네티스의 package manager (필요시 설치)
vsc extensions terraform 설치하듯...

 

 

 

구성 전 고려사항

EKS IP 
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/update-cluster.htmlAmazon 
EKS에서 사용할 IP주소가 5개 이상 필요
EKS 서브넷에 owned ENI가 생성
서브넷 추가로 여러 개 할당

 

kafka in k8s
Kubernetes에 Apache Kafka를 배포하면 확장성, 리소스 활용도 및 이식성이 향상됩니다. Kubernetes의 동적 프로비저닝 및 확장, 고가용성 기능, 관리 용이성은 Kafka 클러스터 운영을 단순화합니다. 다른 서비스, 선언적 구성 및 커뮤니티 지원과의 통합을 통해 이 조합은 최신 DevOps 관행에 효과적이며 이벤트 중심 아키텍처의 민첩성을 촉진합니다.
/////////////////////////////

Apache kafka KRaft
https://hoing.io/archives/4029
https://syk531.tistory.com/89
kafka 2.8 버전에서 도입된 기능이다.
Zookeeper 대신 kafka cluster 메타데이터 관리하여 기존 zookeeper+kafka 이중 운영 간소화
kafka 자체에서 메타데이터 관리

/////////////////////////////
Broker Node
- kafka cluster의 모든 노드
- Kafka에서 데이터를 저장하고 처리하는 서버
- 이러한 브로커들은 토픽으로 구성된 메시지 스트림을 생성, 저장 및 전달하는 역할 수행 - 클러스터에 속한 모든 브로커들은 동일한 데이터를 복제하고 클러스터 전체에서 서로 통신

pod/my-kafka-controller
- kafka cluster의 컨트롤러 역할
- 클러스터의 상태 관리 

service/my-kafka
- 클라이언트가 kafka cluster에 접근할 수 있도록 함.
- 클러스터의 외부로 노출됨

service/my-kafka-controller-headless
- kafka cluster 엔드포인트를 제공하는 Headless 서비스
- 개별 파드의 IP를 노출하여 클러스터 내 각각의 인스턴스에 직접 접근할 수 있도록 함

statefulset/my-kafka-controller
- kafka는 영구 볼륨이 있는 statefulset으로 배포
- 데이터를 저장 및 관리
- 파드를 관리하고 안정적인 호스트 이름과 스토리지 보장
- pod/my-kafka-controller은 statefulset이다.

서비스 엔드포인트(service/my-kafka)를 사용하여 kafka에 액세스하여 이벤트를 생성하고 사용할 수 있다.