구글 과 컨테이너 기술 그리고 쿠버네티스
IT 기술 분야에서 컨테이너에 대한 관심은 최근 몇 년동안 급격히 높아지고 있습니다.
이 배경에는 구글에 개발하여 오픈소스로 공개한 쿠버네티스 의 영향도 크다고 할 수 있습니다.
Google에서는 15 년 이상 Linux 컨테이너 기술을 이용하여 대규모로 IT인프라스트럭처를 관리해 왔으며 운영 기간별로 세 가지 종류의 컨테이너 관리 시스템을 개발하여였습니다.
구글에서 만든 최초의 컨테이너 관리 시스템은 Borg 이며, Omega 를 거쳐 오픈소스인 Kubernetes 에 이르게 되었습니다.
Google의 업무 방식
Gmail에서 YouTube, 검색에 이르기까지 Google의 모든 제품은 컨테이너에서 실행됩니다.
개발팀은 컨테이너화를 통해 더욱 신속하게 움직이고, 효율적으로 소프트웨어를 배포하며 전례 없는 수준의 확장성을 확보할 수 있게 되었습니다. Google은 매주 수십억 개가 넘는 컨테이너를 생성합니다. 지난 10여 년간 프로덕션 환경에서 컨테이너화된 워크로드를 실행하는 방법에 관해 많은 경험을 쌓으면서 Google은 커뮤니티에 계속 이 지식을 공유해 왔습니다.
초창기에 cgroup 기능을 Linux 커널에 제공한 것부터 내부 도구의 설계 소스를 Kubernetes 프로젝트로 공개한 것까지 공유의 사례는 다양합니다. 그리고 이 전문 지식을 Google Cloud Platform으로 구현하여 개발자와 크고 작은 규모의 회사가 최신의 컨테이너 혁신 기술을 쉽게 활용할 수 있도록 하였습니다.
Source : https://cloud.google.com/containers/
구글 의 서비스 들은 어떤 인프라스트럭처에서 운영되고 있을까요?
- 지금까지 구글에서 운영한 인프라스트럭처의 종류는 ?
- Kubernetes 는 어떻게 만들어 지게 되었을까요 ?
- 공유 상태 모델에 의한 스케쥴링은 ?
Google 에서 개발한 최초의 통합 컨테이너 관리시스템 – Borg
Google에서 개발한 최초의 통합 컨테이너 관리 시스템은 Borg 라는 이름의 시스템이었습니다.
Borg는 리소스 활용도를 높이고 비용을 절감하는 방법으로 서로 다른 애플리케이션간에 시스템을 공유합니다.
이러한 공유는 Linux 커널에서 컨테이너을 이용하여 지연 시간에 민감한 사용자 서비스와 CPU를 많이 사용하는 일괄 처리 사이의 분리를 통해 자원 효율성을 향상 시켰기 때문에 가능했습니다.
공유 상태 방식을 자원 할당 스케줄링 – OMEGA
Google 은 Borg 다음으로 공유 상태 모델에 의한 스케줄링 우선 순위를 가진 선점과 경쟁을 통한 스케줄링을 가능하게 합니다.
공유 상태 모델의 주요 목적이 Scalability보다는 오히려 소프트웨어 개발의 유연성에 두고 있습니다.
자원할당을 위한 스케쥴링 방식 비교 – Monolithic, Two-level, Shared-state
Monolithic 방식은 클러스터 내에 단일 스케줄러가 존재하며 복수개의 프레임워크에 대한 스케줄링을 지원한다. 이 경우 스케줄러 내에서 각 프레임워크에 특화된 스케줄링 로직 때문에 지원할 수 있는 프레임워크를 추가하기 어렵다.
또한 단일 스케줄러라는 특징 때문에 대기중인 다른 작업들이 한 작업의 스케줄링 시간 동안 지연되느 Head-Of-Line Blocking 문제가 있다.
반면 Two-Level 방식은 전체 클러스터 내에서 동작하는 다수의 스케줄러를 배치하고 이들을 조정하는 단일 중앙 조정자 (Central Coordinator)를 둔다. 그러나 이경우에는 단일한 중앙 조정자가 스케줄링의 병목 지점이 되는 문제가 존재한다.
공유 상태 (Shared-State) 방식은 각 클러스터의 스케줄러에서 클러스터 전테 상태의 동기화가 이루어진다. 이 특징으로 인해 클러스터의 크기와 스케줄러 수에 비례하여 각 스케줄러에 동기화로 가해지는 부하와 지연이 증가하는 문제가 있다.
Allocation Module 병렬화를 통한 Mesos 스케줄러이 확장성 과 성능 향상 기법 – 한호돌, 오상윤
Google 에서 만든 오픈소스 클라우드 플랫폼 – Kubernetes
Kubernetes ( 쿠버네티스 ) 는 컨테이너화된 애플리케이션(Containerized Application)의 배포, 확장 그리고 관리를 할 수 있는 오픈 소스 컨테이너 오케스트레이션 시스템입니다.
쿠버네티스는 구글 엔지니어들이 개발하고 설계한 플랫폼으로서 수 년 전부터 내부에서 이용하던 컨테이너 클러스터 관리 도구인 “Borg” 와 ” Omega” 의 아이디어를 바탕으로 만들어진 오픈소스 소프트웨어입니다.
쿠버네티스는 2014 년 6 월에 시작하여 2015 년 7 월에 버전 1.0을 발표하였고, 현재에는 구글, 아마존, 애저 등 주요 클라우드 벤더와 Red Hat, IBM , Oracle 과 같은 소프트웨어 벤더 들이 각자의 브랜드로 Kubernetes 배포판을 제공하고 있습니다.
구글과 컨테이너 기술
컨테이너가 제공하는 리소스에 대한 고립 덕분에 Google은 업계 표준보다 훨씬 높은 서버 활용도를 높일 수있었습니다.
애플리케이션 지향 인프라스트럭처
컨테이너화는 데이터 센터를 머신 지향에서 애플리케이션 지향으로 변화 시킵니다.
잘 설계된 컨테이너와 컨테이너 이미지는 단일 애플리케이션으로 범위가 지정되기 때문에 컨테이너 관리는 머신이 아닌 애플리케이션 관리를 의미합니다.
컨테이너는 애플리케이션 환경을 캡슐화하여 애플리케이션 개발자 및 배포 인프라로부터 머신 및 운영 체제의 많은 세부 정보를 추상화합니다.
머신 지향에서 애플리케이션 지향으로의 전환은 애플리케이션 배포 및 인트로스펙션 (Introspection) 를 크게 향상시킵니다.
애플리케이션 지향 인프라 장점
- 애플리케이션 개발자와 운영 팀이 서버와 운영 체제에 대한 세부 사항에 대해 걱정하지 않아도됩니다.
- 실행중인 애플리케이션과 개발자에 미치는 영향을 최소화하면서 새로운 하드웨어를 출시하고 운영 체제를 업그레이드 할 수있는 인프라 팀의 유연성을 제공합니다.
- 관리 시스템에서 수집한 메트릭 정보(예 : CPU 및 메모리 사용량과 같은 메트릭)을 머신뿐만 아니라 애플리케이션에 연결하여 특히 스케일 업, 머신 장애 또는 유지 보수로 인해 애플리케이션 인스턴스가 발생할 때 애플리케이션 모니터링 할 수 있습니다.
구글은 컨테이너 관리 시스템을 구축 한 10 년의 경험을 통해 많은 것을 배웠으며 이러한 교훈을 Google의 최신 컨테이너 관리 시스템 인 Kubernetes에 포함 시켰습니다.
그 목표는 컨테이너의 기능을 기반으로 프로그래머 생산성을 크게 향상시키고 수동 및 자동 시스템 관리의 용이성을 제공하는 것입니다.
클라우드 개념 뽀개기와 데모 그리고 원격 실습까지 무료 체험
References & Related Links
- Borg, Omega, and Kubernetes Lessons learned from three container-management systems over a decade – https://queue.acm.org/detail.cfm?id=2898444
- 컨테이너 역사 – CHROOT, Docker, KUBERNETES – http://www.opennaru.com/openshift/container/history-of-the-container/
- Large-scale cluster management at Google with Borg – https://research.google/pubs/pub43438/
- Allocation Module 병렬화를 통한 Mesos 스케줄러의 확장성 및 성능 향상 기법 – https://www.koreascience.or.kr/article/CFKO201529368420175.pdf
WAS, Java Servlet 동작 방식 한눈에 알아보기_CHAPTER 3
/in Kubernetes, OpenShift, Red Hat, 발표자료/by 주하 원애플리케이션의 비동기 스레드가 느릴때 OPENMARU APM을 이용한 원인분석 방법_chapter 2
/in Kubernetes, OpenShift, Red Hat, 발표자료/by 주하 원왜 클라우드네이티브 를 도입해야 하나요?
/in Kubernetes, OpenShift, Red Hat, 발표자료/by 주하 원