쿠버네티스 등장 배경
쿠버네티스의 등장, VM과 컨테이너의 차이를 알아봅니다.
# 쿠버네티스를 왜 사용하는가?
대규모의 서비스를 운영할 때 자원을 최대한 효율적으로 사용해야 비용적으로 유리하기 때문이다.
서버 자원을 효율적으로 사용하기 위해서는 가상화기술을 사용한다.
# 쿠버네티스의 등장
가상화된 배포 시대
단일 물리 서버의 CPU에서 여러 가상 시스템(VM)을 실행할 수 있게 한다.
가상화를 사용하면
- VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스할 수 없고 그렇기 때문에 일정 수준의 보안성을 제공할 수 있음 → 애플리케이션간 격리로 보안성 제공
- 가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용 가능 → 효율적인 리소스 활용
- 쉽게 애플리케이션을 추가하거나 업데이트할 수 있어서 → 애플리케이션 업데이트와 추가 쉬움
- 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공 → 하드웨어 비용 절감
가상화를 통해 일련의 물리 리소스를 폐기 가능한(disposable) 가상 머신으로 구성된 클러스터로 만들 수 있다.
각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신이다.
컨테이너 개발 시대
컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다.
그러므로 컨테이너는 가볍다고 여겨진다.
VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있다.
기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다.
컨테이너는 다음과 같은 추가적인 혜택을 제공하기 때문에 유명해지게 된다.
- VM 이미지에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적 → 빠른 애플리케이션 생성과 배포
- 안정적•주기적으로 컨테이너 이미지 빌드해 배포 (이미지의 불변성 덕에) 빠르고 효율적으로 롤백 가능 → 지속적인 개발, 통합 및 배포
- 배포 시점이 아닌 빌드/릴리스 시점에 애플리케이션 컨테이너 이미지를 만들기 때문에, 애플리케이션이 인프라스트럭처에서 분리 → 개발과 운영의 관심사 분리
- OS 수준의 정보와 메트릭에 머무르지 않고, 애플리케이션의 헬스와 그 밖의 시그널을 볼 수 있음 → 가시성(observability)
- 랩탑에서도 클라우드에서와 동일하게 구동 → 개발, 테스팅 및 운영 환경에 걸친 일관성
- Ubuntu, RHEL, CoreOS, 온-프레미스, 주요 퍼블릭 클라우드와 어디에서든 구동 → 클라우드 및 OS 배포판 간 이식성
- 가상 하드웨어 상에서 OS를 실행하는 수준에서 논리적인 리소스를 사용하는 OS 상에서 애플리케이션을 실행하는 수준으로 추상화 수준이 높아짐 → 애플리케이션 중심 관리
- 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리될 수 있다. → 느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로서비스
- 리소스 격리 : 애플리케이션 성능을 예측 가능
- 리소스 사용량 : 고효율 고집적
리눅스는 시스템에 대한 꾸준한 개발을 통해 자원들을 격리해 프로세스들이 독립적인 환경에서 돌아가게 해주는 기술들(리눅스 자원 격리 기술 : chroot, namespace, cgroup )이 있었으나 사용하기에 어려워 대중적으로 사용되지 않았다.
이 기술과는 별개로 VM 가상화 환경에서 상용 솔루션(VMware)을 이용해 안정적으로 시스템을 운용하고 있었는데, 기업은 물론 일반인들도 쉽게 VM을 가상화 할 수 있도록 상용화되어 있었다.
2010년도에 Rackspace 클라우드 기업과 미국 NASA에서 OpenStack이라는 VM을 가상화 시켜주는 오픈소스가 등장을 하게 되고 오픈스택에 대한 개발이나 스폰서 활동들이 활발히 진행되었다. 선진 기업들은 오픈스택을 통해 운영 환경을 자동화 시키려고 시도하였다.
하지만 자동화되는것에 비해 시스템 효율이 나지 않았는데 vVM을 가상화 하기 위해 무거운 OS 를 띄워야 한다는 것과 가벼운 서비스 하나를 띄우기 위해 이보다 더 큰 OS를 띄워야 했기 때문이었다.
2014년도에 dotCloud 라는 회사가 예전 리눅스의 자원 격리 기술을 컨테이너라는 개념으로 누구나 쉽게 사용 할 수 있게 만들었고 회사명을 Docker라고 변경하면서 이 기술을 오픈소스로 공개하기에 이르렀다. 도커의 컨테이너 가상화기술은 서비스간 자원을 격리 하는데 OS를 별도로 띄우지 않아도 되고 OS 기동시간이 없어 자동화시에 빠르고 자원 효율이 좋다.
하지만 도커는 하나의 서비스를 컨테이너로 가상화시켜 배포를 하는 것이다.
많은 서비스를 운용할때는 일일이 배포하고 운영하는 역할을 해주어야 하기 때문에 적합하지 않았다. 시간이 지나 커널을 공유해 더 많은 애플리케이션을 올릴 수 있는 컨테이너가 도입되기 시작해 늘어난 컨테이너 관리가 필요해지기 시작했다.
여러개의 컨테이너 서비스를 배포하고 관리해주는 솔루션을 컨테이너 오케스트레이션이라고 하는데, 도커의 컨테이너 오픈소스 기술을 가지고 많은 회사들이 저마다의 오케스트레이터를 만들기 시작했다.
(docker, amazone, RANCHER, HashiCorp) (Docker Swarm, Mesos, Momed 등)
쿠버네티스가 릴리즈 버전을 내놓은건 다른회사들보다 늦었는데, 구글이 2014년 자사 컨테이너 운영플랫폼으로 운영하는 보그(Borg)를 기반으로 하는 쿠버네티스를 오픈소스화하여 2015년 7월 21일 쿠버네티스 버전 1.0을 출시한 것이 시작이다.
구글은 리눅스 재단과 파트너십을 맺고 클라우드 네이티브 컴퓨팅 재단(CNCF)을 설립했으며 쿠버네티스를 기초 기술로 제공했으며
이후 해당 프로젝트에 여러 업체(RedHat, Microsoft, IBM, CoreOS, docker, MESOSPHERE, SALKSTACK) 들이 참여해 저마다의 시스템 운영 노하우를 녹여내어 만족도가 높았기 때문에 쿠버네티스는 오케스트레이터들 중 가장 많이 사용되었고 서비스 배포/운영의 표준으로 자리 잡게 되는 계기가 된다. 현재 이 기술을 바탕으로 클라우드 서비스를 제공하는 많은 기업들이 쿠버네티스 환경이 설치 되어있는 인프라를 서비스 하고있다.
'🏁 IT & Product > ⌨️ Programming' 카테고리의 다른 글
[K8s/Cloud] Kubernetes 쿠버네티스 용어 및 개념 정리 (0) | 2025.03.28 |
---|---|
OData란? (0) | 2024.11.24 |
IPMI / BMC 란? 액세스 방법과 서버에서의 역할 (0) | 2024.11.09 |
[ IT 용어 ] 쿠키(Cookie)와 세션(Session)의 차이 (0) | 2024.05.22 |
[Figma] 디자인하다 궁금한 점 (0) | 2023.01.06 |