#docker #kubernetes #container #orchestrator #microservice #infrastructure-as-code #devops #ci #cd

제목[re]service type에 대한 궁금증2021-12-06 16:32
작성자

안녕하세요 데이터 센터 프로그래밍 조교 김민석입니다. 

질문주신 내용 확인하였습니다 저의 답변은 다음과 같습니다! 


1. ClusterIP는 cluster에만 ip를 줘서 이를 pod에 랜덤하게 연결해주는 역할! 

이라고 하셨는데 cluster는 pod들을 묶어주는 역할을 합니다. 왜냐면 실제 프로그램들이 돌아갈 때는, 데이터 베이스 pod, request를 받아들이는 pod, 연산처리를 하는 pod등 사용자가 묶어서 cluster를 구성합니다. 그래서 그 pod들은 뭔가 프로그램에 이상이 생기면 자체적으로 사라졌다가 다시 생성되는데, 이 때마다 ip가 변경이 되기 때문입니다. 즉, cluster는  pod들을 묶어 특정 서비스를 정의하는 역할을 합니다.  그렇게 되면 ClusterIP는 특정 서비스의 IP를 지정해주는 것을 얘기합니다.

 예를 들어, 우리가 네이버의 목소리 분석 AI 서비스를 인터넷을 통해 요청을 했다고 가정을 합니다. 그러면 인터넷에서 요청을 보낼 때 목소리 분석 AI 서비스가 있는 IP주소로 request를 보냅니다. 그러면 목소리 분석을 하는 cluster에 request가 도달하게 됩니다. 그 다음 cluster에서 전처리 과정을 진행하는 pod에 request를 보내고 전처리된 결과를 분석하는 pod에 보내고 사용자 계정 authentication을 확인하는 pod에서 권한이 있는지 확인을 하고 결과를 다시 사용자에게 보내는 일련의 과정이 있을 겁니다. cluster는 이렇게 서비스에 필요한 pod들을 묶어주는 역할을 하고 cluster IP는 이 서비스를 이용하기 위한 위치를 알려주는 역할을  한다고 생각해주시면 될 것 같습니다. 


2. NodePort는 nodeport를 통해 각 pod에 접근까지 가능..!

 이것은 정확하게 이해를 하셨습니다! 

좀 더 설명하면 Cluster IP를 통해서 pod들이 있는 여러가지 기능들을 묶어서 위치를 알아냈습니다! 그 다음에 특정 pod을 이용하고 싶을 때 ClusterIP:8080 을 이용해서 특정 pod의 기능을 활용할 수 있다고 생각하시면 될 것 같습니다. 


3. LoadBalancer는 Pod들에게 효율적으로 분할? 

 효율적으로 분할하는것이 맞습니다! 그런데 왜 필요한지에 대해서 궁금하다고 말씀해주셨습니다. 현재 저희가 실험하거나 공부하는 환경에서는 traffic이 그렇게 많이 몰리지 않는 상황이라 굳이 왜 효율적으로 분배를 해야하는가..? 라는 생각을 하실 수 있습니다. 

 예를 들어서 pod가 9개 있는데 이는 각각 request를 수신하는 pod 3개, 데이터 베이스 pod 3개, 데이터 전처리 pod 3개가 있다고 생각을 해봅시다. 각각의 pod는 최대 1000개의 request를 동시에 처리할 수 있습니다. 그러면 pipeline을 아무리 잘 짠다해도 동시에 9000개의 pod를 처리할 수 있겠죠! (예시라 오차는 있을 수 있습니다.) 

 만약 이런 경우에 서비스가 갑자기 엄청난 인기를 끌어서 50만 traffic이 동시에 들어옵니다. 그러면 kubernetes는 pod를 더 늘리려고 하겠죠..? 그런데 늘리는 속도가 감당이 안되고 효율적으로 분배해주는 load balancer가 없어서 한쪽에 몰리는 경우를 생각해봅시다. 당연히 1개 10개 일때는 빠르게 동작하던 pod이 1000개 10,000개의 traffic이 들어오게 되면 느려지고 버벅이는 현상이 일어나게 될겁니다. 마치 저희가 컴퓨터에서 vs코드와 powerpoint 크롬창 100개를 띄워두면 컴퓨터가 느려지는 것 처럼요. 그러면 pod는 이상한 에러를 감지하고 재시작하는 과정을 겪게 될텐데, 그러면 3개중에 2개로 서비스를 유지해야하는 불상사가 또 발생하게 될겁니다. 이런거를 방지하기 위해서 미리미리 죽지 않도록 적절히 traffic을 분산 시켜주는게 load balancer의 역할이라고 생각하시면 될 것 같습니다. 

3번 참고 링크 : https://nesoy.github.io/articles/2018-06/Load-Balancer


전체 참고 링크 : https://kubernetes.io/ko/docs/concepts/services-networking/service/

    https://www.ibm.com/docs/en/cloud-private/3.1.1?topic=networking-kubernetes-service-types


많이 부족한 실력과 작문 능력으로 오류도 많을 수 있고 이해가 잘 안되실 수도 있을 것 같습니다... 부족한 부분이나 잘못된 부분 있으면 말씀주세요! 도움이 되길 바랍니당 감사합니다. 

댓글