VM은 하드웨어 가상화를 통해 더 강력한 격리를 제공하므로 멀티 테넌트 환경이나 신뢰할 수 없는 코드에 적합합니다. Containers 신뢰할 수 있는 워크로드에 일반적으로 충분한 프로세스 수준의 격리를 제공하지만, 공유 커널은 민감한 애플리케이션에 대한 고려 사항입니다.
컨테이너 가상화의 장점
컨테이너 가상화는 개발 속도, 운영 효율성 및 인프라 비용 전반에 걸쳐 측정 가능한 개선을 제공합니다. 이를 통해 적절한 워크로드를 컨테이너화한 후 구축 시간을 단축하고 인프라 비용을 절감할 수 있습니다.
속도와 효율성
Containers 환경 일관성을 통해 기계의 문제를 제거합니다. 개발자는 모든 종속성을 가진 애플리케이션을 패키징하여 노트북부터 프로덕션까지 동일한 동작을 보장합니다. 이러한 일관성은 구축 실패를 줄여줍니다.
CI/CD 파이프라인은 컨테이너를 활용하여 빠른 반복을 지원하므로 구축 시간이 몇 시간에서 몇 분으로 단축됩니다. 롤백은 사소한 것이 되며, 이전 컨테이너 이미지를 다시 배포하기만 하면 됩니다. 예를 들어, Netflix는 하루에 최대 50만 컨테이너 인스턴스를 배포합니다. 경량성은 자원 경제성을 변화시킵니다. 컨테이너 규모에 따라 자동 확장이 가능해집니다. Kubernetes 몇 초 만에 새로운 컨테이너를 출시하여 로드에 대응하고, VM 자동 확장은 몇 분이면 가능합니다. 이러한 응답성은 오버프로비저닝이 아닌, 필요할 때 더 린을 실행하고 정확하게 확장할 수 있음을 의미합니다.
환경 간 이동성
Containers 기본 인프라에서 애플리케이션을 추상화하여 진정한 이동성을 지원합니다. 동일한 컨테이너 이미지는 온프레미스에서든 여러 클라우드에서든 개발자의 노트북, 테스트 서버 및 프로덕션 클러스터에서 동일하게 실행됩니다.
이러한 이동성은 벤더 종속 없이 멀티 클라우드 전략을 가능하게 합니다. 기업들은 AWS, Azure 및 온-프레미스 인프라 전반에서 동시에 컨테이너를 실행하여 비용, 성능 또는 규제 요구 사항에 따라 워크로드를 이동시킵니다.
그러나 휴대성에는 한계가 있습니다. 지속적인 스토리지 요구 사항이 있는 Containers 마이그레이션 중에 데이터 가용성을 유지하기 위해 신중한 아키텍처가 필요합니다. 데이터베이스, 파일 저장소, 메시지 큐 등 스테이트풀 애플리케이션은 스테이트리스 마이크로서비스에 비해 추가적인 고려가 필요합니다.
컨테이너 스토리지 및 데이터 지속성
컨테이너는 스테이트리스 애플리케이션을 실행하는 데 탁월하지만, 컨테이너 구축에서 영구 스토리지는 여전히 가장 중요한 도전 과제입니다. 영구 스토리지가 내장된 VM과 달리, 컨테이너는 설계상 매우 중요합니다. 컨테이너가 멈추면 쓰기 가능한 계층과 컨테이너에 저장된 모든 데이터가 사라집니다.
이는 근본적인 문제를 야기합니다. 많은 엔터프라이즈 애플리케이션에는 지속적인 데이터 스토리지가 필요합니다. 데이터베이스, 콘텐츠 관리 시스템 및 트랜잭션 로그는 모두 컨테이너가 다시 시작될 때도 지속되는 데이터가 필요합니다. 그러나 대부분의 컨테이너에 대한 논의는 스토리지를 사후 생각으로 취급합니다.
지속적인 스토리지 문제 해결
컨테이너 스토리지 인터페이스(CSI)는 스토리지 시스템을 컨테이너화된 워크로드에 연결하기 위한 업계 표준으로 부상했습니다. CSI를 통해 스토리지 공급업체는 CSI 호환 오케스트레이터에서 플러그인을 작성할 수 있습니다.
지속적인 볼륨(PV)은 데이터 지속성을 위한 메커니즘을 제공합니다. 올바르게 구성되면, PV는 컨테이너 수명주기와는 독립적으로 존재하므로 컨테이너 업데이트, 마이그레이션 및 장애를 통해 데이터가 지속될 수 있습니다. 현대적인 컨테이너 네이티브 스토리지 솔루션은 동적 프로비저닝을 통해 이러한 문제를 해결하며, 애플리케이션이 스토리지 볼륨을 요청할 때 스토리지 볼륨이 자동으로 생성됩니다.
컨테이너 인식 백업 솔루션은 애플리케이션 일관성을 유지하면서 지속적인 볼륨을 스냅샷합니다. 백업 시스템이 컨테이너 오케스트레이션을 이해하면 복구 시간 목표(RTO)를 달성할 수 있습니다. 데이터 로컬리티는 성능에 상당한 영향을 미칩니다. 고성능 스토리지 플랫폼은 로컬리티 스케줄링을 통해 컨테이너를 데이터에 가깝게 유지하여 지연 시간을 줄입니다.
구현 고려 사항
컨테이너 가상화를 성공적으로 구현하려면 플랫폼 선택, 오케스트레이션 및 보안에 대한 신중한 계획이 필요합니다.
플랫폼 및 오케스트레이션
도커는 개발 환경에서 가장 널리 사용되는 컨테이너 툴 중 하나로, 개발자 채택 설문조사에서 상위에 랭킹을 올리는 경우가 많습니다. 프로덕션 Kubernetes 환경에서 컨테이너는 Amazon EKS 및 Google GKE와 같은 관리형 서비스를 포함하여 컨테이너 런타임으로 일반적으로 사용됩니다. CRI-O는 Kubernetes 전용 배포에 최적화된 경량의 Kubernetes 네이티브 컨테이너 런타임을 제공합니다.
Kubernetes 컨테이너 오케스트레이션에서 77%의 시장 점유율로 사실상 표준이 되었습니다. 선언적 구성을 통해 배포, 확장 및 관리를 자동화합니다. 원하는 것을 설명하면 Kubernetes 현실과 일치합니다.
특정 사용 사례에 대한 대체 오케스트레이터가 존재합니다. 소규모 구축을 위한 Docker Swarm, AWS 통합을 위한 Amazon ECS, 이종 워크로드를 위한 HashiCorp Nomad. 규모 요구사항, 팀 전문성 및 기존 인프라에 따라 선택하십시오.
보안 및 컴플라이언스
컨테이너 보안은 경계 기반 모델에서 제로 트러스트 모델로 전환해야 합니다. 각 컨테이너는 네트워크 경계에 의존하지 않고 개별 보안 정책이 필요합니다. 이미지 스캔은 배포 전에 취약점을 식별합니다. 선도적인 레지스트리는 알려진 CVE가 있는 컨테이너에 자동으로 플래그를 지정합니다.
공공 이미지를 사용할 때 공급망 보안이 매우 중요합니다. 기업들은 컨테이너의 성능을 보장하기 위해 이미지 서명, 프라이빗 레지스트리 및 기본 이미지 표준화를 구현합니다. 정책 엔진은 ‘생산에 중요한 취약점이 없음’ 또는 ‘모든 컨테이너가 비 루트 사용자로 실행되어야 함’과 같은 규칙을 적용합니다.
멀티 클라우드 컨테이너 전략
컨테이너의 이동성은 멀티 클라우드 구축의 잠재력을 최대한 발휘하지만, 많은 조직들이 크로스 클라우드 관리로 어려움을 겪고 있습니다. 문제는 여러 클라우드에서 컨테이너를 실행하지 않고 다양한 환경에서 효율적으로 운영한다는 것입니다.
진정한 클라우드 이동성을 위해서는 클라우드별 서비스를 추상화해야 합니다. 기업들은 애플리케이션을 네이티브 클라우드 서비스에 긴밀하게 연결하는 대신, 보다 높은 수준의 추상화와 운영자를 통해 환경 전반에서 일관된 기능을 제공합니다.
멀티 클라우드 컨테이너는 정교한 비용 차익거래를 가능하게 합니다. 스팟 인스턴스 오케스트레이션은 비용을 절감할 수 있지만 클라우드와 지역에 따라 다릅니다. 고급 플랫폼은 현물 가격, 데이터 유출 비용 및 지역별 변동을 고려하여 클라우드 간 최적화를 구현합니다.
데이터 상주법은 멀티 클라우드 구축을 복잡하게 만듭니다. 정책 기반 배치는 승인 컨트롤러를 사용하여 자동으로 컴플라이언스를 적용합니다. 라벨은 데이터 분류를 나타내는 반면, 배치 정책은 컨테이너가 규정을 준수하는 지역에서만 실행되도록 합니다.