[Kubernetes] DeamonSet 이란?(작성중)

Dev StoryTeller·2025년 1월 30일

인프라 알아보기

목록 보기
12/12

데몬셋 은 모든(또는 일부) 노드가 파드의 사본을 실행하도록 한다. 노드가 클러스터에 추가되면 파드도 추가된다. 노드가 클러스터에서 제거되면 해당 파드는 가비지(garbage)로 수집된다. 데몬셋을 삭제하면 데몬셋이 생성한 파드들이 정리된다.
데몬셋의 일부 대표적인 용도는 다음과 같다

활용방안

  • 클러스터 스토리지용
  • 로그 수집용(V)
  • 노드 모니터링용(V)
  • 노드의 활성 지표 수집용(V)
  • 고가용성 확보(예> Nginx의 리버스 프록시 등)

단순한 케이스에서는, 각 데몬 유형의 처리를 위해서 모든 노드를 커버하는 하나의 데몬셋이 사용된다. 더 복잡한 구성에서는 단일 유형의 데몬에 여러 데몬셋을 사용할 수 있지만, 각기 다른 하드웨어 유형에 따라 서로 다른 플래그, 메모리, CPU 요구가 달라진다.

각 노드에서 정보를 수집하여 중앙의 수집 모듈에 전달하거나 하는 등 인프라 수준의 관심사와 관련된 목적으로 많이 쓰인다
노드 하나에 실행되는 파드가 하나뿐이며, 파드의 로그와 노드의 활성 지표를 수집하는 데 데몬셋을 활용 가능하다

데몬셋은 모든(일부) 노드에 파드를 배치하여 실행시킬 수 있다. 노드 하나당 파드 하나만 배치할 수 있으며, 단순하게 하나의 데몬셋을 사용하거나 단일 유형의 데몬에 여러 데몬셋을 구성하는 등 복잡하게 사용할 수도 있다
배치된 각 노드에서 정보를 수집하여 중앙 수집 모듈에 전달하는 등 인프라 수준의 관심사와 관련된 목적으로 많이 쓰인다


Nginx 리버스 프록시 활용
Nginx 파드 하나로도 수천 개의 동시 요청을 처리할 수 있다
때문에 노드 당 하나만 있더라도 프록시를 전달할 수 있다

사용이 제한적임
동일한 데이터베이스를 가져야할 때는 괜찮지만, 각 파드가 별도로 데이터베이스를 가져야 할 경우는 이야기가 다르다

Q) 서비스와 인그레스 차이?
A) 서비스는 L4에서 통신, 인그레스는 L7에서 통신한다는 점이 다르다
L4와 L7 로드밸런서의 차이?(https://velog.io/@moonblue/L4%EC%99%80-L7-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%84%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90)
요약하자면 L4는 TCP/UDP 기반으로 트래픽을 분산한다. 때문에 출발지:포트와 목적지:포트를 가지고 트래픽을 분산한다
반면 L7은 HTTP/HTPPS 기반으로 트래픽을 분산한다. 때문에 IP 주소가 아닌 HTTP Request 기반, 즉 URL path, 헤더나 쿠키, 세션 등 요청 내용으로 트래픽을 분산한다

Q) 그럼 데몬셋의 리버스 프록시 기능과 서비스/인그레스의 로드 밸런싱의 차이는 뭔지?
A) 이 문제는 리버스 프록시와 로드 밸런싱의 차이는 뭔지 라는 질문으로 귀결된다
결론을 말하자면 리버스 프록시는 라우팅 기능을, 로드밸런싱은 트래픽 분산 기능으로 서로 목적이 다른 분산이라고 할 수 있다

 우선 프록시란 클라이언트가 인터넷 / 외부 서비스와 통신할 때, 보안상의 이유나 트래픽을 개선하기 위해 사용하는 중계 서버이다
 즉, 클라이언트와 인터넷 사이에서 네트워크 통신에 도움을 주는 서버라고 할 수 있다
 이렇듯 커버하는 범위가 넓다보니 기능도 다양하다(API 라우팅, 보안, 캐싱, 무중단 배포, 로드 밸런싱 등)
 이러한 프록시 서버의 기능중 하나가 바로 라우팅이다. 라우팅이란 말 그대로 경로를 안내해주는 것
 즉 리버스 프록시 A가 존재한다면, A한테 물어보면 어디로 갈지 알려준다는 이야기이다
 이렇게 되면 직접 서버에 요청하는 일 없이 A 한테만 물어보면 되기 때문에 보안적으로 안전하며, 이것저것 생각할 필요없이 일단 A한테 물어보면 되므로 매우 편리하다
 그래서 여러 API들을 구성할 때, 앞단에 리버스 프록시를 두는 것이다
 (전화번호부라고 생각하면 됨)

 반면 로드밸런싱이란 트래픽을 분산하는 기술이다
 A라는 요청이 들어오면 단순히 경로 안내를 해주는 것이 아니라, 안정된 네트워크 환경을 제공할 수 있는 방향으로 안내를 해준다
 이는 어플리케이션의 가용성을 높이기 위한 기술인데, 가용성이란 얼마나 끊기지 않고 안정적인 서비스를 제공할 수 있는지를 말하는 척도이다
 즉 여러대의 레플리카 셋 내에서 죽은 파드에는 요청을 전달하지 않는다던가, 한쪽 파드에 트래픽이 너무 몰리지 않도록 적절히 나눠서 전달하는 등의 트래픽 부하 분산의 기능을 제공한다
 그래서 가용성이 중요한 어플리케이션에는 로드밸런서를 사용하는 것이다

Q) 리버스 프록시가 고가용성이랑 무슨 상관이야?
A) 리버스 프록시는 하나의 서버로 앞서 설명한 것처럼 단순히 API 라우팅의 역할만 하는 것이 아니다
요청을 캐싱하여 응답속도를 높이기도 하고, 서버 앞단에 있는 이점을 이용하여 SSL 적용 등 보안을 강화할 수도 있고,
upstream을 이용하여 로드 밸런싱의 기능도 할 수 있다
떄문에 고가용성은 이러한 점에서 챙길 수 있는 것이다

Q) 그럼 왜 리버스 프록시를 쓰지, 로드밸런스를 사용해? 리버스 프록시가 훨씬 기능이 많은데?
A) 앞서 말했듯이 리버스 프록시는 부하 분산만을 위한 것이 아니다. 서버 앞단에 배치되어 여러가지를 수행하기 위한 용도의 서버이다
때문에 굳이 로드밸런서를 사용할 정도로 부하가 많진 않지만, 그래도 가용성을 챙기고 싶을 때 사용하면 좋다

 반면 부하가 높은 경우는 로드밸런서를 사용하는 것이 더 좋다. 이유는 로드 밸런서란 애초에 부하 분산을 위해 만들어진 것이기 때문이다
 이 경우 기존의 리버스 프록시에 로드 밸런싱을 추가한다거나 따로 프록시 서버를 구축하기 보다는, 차라리 로드 밸런서를 하나 배치하는 것이 좋다
 즉 같은 기능을 수행하지만 선택과 집중에 따라 달리 이용하면 된다
profile
개발을 이야기하는 개발자입니다

0개의 댓글