AWS

AWS - 쿠버네티스 - 1탄 왜 쿠버네티스인가? (EKS, Kubernetes, K8s)

Always-Try 2021. 7. 6. 23:35
https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/ 참고

AWS를 사용하는 회사 그리고 devops 환경에서는 쿠버네티스를 필수적으로 접하게 된다.

그리고 AWS 환경의 보안을 한다면 최소한 쿠버네티스가 어떤식으로 동작하는지에 대해서는 알아야 될 것이다.

자 이제, 과연 쿠버네티스가 뭘까? 라는 의문을 가지고 포스팅을 하나씩 시작하며, 이 시리즈가 끝날 시점에는 어느 정도 개념이 잡혔으면 하는 바램이다.

 

먼저, 쿠버네티스는 AWS의 고유한 서비스가 아니다. 온프레미스 환경에서도 쿠버네티스를 사용할 수 있으며 다만 AWS에서도 쿠버네티스를 지원하기 때문에 아마존이 좋아하는 Elastic을 붙여서 보통 EKS라고 부른다. (Amazon Elastic Kubernetes Service)  

 

우선 왜 쿠버네티스가 뭐고 왜 쓰는지를 알아보자.

1. 쿠버네티스란 무엇이고 왜 쓰는가?

한마디로 정의하면, 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리 및 배포 하기 위한 오픈소스 플랫폼으로, 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다고 한다. 컨테이너가 뭐고 워크로드가 뭔지는 차차 설명할 것이니 느낌만 잡자. 키잡이나 파일럿처럼 뭔가를 조종해서 움직이고 앞으로 나아가기 위한 도구라고 이해하면 될 것 같다.

 

그럼 더 자세한 설명을 하기 위해 과거에서 현재까지 어떤식으로 서비스 배포가 이루어졌는지 간단히 알아보자.

그림1. 배포 형태의 변화

과거에는 단순히 1개의 하드웨어에 1개의 OS를 올리고 그 위에 여러가지 App을 실행시켰다. 뭐 일반적으로 집에 1대씩 다들 가지고 있는 PC를 생각하면 될 것 같다. 하나의 PC에서 게임도 하고 유튜브도 보고 오피스 파일도 실행하고 카카오톡도 하고 여러가지 하지 않는가? 이런식으로 1개의 OS 위에 여러가지 App(프로그램)을 실행하면 편하긴 하겠지만, 만약 게임에 엄청나게 리소스가 들어간다면 유튜브, 오피스 등이 실행될 때 지장이 있을 것이다. 전체 리소스를 다 나눠서 사용하는 것이기 때문에 누군가가 리소스를 다 잡아먹는다면 다른 App은 구동하기 힘들어진다. 실제 회사의 웹 서비스가 이런 환경에서 실행된다면 어떨까? 상상하기도 싫다.

 

그 이후에 나온 것이 VM이다. OS 위에 하이퍼바이저를 통해 또다른 OS를 구동 시키고 그 안에 필요한 모듈과 App을 집어넣고 가상화 이미지를 만들고 실행시킨다. 각각의 이미지는 서로 격리되어 있기 때문에 과거와 같이 특정 1개의 이미지 때문에 다른 이미지가 죽거나 영향을 받지는 않는다. 하지만, 각각의 이미지마다 OS가 올라가기 때문에 상당히 무겁다. 그리고 가상머신 별로 자원이 (반)고정되어 있기 때문에 유휴 리소스가 발생할 가능성이 크다.

 

자 이제 쿠버네티스에서 쓰는 컨테이너는 어떨까? 컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있다. VM처럼 이미지를 만들고 격리 시키지만, 이미지(컨테이너) 내에 OS가 들어가지 않고 필요한 모듈과 App만 들어가 있다. 따라서, 컨테이너별로 필요한 만큼의 리소스를 원할때마다 편하게 할당할 수 있고, 가볍기 때문에 수정/배포 시간도 상당히 짧다.

 

설명이 어땠는지 모르겠지만, 결론적으로 컨테이너는 가벼운 App 이미지라고 생각하면 될 것 같다. 헌데 컨테이너에 자원과 리소스를 편하고 쉽게 할당할 수 있다고 하는데, 그렇다고 24시간 모니터링 하면서 계속 리소스 사용량에 따른 리소스 할당을 다시 해줄 수 있을까? 한다면 할 수 있겠지만,,, 그러면 인프라 담당자가 차라리 돈은 많이들지만, 처음에 리소스를 빵빵하게 할당해 놓은 VM 방식이 더 편하고 좋다고 윗선에 뻥치지 않을까? 말하고 싶은건 아무리 가볍고 편하다고 해도 사람 손이 자주타면 관리하기만 더 힘들어 질 수 있다는 것이다.

 

그래서 나온 것이 바로 실시간 리소스 할당 및 자동 배포를 지원하게 해주는 Container Orchestration 솔루션이다. 도커, 쿠버네티스 등등 다양하게 있지만, 여기서는 쿠버네티스를 다룬다.