• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

같은 node 의 수를 유지한 채 replica를 scale out할 때의 장점이 무엇인가요?

20.03.21 03:08 작성 조회수 293

2

꼭 수업의 어느 부분에 관련된 내용은 아니고, 항상 궁금했던 내용인데 이번에 강의를 듣게 되면서 질문해봅니다.

요점은 같은 node의 수를 유지한 채 replica를 scale out 할 때의 장점이 무엇인가입니다.

항상 orchestraion 기술을 배울 때 replica를 scale out하는 내용이 나오면서, 사용자가 많을 때는 Pod를 늘려주고, 적을 땐 줄여주고 이런 Auto Scaling 에 대한 내용이 등장하는데요,

제가 궁금한 것은 node 자체가 늘어나서 cluster의 리소스가 증가하지 않는한, replica를 늘린다고 해서 과연 성능이 좋아질까? 의문이 듭니다.

예를 들어서 원래 노드 3대, Pod 6개로 돌아가는 서비스가 있는데, 사용자가 증가한다고 해서 노드는 여전히 3대인데, Pod는 12개로 증가시킨다고 해서 얻어지는 장점이 있는지요??

제가 아는 선에서는, 한 Pod가 unhealthy할 때 잃는 능력이 적어지기 때문에 좀 더 서비스가 안정성이 있다는 것인데요.

(예를 들어 Pod가 2개인데 그 중 하나가 unhealthy면 순간적으로 서비스를 50퍼센트밖에 이용 못함.
반면 Pod가 6개인데, 그 중 하나가 unhealthy더라도 순간적으로 5/6는 이용가능하다는 안정성)

혹은 WAS의 Connection수를 늘려줄 수 있다던가.

혹은 node의 리소스를 좀 더 착취시켜서 서버 자원을 빡세게 사용한다던가(다만 이경우는 노드가 죽을 확률도 높아지긴함)

정리하자면,

보통의 컨테이너 오케스트레이션 기술에서 scale out을 할 때에는 새로운 노드도 클러스터에 추가해준 뒤 replica 수를 늘리는지, 단순히 노드에서 replica만 늘리는 경우도 있는 지 궁금합니다.

그리고 앞서 말씀드렸듯이, 같은 노드 상황에서 replica만 늘리는 행위가 어떤 장점이 있는 지 궁금합니다!

감사합니다!!

답변 4

·

답변을 작성해보세요.

2

Umi님 안녕하세요. 

여러 케이스의 Application들이 있기 때문에 해당 케이스마다 Scale Out을 했을 때, 장점이 있는 경우도 있고, 말씀하신 것처럼 딱히 장점을 없는 경우도 있습니다. 

일단 두가지 경우 장점이 없습니다. 

첫번째는 많은 리소스가 사용되지 않는 App의 경우입니다. 딱히 Scale Out을 할 필요도 없는 경우이기 때문에 굳이 부연설명을 하진 않겠습니다.

두번째는 많은 리소스가 사용되는 App이지만 App에서 허용되는 리소스가 Node의 자원량과 비슷할 때입니다. 

이경우 한 Node에 100% 자원을 사용하는 Pod가 하나가 있건, 50%자원을 사용하고 있는 Pod가 두개가 있건, 크게 성능상에 이점은 없습니다. 

그리고 다음부터는 Scale Out 했을 때의 장점이 되는 경우인데요,

먼저 전제조건으로 App을 만들었을 때는 해당 App에 효율적인 한계 리소스가 얼마나 되는지 알아야되는게 중요합니다. App에 많은 리소스를 준다고해서 무조건 성능이 좋아지는건 아니니까요.

그리고 Pod에 리소스 제한을 두지 않아서 Node에 모든 자원을 쓸 수 있도록 사용하는 건 오케스트레이션 기술을 효율적으로 쓰느 방법이 아닙니다. 

그래서 App에 최대 CPU 사용이 4Core이고 Node에 CPU가 10Core가 있을 경우에 Scale Out은 의미 있습니다.

그리고 무조건 Scale Out을 한다고 좋은건 아니기 때문에 내 App이 Scale Out을 할때 장점을 누리기 위해서 어떤 환경과 설정 조건을 갖추어야 되는지 파악하는게 중요합니다.

아무리 위에 처럼 Pod에 적절한 리소스 제한과 Node에는 충분한 자원이 있어 Scale Out후 허용 가능한 CPU/Memory 자원이 증가된다하더라도 Network단에서 많은 트래픽을 처리할 능력이 안되면 또 ScaleOut은 의미 없어 지고요.

쿠버네티스도 대규모 트래픽을 요구하는 경우 노드는 증가시키면 그만이지만 Network 단에서 많은 튜닝을 해줘야합니다.

아래 유튜브 내용이 이와 관련된 내용이고요,

https://www.youtube.com/watch?v=x8M8OtGrEp0&feature=youtu.be

그리고 말씀하신 현재 Work Node에 모든 자원이 사용됐을 경우 동적으로 Node를 추가시키는 구성도 많이 사용됩니다.

제 강좌중에 마침 최근 업로드한 AutoScaler 강의를 보시길 바라고요.

관련 유튜브 내용도 아래 링크 걸어놨습니다.

https://www.youtube.com/watch?v=8eLntXtWwKw&feature=youtu.be&t=440

그래서 결론적으로 말씀드리면 오케스트레이션에서 ScaleOut은 쉽게 사용할 수 있는 기술이지만, 잘 사용하려면 좀더 많은 공부가 필요합니다.

ps. 아침에 부랴부랴 답변을 달았는데 혹시 제가 잘못 이해했거나 더 궁금하신 사항있으시면 말씀해주세요.

1

Umi님의 프로필

Umi

질문자

2020.03.23

답변 잘 읽었습니다 감사합니다.

궁금한 게 하나 있는데, 말씀해주신 " Pod에 리소스 제한을 두지 않아서 Node에 모든 자원을 쓸 수 있도록 사용하는 건 오케스트레이션 기술을 효율적으로 쓰느 방법이 아닙니다. " 파드가 왜 Node의 모든 자원을 사용하도록 두는 것이 효율적이지 못한 방법일 수 있는 지에 대해 좀 더 알 수 있을까요?

아마 강의에서 들었던 내용으로는 ResourceQuota와 관련된 내용이지 않을까 싶은데, 제 생각에는 예를 들면 노드에서 다양한 서비스(k8s의 서비스가 아닌 어떠한 기능을 수행한다는 의미의 서비스)가 돌아가고 있는데, 어떤 Pod가 node의 리소스를 너무 많이 사용해버리면, 다른 Pod가 제대로 동작될 수 없기도 하고, node 자체가 다운되어버릴 수도 있기 때문이 아닐까 싶은데 맞을까용??

1

정승원님의 프로필

정승원

2020.03.21

오.. 저도 궁금하네요요... flask나 django 같은 동기서버의 경우 worker가 다 쓰이고 있을때 cpu 자원이 남아 돌아도 더 이상 request를 못 받는 경우를 생각해 볼 수 있겠지만... node.js 같은 비동기서버는 어떻게 되는지 궁금하네용

0

네 맞습니다. 

그리고 덧붙이면 pod가 노드위에 스케줄링 될때와 node에 부하가 많아져서 특정 pod를 죽여야할때 이런것들이 pod에 리소스 request/limit를 주는것과 영향이 있기 때문에도 중요합니다.