가상화
-하나의 물리적 리소스를 여러 개의 가상적인 환경으로 분할하야 사용하는 기술
-하나의 물리적 서버에서 여러 개의 가상 서버를 운영하거나 여러 운영체제를 하나의 시스템에서 실행할 수 있음
가상머신(Virtual Machine)
-실제 컴퓨터의 비슷한 환경을 소프트웨어적으로 구현한 가상 환경
-가상머신은 호스트 컴퓨터 위에서 실행되며, 게스트 운영체제를 호스트 컴퓨터와 독립적으로 실행할 수 있게 해줌
-테스트, 개발, 보안, 서버 운영 등 다양한 용도로 사용
가상머신을 사용하면
- 하드웨어 효율성
- 리소스 분리 및 격리
- 유연성과 확장성
- 테스트 및 개발 용이성
- 고가용성 및 복구 기능
하이퍼바이저(Hypervisor)
-가상머신을 관리하고 실행하는 소프트웨어
-하드웨어 리소스를 가상머신에 할당하고, 여러 개의 가상 머신이 동시에 실행될 수 있도록 지원
-호스트 운영체제 위에서 가상화 기술을 사용하여 하드웨어와 가상 머신 간의 통신을 관리
-Virtual Machine Monitor라고도
-ex) VMware, VirtualBox, KVM
*전가상화 vs 반가상화
전가상화(Full Virtualization)
-가상 머신이 물리적 하드웨어와 완전히 독립적으로 실행되는 기술
가상 머신이 호스트 시스템의 하드웨어와 직접 상호작용하는 것이 아니라 하이퍼바이저가 하드웨어 리소스를 관리하고 가상머신에 필요한 환경 제공
-하이퍼바이저가 모든 명령을 중재해주기 때문에 성능이 느림
반가상화(Paravirtualization)
-가상 머신이 완전히 독립적으로 실행되지 않고 일부 수정이 가해진 상태
-가상 머신이 실행될 때 가상화된 환경에서 실행되는 것이 아니라 하이퍼콜이라는 가상화된 인터페이스를 통해 호스트 시스템의 하드웨어 리소스에 직접 엑세스
-전가상화에 비해 성능이 빠르지만, 커널 수정 작업이 필요함
컨테이너
-응용 프로그램과 해당 종속성을 패키징하고 실행하는 데 사용되는 가벼운 소프트웨어 단위
-호스트 운영체제의 리소스를 공유하며 격리된 환경에서 실행될 수 있도록 해줌
-가상 머신과 다르게 게스트 운영 체제를 가지지 않고, 운영 체제의 리소스를 직접 공유하여 실행
-분리를 통해 프라이빗 데이터 센터나 퍼블릭 클라우드, 개발자의 개인 노트북에 이르기 까지 어떤 환경으로든 컨테이너 기반 애플리케이션을 쉽게 지속적으로 배포할 수 있음
-ex)
컨테이너를 사용하면
- 표준화된 패키지 형식: 컨테이너는 응용 프로그램, 실행 환경 및 종속성을 포함하는 표준화된 패키지 형식으로 패키징됨, 이를 통해 응용 프로그램을 다른 환경으로 쉽게 이동하고 실행할 수 있음
- 이식성: 컨테이너는 호스트 운영 체제와 상관없이 실행될 수 있음, 따라서 개발, 테스트 및 배포 프로세스를 단순화하고, 여러 환경에서 응용 프로그램을 일관되게 실행할 수 있음
- 성능: 컨테이너는 가상 머신보다 더 가볍고 빠르게 시작될 수 있음, 이는 컨테이너가 호스트 운영 체제와 리소스를 공유하며 가상화 계층이 없기 때문
- 확장성: 컨테이너는 쉽게 복제되고 확장될 수 있음, 이를 통해 응용 프로그램의 확장성과 가용성을 쉽게 유지할 수 있음
가상머신과 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS 커널에서 직접 구동하기 때문에 시작이 훨씬 빠르고 가벼움
컨테이너 엔진
-컨테이너를 생성하고 실행하는 데 사용되는 소프트웨어
-컨테이너 기술을 구현하고 관리하는 데 필요한 핵심 기능 제공
-ex) Docker
컨테이너 오케스트레이션
-여러 개의 컨테이너를 자동화하고 조정하여 복잡한 어플리케이션을 관리하는 프로세스
-컨테이너 기반 어플리케이션을 효율적으로 배포, 확장, 관리하고 안정성과 가용성을 유지하는 데 도움을 줌
-자동 배포, 자원 할당, 스캐줄링, 컨테이너 수 자동 조정, 로드 밸런싱, 자동 복구, 모니터링, 로깅 등의 기능 제공
-ex) Kubernates, Docker Swarm, Apache Mesos 등