스트리밍 업계 최초의 Netflix는 기업이 경쟁 우위를 유지하기 위해 최신 기술을 통합하는 방법을 생생하게 보여줍니다.
일부 서비스를 컨테이너로 마이그레이션하는 동안 Netflix는 몇 가지 문제에 직면했고, 이로 인해 컨테이너 관리 플랫폼인 Titus가 개발되었습니다.
이제 Netflix는 하루에 총 200,000개의 클러스터와 50만 개의 컨테이너에 달하는 컨테이너 내에서 비디오 스트리밍, 콘텐츠 인코딩, 추천, 기계 학습, 스튜디오 기술, 빅데이터 및 내부 도구와 같은 서비스를 실행합니다.
조직에서는 끊임없이 변화하는 디지털 시장에 발맞추기 위해 새로운 애플리케이션을 개발하고 기존 애플리케이션을 개선하기 위해 컨테이너화를 채택하고 있습니다. IBM® 설문조사 에 따르면, 컨테이너 사용자 중 약 61%가 지난 2년 동안 새 앱의 절반 이상에 컨테이너를 사용했다고 답했으며, 64%는 향후 2년 내에 현재 앱의 절반 이상을 컨테이너화할 계획이라고 밝혔습니다. 엔터프라이즈 애플리케이션 현대화 솔루션은 이러한 전환에 필수적이며 기업이 경쟁력과 민첩성을 유지하는 데 도움이 됩니다.
이 블로그에서는 애플리케이션 컨테이너화의 과제, 이점 및 사용 사례에 대해 논의합니다. 자세히 알아보기 전에 컨테이너화를 정의해 보겠습니다.
애플리케이션 컨테이너화는 컨테이너라고 불리는 별도의 패키지에서 소프트웨어 애플리케이션을 실행하는 것입니다. 애플리케이션 컨테이너는 파일, 라이브러리, 환경 변수를 포함하여 애플리케이션을 실행하는 데 필요한 모든 것을 저장합니다. 따라서 사용 중인 운영 체제에 관계없이 응용 프로그램은 렌더링 호환성 문제 없이 원활하게 작동합니다.
애플리케이션을 컨테이너화하면 개발 속도가 빨라지고 효율성이 향상되며 하드웨어 및 기타 소프트웨어 종속성과 분리되어 보안이 강화됩니다. 컨테이너는 격리된 동안 모든 호스트 운영 체제에서 실행될 수 있습니다. 컨테이너는 Google 검색, YouTube, Gmail과 같은 주요 서비스를 지원합니다. Google은 또한 컨테이너 및 애플리케이션 관리를 위한 인기 있는 오픈 소스 플랫폼인 Kubernetes와 Knative를 개발했습니다.
컨테이너는 해당 구성, 종속성, 라이브러리 등과 함께 하나의 시스템에서 작성된 코드의 표현을 생성합니다. 이러한 표현은 다양한 플랫폼과 호환되는 컨테이너 엔진으로 작동합니다.
컨테이너의 주요 목적은 프로그래밍된 소프트웨어를 다양한 컴퓨팅 환경에서 분리하는 것입니다. 이를 통해 개발 환경 및 관행의 변화에 관계없이 다양한 플랫폼에서 일관된 코드 실행이 가능해집니다.
또한 컨테이너화 기술은 호스트 운영 체제 역할을 합니다. 그럼에도 불구하고 앞서 설명한 것처럼 상위 운영 체제와는 다릅니다.
현대 비즈니스 환경에서 컨테이너는 프로그램을 호스팅하는 데 자주 사용되며 특히 다음 사용 사례에 적합합니다.
마이크로서비스
마이크로서비스 기반 애플리케이션은 수많은 개별 부분으로 구성되며 대부분은 컨테이너 내부에 배포됩니다. 다양한 컨테이너가 함께 조직화된 애플리케이션을 만듭니다. 이 애플리케이션 설계 기술은 효과적인 확장 및 업그레이드에 도움이 됩니다. 증가된 로드를 처리할 때 전체 애플리케이션이 아닌 로드가 가장 높은 컨테이너의 크기를 조정해야 합니다. 마찬가지로, 전체 프로그램이 아닌 개별 컨테이너를 수정할 수도 있습니다.
CI/CD 파이프라인
컨테이너화된 앱을 통해 팀은 애플리케이션을 병렬로 테스트하고 CI/CD(지속적 통합/지속적 전달) 파이프라인을 가속화할 수 있습니다. 또한 테스트 환경에서 컨테이너화된 애플리케이션을 테스트하면 컨테이너가 호스트 시스템 간에 이식 가능하므로 프로덕션 성능을 밀접하게 표현할 수 있습니다.
반복적인 작업
대량 및 데이터베이스 작업은 컨테이너와 잘 작동하는 주기적인 백그라운드 작업입니다. 각 작업은 컨테이너 덕분에 다른 동시 작업을 방해하지 않고 작동할 수 있습니다.
데브옵스
컨테이너화된 앱을 사용하면 애플리케이션의 일관되고 가벼운 런타임 환경을 빠르게 생성할 수 있습니다. 이는 DevOps 팀이 원하는 대로 애플리케이션을 구축, 테스트, 실행하고 반복하는 데 도움이 됩니다.
컨테이너에는 매우 유용함에도 불구하고 몇 가지 제한 사항이 있습니다.
네임스페이스를 사용하면 호스트의 각 컨테이너가 호스트 운영 체제에서 할당된 리소스를 가져오고 컨테이너 내부에서 실행되는 프로세스를 외부 프로세스와 분리할 수 있습니다. 호스트 운영 체제의 모든 취약점은 동일한 OS에서 실행되기 때문에 모든 컨테이너에 위협이 될 수 있습니다. 또한 네트워크 설정이 손상된 경우 한 컨테이너에 대한 액세스 권한을 얻은 공격자가 다른 컨테이너나 호스트에 쉽게 액세스할 수 있습니다.
실행 중인 컨테이너에 포함된 데이터는 컨테이너가 중지될 때마다 사라집니다. 데이터를 저장하려면 영구 파일 시스템이 필요합니다. 대부분의 조정 도구는 영구 저장소를 지원하지만 공급업체의 제품은 품질과 실행이 다릅니다.
컨테이너를 빠르게 생성하면 이점이 있지만 관리되지 않는 컨테이너가 늘어나고 관리 복잡성이 증가할 수도 있습니다.
팀에서는 실행 중인 컨테이너의 회전 속도가 빠르게 증가하거나 감소하기 때문에 실행 중인 컨테이너를 추적하는 데 어려움을 겪는 경우가 많습니다. 수동 추적 컨테이너는 일반 호스트보다 12배 빠르게 변동하기 때문에 견고합니다.
애플리케이션 컨테이너화는 하드웨어 종속성 및 기타 소프트웨어 구성 요소로부터 다양한 기능을 분리하여 속도, 효율성 및 보안을 향상시킵니다. 컨테이너화된 애플리케이션은 다음과 같은 다양한 이점을 제공합니다.
컨테이너화된 애플리케이션은 다른 앱 및 시스템 구성 요소와 격리된 환경에 존재하므로 한 앱 내에서 발생하는 문제는 다른 앱이나 기본 시스템 구성 요소에 영향을 미치지 않습니다. 이러한 격리는 잠재적인 버그 사고의 범위를 효과적으로 제한합니다.
컨테이너화된 애플리케이션은 운영 체제와 독립적이기 때문에 서버, 가상 머신, 개발자 컴퓨터, 클라우드 등 다양한 환경에 걸쳐 이식 가능합니다.
컨테이너는 전체 운영 체제를 포함하지 않아 더 가볍기 때문에 가상 머신보다 더 효율적입니다.
컨테이너화된 애플리케이션은 컴퓨팅 기능과 애플리케이션 계층을 공유하여 머신의 리소스를 효과적으로 사용하므로 여러 컨테이너가 동일한 머신이나 가상 환경에서 동시에 실행될 수 있습니다.
증가하는 애플리케이션 수요를 수용하기 위해 컨테이너 인스턴스를 늘리는 것은 애플리케이션 컨테이너화의 원활한 프로세스입니다.
VM과 컨테이너는 특정 컴퓨팅 리소스를 '가상화'하는 데 중점을 두고 있지만 VM보다 컨테이너가 선호되는 경우가 많습니다. VM은 컨테이너화 기술에 비해 더 많은 오버헤드가 필요하기 때문입니다.
OS에 관계없이 가상 머신(VM)이 지원하는 또 다른 이점은 기업이 하나 이상의 시스템에서 가상으로 여러 서버를 실행할 수 있다는 것입니다. 컨테이너는 애플리케이션을 관리하고 가볍기 때문에 몇 초 만에 인스턴스를 가동 및 종료할 수 있습니다.
컨테이너화가 기업의 비용 절감에 어떻게 도움이 되는지 이해하기 위해 사례를 살펴보겠습니다.
과제 : Spotify는 플랫폼의 활성 사용자 수가 증가하여 월간 가입자가 2억 명이 넘으면서 증가된 작업량을 관리하는 데 어려움을 겪었습니다.
솔루션 : 이를 처리하기 위해 Spotify-
이전에는 가상 머신(VM)에서 실행되었던 마이크로서비스를 컨테이너화했습니다.
나중에 Helios로 명명된 컨테이너 오케스트레이션 플랫폼을 개발했습니다. 이러한 변경은 개발 속도를 높이고 비용을 절감하는 것을 목표로 했습니다.
결과 : 구현 측면에서 회사는 -
컨테이너화를 통해 워크로드, 클러스터, 인스턴스를 관리합니다.
모든 Spotify 컨테이너 및 서버를 관리하기 위한 Docker 기반 오케스트레이션 플랫폼을 구축했습니다. Helios는 컨테이너를 호스팅하는 서버와 상호 작용하기 위한 HTTP API를 제공했습니다.
Kubernetes와 Docker를 통합하여 개발 및 운영 작업을 가속화합니다.
과제 : 거대 신문사인 Financial Times는 자사 플랫폼에서 엄청난 양의 콘텐츠를 다루었습니다. 팀의 목표는 AWS 서버 운영과 관련된 비용을 최소화하는 것이었습니다.
솔루션 : 프레임워크를 업그레이드하고 컨테이너로 전환하여 이를 달성했으며, 그 결과 클라우드 서버 관리 비용이 80% 절감되었습니다. Docker를 컨테이너로 사용하는 동안 채택한 몇 가지 전략은 다음과 같습니다.
결과 : 개발팀은 기술 클러스터의 상태를 지원하고 서버 비용을 최소화하는 데 중점을 두었습니다. 그 결과 그들은-
Kubernetes 기반의 프라이빗 컨테이너 오케스트레이션 플랫폼을 만들었습니다.
150개의 마이크로서비스로 구성된 기술 스택을 컨테이너화했습니다.
과제 : Pinterest는 사이트에 게시된 수많은 이미지에 대한 추가 작업과 호스팅 비용을 처리해야 했습니다. 적절한 투자를 하기 위해 새로운 기술을 찾았습니다.
솔루션 : 팀의 목표는 다음과 같습니다.
결과 : Pinterest가 장기적으로 막대한 비용을 방지하는 데 도움이 된 컨테이너화된 프로세스는 다음과 같습니다.
모든 서비스별 종속성은 서비스 컨테이너라는 용어에 통합되었습니다. 이 방법을 사용하면 모든 개발 시스템 간에 하나의 AMI만 전송됩니다.
필요에 따라 컨테이너를 시작하고 중지하기 위한 Telefig라는 도구를 개발했습니다. 이 도구는 컨테이너에 영향을 미치는 모든 종속성을 관리하는 데 도움이 됩니다.
컨테이너 오케스트레이션 방법론을 구현했습니다. 일괄 작업 통합을 위한 다중 테넌트 클러스터 시스템을 구축합니다.
위의 예는 컨테이너화가 비용을 절감하고 생산성을 향상할 수 있음을 보여줍니다. Spotify, Financial Times, Pinterest와 같은 주류 기업은 컨테이너를 사용하여 추가 워크로드와 운영 비용을 처리하고 개발 및 제공 프로세스의 효율성을 개선하는 문제를 해결했습니다. 컨테이너화는 효율적인 리소스 관리 방법일 뿐만 아니라 복잡한 환경에서 변화와 성장을 촉진합니다.
컨테이너화된 애플리케이션에 널리 사용되는 플랫폼 중 일부는 다음과 같습니다.
도커
Docker는 관련 도구 네트워크와 함께 공유 운영 체제(OS)에서 가상화된 애플리케이션 컨테이너를 생성, 배포 및 감독하기 위한 오픈 소스 소프트웨어 플랫폼입니다.
LXC
LXC는 도구, 템플릿, 라이브러리 및 언어 연결로 구성된 Linux 컨테이너 런타임입니다. 이는 매우 기본적이고 적응성이 뛰어나며 업스트림 커널에서 지원하는 거의 모든 포함 기능을 포함합니다.
rkt
Rocket이라고도 불리는 rkt는 개별 컨테이너를 관리하거나 Docker 컨테이너로 작업할 수 있게 해 주는 동시에 컨테이너화된 애플리케이션에 대한 더 많은 유연성과 제어력을 제공하는 컨테이너 엔진입니다.
크리오
컨테이너 관리 플랫폼용 CRI(컨테이너 런타임 인터페이스)는 OCI 호환 런타임을 지원합니다. Kubernetes의 Docker 컨테이너 대신 자주 사용됩니다.
표준 컨테이너화된 애플리케이션 설정의 핵심 구성 요소는 세 가지 주요 요소로 구성됩니다.
컨테이너 엔진
Docker 컨테이너, CRI-O, Containerd 및 Windows 컨테이너와 같은 도구는 애플리케이션을 관리하는 데 필요한 관리 비용을 줄이고 애플리케이션을 쉽게 실행하고 환경 간에 전환할 수 있도록 해줍니다.
컨테이너 오케스트레이터
Kubernetes 및 OpenShift와 같은 플랫폼은 수많은 컨테이너를 관리하고 배포를 자동화하며 원활한 운영을 보장합니다.
관리형 Kubernetes 서비스
Amazon EKS 및 Google GKE와 같은 플랫폼을 사용하면 Kubernetes 관리가 쉬워집니다. 경험이 적은 조직이라도 설정과 운영을 단순화합니다.
컨테이너화는 원활하고 성공적인 DevOps 구현에 중요한 역할을 하며, 시스템에서 기본적으로 구축하기 어려웠던 애플리케이션 개발을 촉진합니다. 스타트업이든 대기업이든 컨테이너화는 민첩성, 이식성, 유연성 및 속도를 제공합니다. 컨테이너는 개발, 테스트, 생산 등 다양한 환경을 동일하게 만듭니다. 따라서 서로 다른 서버가 동일한 소프트웨어를 실행하는지 확인하기 위해 운영 팀에 의존할 필요가 없습니다.
Docker는 소프트웨어 개발자가 자신의 애플리케이션을 표준화된 격리 컨테이너에 번들로 묶을 수 있도록 널리 사용되는 컨테이너화 형식입니다. Docker는 기본 인프라에 관계없이 모든 시스템에서 애플리케이션 실행을 단순화합니다.
이론적으로 대부분의 앱은 컨테이너화할 수 있지만 전략의 성공 여부는 애플리케이션의 디자인, 종속성, 리소스 요구 사항과 같은 요소에 따라 달라집니다. 따라서 각 애플리케이션을 검사하여 컨테이너화가 구현 가능한지 여부와 그 이점을 확인해야 합니다. 웹 애플리케이션, 마이크로서비스, 상태 비저장 애플리케이션, 개발 및 테스트 환경, CI/CD 파이프라인은 컨테이너화할 수 있는 애플리케이션의 몇 가지 예입니다.
컨테이너화 기술이 발전하고 급속도로 확대되고 있습니다. DevOps 영역에서 Kubernetes와 Docker는 시장 수요를 충족하기 위해 계속 업데이트되기 때문에 개발자들 사이에서 관심을 끌고 있습니다. 마이크로서비스 아키텍처가 탄력을 받으면서 이러한 도구를 사용하면 팀이 컨테이너와 인프라를 더 쉽게 관리할 수 있습니다. 즉, 새로운 기능이 더 빠르게 출시되어 진행 중인 개발 및 제공 프로세스에 원활하게 적용될 수 있습니다.