항상 새로운 기술을 배우고 도입하는데 고민해야하는것이 있다
왜 기술을 사용해야하지? 라는 의문을 갖는다
지금도 k8s를 막 배우기 시작한 초짜인데
왜 k8s를 써야하는지 모르겠다.
(아직 학부생이고, 현업정도의 스케일을 가진 app을 사용해보지 않아서 그런거 같음)
해당 글을 적으면서 왜 k8s를 사용해야 하는지 정리하려고 한다.
뇌피셜이 좀 있기때문에 틀린 내용이나 다르게 생각할 수 있음
Docker만으로 안되나?
물론 Docker만으로도 가능하다.
하지만 가벼운 어플리케이션에서만 가능한거 같다.
간단하게 WAS 서버 1개가 있고 그에 연결된 DB가 있는 간단한 프로젝트(학부생에서 할 수 있는 대부분 토이 프로젝트) 는 Docker로 컨티이너화 해서 하는것이 오히려 효울적이라 생각한다.
k8s를 사용하면 배보다 배꼽이 더 큰 일이 일어남
왜 k8s를 사용하는것이 비효율적인가를 생각해보았는데
대부분의 간단한 학부생 프로젝트는 개발하고 끝이기 때문이다.
즉 실제 운영하는 경험이 적고
k8s는 운영하는데서 빛을 보기 때문이다.
ex)
지속적인 어플리케이션 업데이트 > CI/CD 구축
무중단 배포
MSA 구조에서의 서로간의 네트워크 처리
물론 docker-compose로 다중 컨테이너를 관리할 수 있다.
하지만 이정도로 관리할 수 있는것도 어느정도 가벼운 서비스라고 생각한다.
(여러개의 어플리케이션이 있는 MSA아키텍쳐를 가진 서비스에서 네트워크 처리는 어떻게 할거고 scaleout, 로드밸런싱 등 여러가지를 수작업으로 해야함....)
그럼 k8s는 언제 사용하는게 맞을까?
내가 생각하는 가장 큰 이유는
1. 다량의 트래픽 호출량이 있을때
k8s는 다량의 네트워크 트래픽을 로드 밸런싱 해주는 기능이 있다.
만약 docker만을 사용한다면 nginx를 사용하여 로드밸런싱을 해줄 수 있지만, 네트워크 설정을 일일이 해줘야하고( domain 혹은 IP 주소 등) 컨테이너가 한두개면 괜찮은데 이게 만약 100개가 된다면 사람이 할 수 있는 일이 아니게 된다...
k8s는 여러개의 컨테이너를 관리하기 용이하고, 관리가 용이한 만큼 로드밸런싱에서 내부 네트워크 설정도 자동으로 해준다.(label링?)
2. 무중단 배포를 원할때
docker만을 사용해서도 반 무중단배포는 가능하다.
docker만을 사용한다면 nginx로 일일이 컨테이너마다 목적지를 설정해야하고,
무중단 배포를 구성하려면 한 컨테이너가 업데이트시(죽었을때) 다른 컨테이너로만 요청이 가게끔 일일이 수정해야한다.
k8s를 사용하면 RollingUpdate, blueGreen deployment등을 사용하여 무중단 배포가 가능하게 한다.
3.네트워크 설정
https://jonnung.dev/kubernetes/2020/02/24/kubernetes-pod-networking/
(네트워크 관련해서는 저도 아직 잘 모르기에 해당 블로그를 참고하였습니다.)
쿠버네티스는 가상 네트워크를 제공한다(docker도 제공함-veth)
그렇기에 pod내부의 컨테이너간 통신은 localhost로 통신가능하며
pod끼리의 통신도 가능하다.
그리고 ClusterIP, NodePort, LoadBalancing과 같은 전략을 제공하여 해당 application을 외부로 노출시킬지를 결정할 수 있도록 해준다.
4. 다중 컨테이너 매니지
난 개인적으로 이것이 k8s가 주는 장점이라 생각한다.
위에서도 언급했듯이 docker로도 k8s와 같은 구성이 불가능한건 아니다.
하지만 현재 MSA 아키텍쳐가 주목받고 있고 많은 기업들이 MSA 형태로 가져가길 원한다.
즉 기업과 같이 다량의 트래픽이 있으면서 MSA 형태를 가지면 당연히 많은 container를 관리해야한다.
(요즘 container로 구성하는긴 기본이니까??...)
이러한 1~10개의 container가 아닌 몇백개의 컨테이너를 관리하기 위해선 k8s만한것이 없다.
인간이 해야할 일을 시스템이 자동적으로 해주니까
k8s도 결국 사람들이 해야할 수동적인 작업(귀찮은 일)을 자동화하려고 만든 툴이라고 생각한다.
아직 쿠버네티스 개념이 익숙하지 않아서 틀린내용이 있을수 있으며
k8s에 대한 저의 생각을 정리한 글입니다.
참고
https://jonnung.dev/kubernetes/2020/02/24/kubernetes-pod-networking/
'devops > kubernetes' 카테고리의 다른 글
EKS를 활용하여 쿠버네티스 실습 및 클론코딩 (0) | 2022.12.06 |
---|---|
[k8s] 쿠버네티스가 뭔데?(Docker와 차이점) (0) | 2022.10.11 |