/var/log/messages
컨테이너 vs 가상화 본문
소개
서버는 비용이 많이 듭니다. 그리고 단일 애플리케이션 설치에서 대부분의 서버는 대기 시간 대부분을 소비합니다. 이러한 고가의 자산을 최대한 활용하려는 시도가 가상화의 발전으로 이어졌습니다. 결과적으로 가상화를 최대한 활용하면서 애플리케이션 가상화를 위한 다양한 옵션이 등장했습니다.
VMware와 같은 하드웨어 가상화와 Docker와 같은 컨테이너를 통한 프로세스 가상화는 애플리케이션 가상화를 위한 경쟁적인 방법을 제공합니다. 두 기술 모두 제한된 하드웨어 리소스를 최대한 활용하기 위해 작동하지만, 그 방식은 상당히 다릅니다. 이 가이드에서는 두 기술의 차이점과 이러한 차이점이 각각 어떤 시나리오에 가장 적합한지 이해하는 데 도움이 될 것입니다. 특히 각각의 작동 방식, 애플리케이션과 배포 팀에 미치는 차이점, 이러한 차이점이 운영, 보안 및 애플리케이션 성능에 미치는 영향에 대해 간략하게 살펴볼 것입니다.
이 글은 배포 툴킷의 옵션을 확장하려는 IT 운영 및 애플리케이션 개발 리더 모두를 대상으로 합니다. 이 정보는 이러한 리더가 정보에 입각한 결정을 내리고 동료와 경영진에게 이러한 결정을 설명하는 데 도움이 될 것입니다.
하드웨어 가상화의 한계
하드웨어 가상화는 하드웨어 수준에서 전체 컴퓨터 시스템을 가상화합니다. 그러면 가상 컴퓨터를 실제 컴퓨터처럼 취급하여 운영 체제를 설치하고, 리소스를 제어하고, 작업을 수행할 수 있습니다.
하드웨어 가상화는 호스트 시스템에 직접 설치되거나 호스트 시스템의 운영 체제 내에 애플리케이션으로 설치되는 하이퍼바이저에 의해 관리됩니다. 하이퍼바이저는 리소스를 관리하고 할당할 뿐만 아니라 실제 가상 머신을 생성하고 실행하는 역할을 담당합니다.
비교를 위해 Docker를 살펴볼 수 있습니다. Docker는 애플리케이션 컨테이너를 오케스트레이션 또는 관리하기 위한 시스템입니다. 애플리케이션 컨테이너는 애플리케이션과 애플리케이션을 실행하는 데 필요한 소프트웨어 라이브러리, 서비스 및 운영 체제 구성 요소를 가상화합니다. 배포에 포함된 모든 Docker 컨테이너는 해당 운영 체제에서 일반적으로 사용되는 리소스를 공유하기 때문에 단일 운영 체제에서 실행됩니다. 리소스를 공유한다는 것은 애플리케이션 컨테이너가 하드웨어 가상화로 생성된 전체 가상화 운영 체제보다 훨씬 작다는 것을 의미합니다. 컨테이너의 작은 소프트웨어 이미지는 일반적으로 가상 머신 운영 체제 이미지보다 몇 분에서 몇 초 단위로 훨씬 더 빠르게 생성될 수 있습니다.
배포 팀에게 중요한 질문은 가상화를 고려하는 이유입니다. 운영 체제 수준에서 각 사용자 또는 사용자 집단에 고유한 운영 환경을 제공하면서 가능한 한 적은 수의 물리적 서버를 필요로 하는 경우 하드웨어 가상화가 논리적인 선택입니다. 운영 체제가 숨겨져 있거나 사용자와 관련이 없는 애플리케이션에 초점을 맞추고 있다면 Docker 또는 유사한 컨테이너 기반 시스템이 현실적인 배포 옵션이 될 수 있습니다.
재사용 규모
각 애플리케이션을 얼마나 재사용하고 싶으신가요? 하드웨어 가상화와 컨테이너는 운영 체제의 이미지를 재사용하는 반면, 컨테이너는 단일 이미지에서 기능과 리소스를 공유하기 때문에 리소스 공유 방법과 규모가 다릅니다. 이러한 차이로 인해 애플리케이션의 스토리지 및 메모리 요구 사항이 크게 달라질 수 있습니다.
가상 머신 관리자는 새 게스트 머신을 생성할 때마다 해당 운영 체제의 전체 복사본을 생성하고 특정 리소스를 사용할 수 있도록 표시합니다. 운영 체제의 모든 구성 요소와 인스턴스 내에서 실행 중인 애플리케이션이 사용하는 모든 리소스는 해당 특정 인스턴스 내에서만 사용되며 실행 중인 운영 체제 간에 공유되지 않습니다. 즉, 각 운영 체제 내에서 환경을 놀랍도록 커스터마이징할 수 있으며 다른 가상 운영 체제에서 실행 중인 애플리케이션에 영향을 미치거나 영향을 받을 염려 없이 애플리케이션을 실행할 수 있습니다.
컨테이너가 생성되면 애플리케이션이 의존하는 모든 라이브러리와 코드가 포함된 애플리케이션의 고유한 인스턴스가 됩니다. 애플리케이션 코드는 컨테이너 이미지 내에 번들로 제공되지만 애플리케이션은 호스트 시스템의 커널에 의존하고 커널에 의해 관리됩니다. 따라서 컨테이너를 실행하는 데 필요한 리소스가 줄어들고 컨테이너를 매우 빠르게 시작할 수 있습니다.
애플리케이션의 새 인스턴스를 생성하는 속도가 빠르기 때문에 애플리케이션의 복사본을 빠르게 시작, 테스트 및 삭제하여 효율성을 크게 높일 수 있는 개발 환경에서 일반적으로 사용되는 솔루션입니다. 하드웨어 가상화는 완전히 패치되고 업데이트된 운영 체제의 단일 "골든 카피"를 생성한 다음 이 이미지를 사용하여 모든 새 인스턴스를 생성할 수 있기 때문에 엔터프라이즈 프로덕션 배포에서 널리 사용됩니다.
기존 가상화와 컨테이너 모두에서 원본 환경의 "마스터 복사본"이 생성되어 여러 복사본을 배포하는 데 사용됩니다. 운영팀에서 고려해야 할 문제는 Docker의 리소스 효율성이 애플리케이션 및 사용자 기반의 요구사항과 일치하는지, 아니면 이러한 요구사항에 따라 각 인스턴스마다 고유한 운영 체제 사본을 시작하고 배포해야 하는지 여부입니다.
원칙으로서의 자동화
운영 체제 이미지를 생성하고 해체하는 프로세스는 자동화할 수 있지만, 자동화는 Docker의 핵심입니다. DevOps 도구 상자의 일부인 오케스트레이션은 하드웨어 가상화 대비 Docker 컨테이너의 주요 차별화 요소입니다.
Docker는 그 자체로 필요에 따라 새 애플리케이션 인스턴스를 생성한 다음 요구 사항이 종료되면 종료하는 오케스트레이션 메커니즘입니다. 다양한 자동화 시스템에서 Docker를 제어할 수 있는 API 통합이 있습니다. 또한 Docker 컨테이너를 사용하는 대규모 컴퓨팅 환경을 위해 추가적인 자동화 및 관리 계층이 개발되었습니다. 잘 알려진 플랫폼 중 하나는 여러 서버에 분산되어 있을 수 있는 Docker 컨테이너 클러스터를 관리하기 위해 개발된 Kubernetes입니다.
가상 머신에는 다양한 자동화 도구도 있지만, 이러한 도구는 일반적으로 애플리케이션이 아닌 운영 체제의 새 인스턴스를 생성하는 역할을 담당합니다. 즉, 신속한 응답이 필요한 클라우드 및 가상 시스템 애플리케이션 환경을 계획할 때는 완전히 새로운 운영 체제 이미지를 생성하는 데 걸리는 시간을 고려해야 합니다. 하드웨어 가상화는 이러한 환경을 지원하기 위해 확실히 작동할 수 있으며, 많은 상업적 운영에서 이를 위해 사용됩니다. 하지만 프로세스를 자동화하고 오케스트레이션하기 위해 추가적인 애플리케이션이나 프레임워크가 필요하므로 솔루션에 복잡성과 비용이 추가됩니다.
Docker 컨테이너와 하드웨어 가상화 모두 자동화 없이도 매우 성공적으로 운영될 수 있다는 점에 유의해야 합니다. 하지만 상용 설치의 경우, 새로운 운영 체제 및 애플리케이션 인스턴스를 생성하고 삭제하는 작업이 사람의 손이 아닌 소프트웨어로 제어될 때 각각의 기능이 훨씬 더 강력해집니다. 증가하는 사용자 수요에 대한 신속한 대응부터 대규모 자동화된 애플리케이션 테스트에 이르기까지 시스템 자동화는 중요합니다. 기술을 결정할 때는 자동화를 위해 무엇이 필요한지 파악하는 것이 중요합니다.
분리 여부
배포 및 실행 속도 또는 리소스 사용 제한이 배포에 있어 중요한 차별화 요소가 아니라면 애플리케이션과 인스턴스 간의 하드 분리가 중요한 차별화 요소일 수 있습니다. 오케스트레이션이 Docker에 내장되어 있는 것처럼, 분리도 하드웨어 가상화 솔루션에 내장되어 있습니다.
하드웨어 가상화에서 운영 체제의 각 인스턴스는 운영 체제의 다른 인스턴스와 논리적으로 공유되지 않는 하드웨어 리소스에서 실행되는 완전한 운영 체제 이미지입니다. 가상 머신은 하드웨어 리소스를 분할하여 각 운영 체제 인스턴스가 서버에서 실행되는 유일한 운영 체제인 것처럼 인식하게 합니다.
즉, 심각한 하이퍼바이저 취약점을 제외하고는 한 가상 서버에서 실행 중인 애플리케이션이 데이터나 리소스를 위해 다른 가상 서버에 접속할 수 있는 현실적인 방법이 없습니다. 또한 한 가상 서버에서 심각한 문제가 발생해도 하이퍼바이저에서 실행 중인 다른 가상 서버의 작동을 위험에 빠뜨리지 않고 종료할 수 있다는 의미이기도 합니다.
Docker 지지자들은 컨테이너 시스템 아키텍처의 일부로 유사한 분리가 이루어지고 있다고 말했지만, 최근의 취약성 보고서(예: CVE-2019-5736)에 따르면 Docker의 분리는 운영 IT 전문가가 기대하는 것만큼 완벽하지 않을 수 있습니다.
하드웨어 가상화만큼 Docker 컨테이너에서 분리는 우선순위가 높지 않습니다. 애플리케이션 컨테이너는 리소스를 공유하게 되며, 공유가 있는 경우 분리에 제한이 있습니다.
결론
하드웨어 가상화와 Docker의 가상화 및 배포에는 각각 용도에 따라 상당한 차이가 있습니다. 이제 독자들은 각 플랫폼의 기본적인 특성과 기능, 그리고 주어진 상황에서 각 플랫폼이 더 선호될 수 있는 요소에 대해 기본적으로 이해하셨을 것입니다.
배포 속도와 제한된 리소스를 가장 효과적으로 사용하는 것이 최우선 과제인 경우 Docker 컨테이너가 큰 강점을 보입니다. 개발 그룹이나 완전히 작동하는 DevOps 환경의 빠른 반복과 같은 상황에서는 컨테이너가 매우 유용할 수 있습니다.
프로덕션 환경에서 보안과 안정성이 매우 중요한 경우 하드웨어 가상화는 이 두 가지를 모두 제공합니다. Docker 컨테이너와 가상 머신 모두에 대해 자동화, 오케스트레이션 및 기타 기능을 통해 기능을 확장할 수 있는 여러 제품을 사용할 수 있습니다.
'Rancher' 카테고리의 다른 글
컨테이너와 쿠버네티스 소개: 도커와 오케스트레이션 (0) | 2023.05.31 |
---|---|
클라우드와 온 프라미스 환경에서의 DevOps와 컨테이너 (0) | 2023.05.21 |
쿠버네티스란? (0) | 2023.05.07 |
컨테이너와 도커란? (0) | 2023.04.29 |
컨테이너 오케스트레이션에 대해서 (0) | 2023.04.23 |