쿠버네티스 소개
쿠버네티스 깊게 이해하기 시리즈(1)
포스팅을 앞두고…
저번 포스팅에선 포드(Pod)의 생명주기 중 일부의 상태를 실습해보았는데요. 이전 게시물 다음으로 생명주기를 조금 더 자세히 다루어 보려 했으나. 공부를 할수록 조금 더 기본에 다가가게 되었습니다. 쿠버네티스, 컨테이너 등의 감으로 익힌 용어들을 쉽고 단순하게 누군가에게 설명시켜 주고 싶어졌기 때문입니다.
쿠버네티스 소개
쿠버네티스(Kubernetes)의 로고를 보면 외국 영화에서 볼법한 조타 장치인데요. 쿠버네티스(Kubernetes)라는 단어는 그리스어로 조종사 또는 조타수를 의미합니다.
이런 로고, 의미가 Kubernetes의 기능과 흡사한데요. 조타수가 배의 항로를 유지하고 선장의 명령을 수행하며 배의 방향을 보고하듯 Kubernetes는 애플리케이션을 조종하고 애플리케이션의 상태를 보고하는 역할을 지원합니다.
가끔 Kubernetes를 ‘k8s’라고도 많이 표기하는걸 보셨을거에요. ‘k8s’를 보고 ‘Kubernetes’로 읽어도 상관없지만, ‘k8s’는 ‘Kates’라고 발음합니다.
쿠버네티스 정의
쿠버네티스(Kubernetes)는 컨테이너에서 실행되는 컴퓨터 프로세스로 구성된 복잡한 대규모 응용 시스템의 배포 및 관리를 자동화하는 소프트웨어 시스템입니다.
인프라 추상화
* 그림 1.1(출처 - 쿠버네티스 공식문서)
컨테이너 개념에 대해 공부하신 분이라면 꼭 보는 그림입니다. 이 사진에 더해, Container Deployment
를 이해하고 싶으시다면 ‘널널한 개발자’님의 ‘20분 만에 전공자처럼 도커, 가상화 이해하기!’를 추천드립니다.
다시 얘기로 돌아와서 소프트웨어 개발자나 운영자는 애플리케이션을 배포하기로 결정 할 때 개별 컴퓨터에 애플리케이션을 배포하는 대신 쿠버네티스(Kubernetes)를 통해 이를 수행합니다. 쿠버네티스(Kubernetes)는 사용자와 애플리케이션 모두에 기본 하드웨어에 대한 추상화 계층을 제공하는데요.
쿠버네티스(Kubernetes)를 사용한다면, 애플리케이션으로부터 인프라를 추상화할 수 있고 애플리케이션을 더 쉽게 개발하고 구성할 수 있습니다.
* 그림 1.2 쿠버네티스(Kubernetes)를 사용한 인프라 추상화
애플리케이션 배포 방식의 표준화
기초적인 인프라의 세부사항이 애플리케이션 배포에 더 이상 영향을 주지 않기 때문에, 우리는 회사의 데이터 센터에서 애플리케이션을 배포하는 방식이 클라우드에서 하는 것과 동일하게 이루어집니다. 애플리케이션을 설명하는 단 하나의 매니페스트(Manifest)를 사용하여 로컬 배포는 물론 어떤 클라우드 제공자에서든 배포할 수 있습니다. 기초적인 인프라의 모든 차이점들은 쿠버네티스에 의해 처리되므로, 개발자는 애플리케이션과 그 안에 포함된 비즈니스 로직에만 집중할 수 있습니다.
애플리케이션을 선언적으로 배포
쿠버네티스(Kubernetes)는 그림 1.3
에 보이는것처럼 애플리케이션을 선언적 모델로 정의합니다. 여러분은 애플리케이션을 구성하는 컴포넌트들을 정의하고, 쿠버네티스는 이를 바탕으로 실제 동작하는 애플리케이션을 구축합니다. 그리고 필요에 따라 애플리케이션의 일부를 재시작하거나 다시 생성함으로써 애플리케이션을 계속 건강하게 유지합니다.
* 그림 1.3
애플리케이션 정의를 변경할 때마다 쿠버네티스(Kubernetes)는 실행 중인 응용 프로그램을 새로운 정의와 일치하도록 재구성합니다.
쿠버네티스(Kubernetes)의 역할
쿠버네티스(Kubernetes)에 애플리케이션을 배포하자마자 애플리케이션의 일반적인 관리를 맡게됩니다. 애플리케이션을 실패한 경우의 재시동, 하드웨어 오류, 인프라 변경등 쿠버네티스(Kubernetes)는 이러한 작업들을 자체적으로 수행합니다. 이러한 쿠버네티스(Kubernetes)의 장점들이 엔지니어의 시간울 효율적으로 단축시켜줍니다. 쿠버네티스(Kubernetes)가 수행하는 기능들과 그 이점에 대해서도 앞으로 천천히 학습하며 포스팅 해보도록 하겠습니다.
쿠버네티스(Kubernetes)의 역사
쿠버네티스(Kubernetes)는 Google에서 개발했습니다.(갓구글..) Google은 거의 항상 컨테이너에서 애플리케이션을 실행해 왔습니다. 2014년 초부터 매주 20억 개의 컨테이너를 시작한다고 하는데요. 초당 3,000개의 컨테이너라고 합니다. 지금도 계속해서 늘어나고 있을 수도 있습니다. 전 세계 수십 개의 데이터 센터에 분산된 수천 대의 컴퓨터에서 이러한 컨테이너를 실행합니다. 이제 이 모든 작업을 수동으로 수행한다고 상상한다면, Google이 Kubernetes를 개발할만 했겠죠..
쿠버네티스(Kubernetes)는 Red Hat과 같은 다른 회사들이 이 프로젝트를 개발하는데 동참했다고 합니다. 그 결과, 이 프로젝트는 Google의 기대를 뛰어넘는 결과로, 현재 전 세계에서 주요한 오픈소스 프로젝트 중 하나가 되었습니다.
쿠버네티스(Kubernetes)는 Cloud Native Computing Foundation (CNCF)의 지휘 아래 많은 관련 오픈 소스 프로젝트를 만들어냈습니다. CNCF는 KubeCon 컨퍼런스를 전세계에 걸쳐 진행하며 커뮤니티를 형성하고 확장하고 있습니다. 한국에서는 7월3일에 열렸었습니다.
이런 내용들을 살펴보면 쿠버네티스(Kubernetes)가 전 세계 기업들의 어떤 변화를 가져왔는지 짐작해볼 수 있겠습니다.
글을 마치며
오늘은 쿠버네티스(Kubernetes)를 간단히 이해하는 시간을 가졌습니다. 다음은 쿠버네티스(Kubernetes)가 왜 그렇게 인기가 있는지 포스팅해보도록 하겠습니다.