안녕하세요. IT Window 킷도우입니다.
벌써 한 해가 지나고, 구정이 얼마 남지 않았는데요. 시간 참 빠른 것 같습니다.
다들 새해 계획하신 대로 하루하루 보내고 계신가요?
저 또한 다시 마음을 가다듬고 쿠버네티스 스터디를 진행하며 포스팅 하나 올려 봅니다.
오늘 소개해 드릴 글은 바로 쿠버네티스를 사용하면 우리가 어떤 것을 얻을 수 있을지에 대한 부분입니다.
쿠버네티스는 구글에서 최초 개발하여 현재 세계에서 활발히 사용되고 있는 오픈소스 컨테이너 오케스트레이션 시스템입니다. 우리가 앞서 온프레미스 환경과 퍼블릭 클라우드 환경에서 운영되는 시스템에서는 어떤 차이점이 있는지 비교해 봤었는데요.
[구글 클라우드 플랫폼] 퍼블릭 클라우드 도입 이유 (GCP $300 무료 체험판 크레딧 받는 방법)
안녕하세요. 계묘년이 밝았습니다. 새해 복 많이 받으시고요~ 올 한 해 계획은 잘 세우셨을까요? 저는 올 한 해 계획을 쿠버네티스, 클라우드 관련 자격증을 취득하고 또 관련 강의 자료까지 만
kitdow.tistory.com
결론은 퍼블릭 클라우드는 대용량 트래픽을 처리함에 있어서 필연적이라는 내용이었습니다. 그럼 한발짝 더 나아가서 단순 퍼블릭 클라우드 환경에서 VM(가상머신)으로 운영하는 것과 컨테이너 기반으로 쿠버네티스를 통해 관리하는 것과 어떤 차이점이 있으며, 우리는 쿠버네티스를 통해 어떤 것들을 얻을 수 있는지 확인해 보겠습니다.
참고로 아래 내용은 "쿠버네티스 완벽 가이드 - 마사야 아오야마 저" 책을 참고하였습니다.
1. 선언적 코드를 사용한 관리(IAC)
쿠버네티스를 완전 처음 접하시는 분들은 이해가 안되실 수 있겠지만 선언적 코드(IaC, Infrastructure as Code)를 통해 컨테이너를 배포할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
기존 퍼블릭 클라우드에서도 OpenStack Heat이나 AWS CloudFormation에서도 클라우드 오케스트레이션을 위해 선언적 코드를 사용하듯 쿠버네티스에서도 컨테이너 오케스트레이션을 위해 동일하게 존재하는 기능으로 보면 되겠습니다. 온프레미스에선 수작업으로 일일이 설치하던 걸 선언적 코드를 통해 간편하게 설치할 수 있는 건 정말 대단한 기술인 것 같습니다.
2. 오토 스케일링
마찬가지로 기존 퍼블릭 클라우드에서 제공하는 기능입니다. 퍼블릭 클라우드에서는 VM(가상머신)을 자동으로 스케일 아웃하거나 스케일업을 하여 대용량 트래픽에 대응하듯, 쿠버네티스에서도 컨테이너 스펙 조절 및 컨테이너 수를 늘려 다중화 처리, 부하 분산 기능을 제공합니다.
VM환경과 쿠버네티스 환경은 동일하게 오토 스케일 아웃 기능이 존재하지만 여기서 차이가 분명히 있다고 생각합니다. 왜냐하면 퍼블릭 환경에서는 오토 스케일 아웃을 하는 것이 단순 VM을 하나 더 늘리는 것이지만, 쿠버네티스로 치면 한 개의 노드(퍼블릭 환경에선 VM) 안에서 컨테이너를 오토 스케일 아웃을 하는 것이기 때문에 한개의 VM VS 한개의 노드(여러개의 컨테이너로 다중화 구성) 이렇게 비교가 됩니다.
결국은 쿠버네티스로 구축하는 것이 동일한 요청, 대용량 요청에 대해 훨씬 더 높은 TPS를 낼 수 있다고 판단할 수 있는 부분입니다.
참고로, 오토 스케일 아웃을 진행할 땐 쿠버네티스에서는 로드 밸런서 기능을 자체적으로 제공하고 있어 각 컨테이너로 부하 분산이 가능합니다.
3. 스케줄링
컨테이너를 쿠버네티스 노드에 배포할 때 어떤 노드에 배포할 것인가에 대한 부분입니다. 이건 앞선 기능들과는 달리 쿠버네티스 고유의 기능이죠. 왜냐하면 VM 환경에서는 예를들어 1대의 VM에 WAS 서버(tomcat)를 설치하고 또 다시 동일한 기능을 하는 tomcat을 2번 설치하지는 않습니다. 필요하다면 VM 1대를 더 설치해서 tomcat을 설치하겠죠. 하지만, 컨테이너로 운영하는 환경에서는 한 개의 노드에 동일한 기능을 하는 컨테이너를 여러 개 설치하여 부하 분산을 하기에 스케줄링은 쿠버네티스 환경에서는 필요한 기능으로 생각됩니다.
예를 들어 디크스 IO가 많은 컨테이너를 디스크가 SSD인 쿠버네티스 노드에 배치하는 식으로 스케줄링을 할 수 있는 것입니다.
하지만, 컨테이너 배치를 위한 CPU나 RAM 등에 대한 자원 할당을 사용자가 특별하게 지정하지 않을 경우 리소스 상태에 따라 자동으로 스케줄링되기 때문에 사용자는 어떤 노드에 컨테이너를 배치할지 관리할 필요는 없습니다.
사실 스케줄링 기능이야 컨테이너로 운영하는 시스템에선 필요한 기능이라서 그렇다 치고 IaC를 통한 관리나 오토 스케일링 기능은 퍼블릭 클라우드에서 VM으로 운영할 때 충분히 구현돼 있는 기능들 입니다. 오토 스케일 아웃 기능도 동일한 조건에서는 쿠버네티스로 구축하는 것이 위에서 설명한 것처럼 더 높은 TPS 수치를 보여줄 수 있겠으나, 만약 퍼블릭 환경에서 VM에서 THREAD라던지 병령 처리 기법을 써서 다중화 기능을 구현해뒀다면 쿠버네티스로 오토 스케일 아웃하여 다중화하는 효과가 사실상 차이가 없게될 수 있죠.
이제 그러면 쿠버네티스만의 기능을 설명해 보겠습니다.
4. self-healing(자동화 복구)
쿠버네티스는 컨테이너 상태를 수시로 점검하여 컨테이너가 정지될 경우 자동으로 재배포합니다. 컨테이너가 죽어도 계속 살려냄으로 장애 발생을 최소화하고 서비스에 영향을 주지 않는 시스템을 구축하는 것입니다.
네 그러면 정리해보면, 퍼블릭 클라우드의 가상머신이 아닌 쿠버네티스를 써야하는 이유를 간략히 설명드리겠습니다.
1) 좀 더 높은 수준의 TPS를 원할 경우
2) self-healing을 통해 운영 서비스가 중단되지 않는 시스템 구축. 장애 최소화.
3) 전반적인 시스템의 경량화(OS 설치를 최소화), 빠른 재기동.
네 제가 생각하는 쿠버네티스를 써야하는 이유에 대해서 간략히 적어봤는데요. 혹시 더 깊이 내용을 알고 계신 분은 댓글로 지식 공유주시면 감사하겠습니다.
내일은 또 월요일이네요.
활기차게 또 하루하루 보내봅시다. 화이팅!
댓글