작성자 : 클라우드 컨설팅 그룹 한경수, 정예은, 황희, 정준호, 마승우
쿠버네티스는 엔터프라이즈 기업 또는 서비스 사업자가 클라우드로 전환할 때 꼭 필요한 기술입니다.
기업들은 쿠버네티스 환경에서 워크로드의 이동성이 높아지면서IT 환경에 대한 구분보다는 자사에 맞는 환경과 서비스를 도입하는데 집중하고,
어떻게 업무 프로세스에 적용하여 디지털 혁신을 최적화 할 것인지에 대해 고민하고 있습니다.
이에 클루커스는 효율적인 클라우드 전환을 고려하는 고객분들을 위해,
쿠버네티스 도입부터 성능 테스트를 통한 각 CSP별 매니지드 서비스에 대한 특장점까지 매월 다뤄보고자 합니다.
*클루커스는 CNCF 재단과 리눅스 재단이 인증하는 KCSP(쿠버네티스 전문 서비스 기업)자격을 보유하고 있습니다.
Container의 시대
CNCF에서 실시한 설문조사에 따르면, 2020년 기준 92%의 응답자가 Production 환경에서 Container를 사용 중이라 답변했고 2016년 부터 꾸준히 증가해온 것을 확인할 수 있습니다.
그렇다면 무엇이 Container를 사용하게 되는 이유일까요?
Why Container?
Container 이야기할때 빠지지 않는 것이 바로 MSA(Micro Service Architecture)인데요
IT 업계에는 과거부터 비용/관리적으로 좀더 나은 방법으로 서비스를 제공하기 위한 노력들을 해왔습니다. 적은 개수의 비싼 서버에 모든 서비스를 올려서 쓰던 모놀리식 방식에서 서비스를 나누어 API 형태로 서로 통신하도록 설계하는 것을 MSA라고 합니다.
이러한 흐름에 맞춰 개발된 서비스 중에 하나가 바로 VM 이었습니다.
이 VM에서 한 단계 더 발전한 방식이 바로 Container 입니다. 대표적인 서비스로는 Docker가 있습니다.
Container의 장점을 몇가지 정리하면 다음과 같습니다.
- 확장성이 좋다.
- 안정적인 서비스를 운영할 수 있다.
- 리소스를 효율적으로 사용할 수 있다.
- 유연성이나 이식성이 좋다.
여러가지 장점 중에 효율적인 리소스사용과 이식성이 좋다. 두가지의 장점에 대해 좀 더 자세히 설명해보겠습니다.
리소스 효율성
VM환경과 Container 환경을 비교해보면 기존 가상머신 시스템에서 Hypervisor와 GuestOS 부분이 없어진것을 확인할 수 있습니다.
VM 환경에서는 어플리케이션이 실행될 때 GuestOS에 커널을 전송하고 이를 Hypervisor가 받아서 다시 HostOS로 연결하는 오버헤드 리소스가 소요되는데 Container는 이런 과정 없이 HostOS의 커널을 공유해서 사용하므로 오버헤드가 줄어듭니다. 이 부분이 효율적인 리소스 활용을 보장하는 것이죠.
이식성
같은 역할을 하는 서버 3대를 준비한다고 가정하면 VM 환경에서는 VM을 준비하고 그 위에 배포를 위한 Script를 작성해 배포를 합니다. 하지만 시점에 따라 Application Library의 업데이트 등으로 어떤 서버는 정상동작 하는데 다른 서버는 오류가 나는 경우를 경험해 보셨을 겁니다.
그렇다면 Container 환경은 어떨까요?
Docker를 예로 들면 Dockerfile이란 빌드 설정을 제공합니다. Dockerfile은 기존에 Code화된 설치 Script와 유사합니다. Docker에서는 Dockerfile을 통해 Image를 빌드하고 이 Image가 기본 Container의 실행 단위가 됩니다. 결과적으로 Container에서는 Image 단계가 추가됨으로써 완전히 동일한 환경을 구성할 수 있게 되는 것입니다.
Why Kubernetes?
k8s를 접하게 되는 동기야 많을 것 같습니다.
속해있는 그룹에서 k8s 사용을 고려 중이라 혹은 자신만의 무기를 하나 더 추가하거나, 개인적인 성취감과 자신감을 얻기 위해 등 (혹은, 별로 내키진 않았으나 팀장님이나 사장님이 무조건 해야 된다고 해서? -0-) k8s를 접하게된 동기는 다르더라도 k8s를 시작하기에 앞서 제일 처음으로 고민하는 내용은 모두 같을 것이라 생각합니다.
머리속에 있는 아키텍처를 k8s로 표현하기 까지 k8s에 대한 공부가 필요합니다.
다른 무언가를 공부 할 때도 다 그렇겠지만 처음엔 용어들이 전부 생소하죠. 그러다 간단한 웹서버를 pod로 실행하는 예제를 접하게 됩니다.
pod가 뭔지, pod 하나 실행하기 위한 예제들마다 yaml 내용이 조금씩 다른데 다들 배포는 잘 되고 이쯤되면 yaml을 파볼까? 하는 생각이 잠깐 들다가도 내가 만든 프로그램을 어떻게 이미지로 만들고 pod로 실행시키는지 궁굼해지고, pod를 배포하는 배포 컨트롤러가 deployment 하나가 아니네? 좀 알아볼까? database도 k8s로 실행할 수 있을까? k8s로 database를 실행 하려면 저장공간이 필요한데 volume? pv, pvc?
앱에 가용성을 부여하려면 L4/L7 어떻게?, 인증서는 어떻게 등록하지? 등 하나의 기능을 알게 될 때마다 그 와 같이 봐야 하는것들이 점점 더 늘어나고… 공부는 뭐 하면 되는거니까요~ 다만 시간이 걱정이지만..
그럼에도 Container활용을 위해 Kubernetes가 필요한 이유를 살펴보겠습니다.
CNCF에서 실시한 설문조사를 또 한번 살펴 보겠습니다. 50개 이상의 컨테이너를 운영하는 경우가 70% 이상인 것을 확인할 수 있습니다. 수많은 컨테이너를 어떻게 효율적으로 운영할 수 있을까요?
이 고민에서 Container 관리 기술이 출발합니다.
초기 컨테이너 관리 기술(도커 컴포즈)로는 여러 한계가 있었습니다.
– 마스터 서버가 죽으면?
– 컨테이너가 죽으면 수동으로 살린다?
– 특정 시간대 부하를 견디기 위해 수동으로 컨테이너를 늘린다?
– 암호 관리는?
– 기타 여러 문제점들을 해결할 수 있는 컨테이너 관리 기술이 쿠버네티스입니다.
– 그 밖에도 쿠버네티스는 사실상 컨테이너 오케스트레이션 툴에 있어 표준으로 쓰이고 있으며, 오픈소스로 Apache License 2.0 라이센스 비용 걱정이 없고, CNCF재단에 의해 지속적인 버전 업데이트가 이루어지고 있다는 장점이 있습니다.