본문 바로가기

카테고리 없음

쿠버네티스의 개념과 특징

쿠버네티스란?

그리스어로 조타수라는 뜻의 쿠버네티스는 오늘날 사실상 표준으로 사용되어 있는 컨테이너 도구입니다. 구글에서 2014년 오픈소스로 공개한 이후로, 오픈 시프트, 랜처와 같은 클라우드 플랫폼을 비롯한 많은 회사가 쿠버네티스를 실제 서비스 운영에 도입하여 사용하고 있습니다. 쿠버네티스는 도커 스웜 모드 처럼 여러 대의 도커 호스트를 하나의 클러스터로 만들어 준다는 점은 같지만, 세부적인 기능을 더욱 폭넓게 제공하고 있으므로 실제 서비스 운영 단계에서는 쿠버네티스가 가장 많이 쓰이고 있습니다. 

쿠버네티스의 장점 vs 단점

쿠버네티스는 다른 오픈소스 컨테이너와 비교해서 매우 많은 장점이 있습니다. 

① 서버 자원 클러스터링, 마이크로 서비스 구조의 컨테이너 배포, 서비스 장애 복구 등 컨네이너 기반의 서비스 운영에 필요한 대부분의 오케스트레이션 기능을 폭넓게 지원합니다.

② 구글 레드햇을 비롯한 많은 오픈소스 진영에서 쿠버네티스의 소스코드에 이바지하고 있으므로 성능과 안정성 면에서 신뢰받고 있습니다.

③ 영속적 볼륨, 스케줄링, 장애 복구, 서비스 디스커버리 및 인그레스 등 컨네이너 기반의 클라우드를 운영할 때 필요한 대부분 기능과 컴포넌트를 사용자가 직접 커스터 마이징 할 수 있습니다.

④ CNCF 및 다른 클라우드 운영 도구들과 쉽게 연동이 되므로 확장성이 높습니다.

여기서 CNCF란 마이크로서비스 및 컨네이너 기반의 클라우드와 관련된 오픈소스 프로젝트를 관리함으로써 생태계를 확장해 나가기 위한 리눅스 재단의 단체입니다. 쿠버네티스는 CNCF에 소속된 오픈소스이며, 도커 컨네이너의 핵심 중 하나인 컨네이너의 자료를 수집하기 위한 프로메테우스 등이 함께 CNCF에 소속이 되어 있습니다.

그러나 쿠버네티스는 다른 도구보다 훨씬 다양한 지식이 있어야 하며 쿠버네티스 자체의 관리가 더욱 어려울 수 도 있다는 단점이 있습니다. 쿠버네티스는 앞서 설명한 도커 스웜보다 구조가 훨씬 복잡하고 사용 방법이 다양하므로 쿠버네티스를 배우는 학습 비용 또한 고려해야 됩니다. 

쿠버네티스의 특징

- 모든 리소스는 오브젝트 형태로 관리된다.

쿠버네티스는 대부분의 리소스를 오브젝트라고 불리는 형태로 관리합니다. 오브젝트라는 단어가 조금 생소할 수는 있으나, 오브젝트는 우리가 알고 있는 추상화된 집합에서 크게 벗어나지 않는 개념입니다. 지난 장의 도커 스웜 모드에서 컨테이너의 묶음을 표현하기 위해 서비스라는 것을 사용했습니다. 쿠버네티스는 이러한 개념을 더욱 폭넓고 세밀한 단위로 사용합니다. 예를 들어 쿠버네티스에서는 컨테이너의 집합을 Pods, 컨테이너의 집합 관리하는 컨트롤러, 심지어 사용자, 노드까지도 하나의 포브젝트로 사용할 수 있습니다. 

- 쿠버네티스는 명령어로도 사용할 수 있지만 YAML 파일을 더 많이 사용합니다.

도커 스웜모드에서는 docer service create와 같은 명령어로 컨테이너 서비스를 생성하고 삭제했었습니다. 쿠버네티스에서도 마찬가지로 kubectl이라는 명령어로 쿠버네티스를 사용할 수 있으며 대부분 작업은 kubectl 명령어로 실행할 수 있습니다. 스웜 모드에서 스택을 생성하기 위해 YAML 파일을 사용했던 것처럼 쿠버네티스도 YAML 파일로 컨테이너 리소스를 생성하거나 삭제할 수 있습니다. 그러나 쿠버네티스에서 YAML 파일의 용도는 컨테이너뿐만 아니라 거의 모든 리소스 오브젝트들에 사용될 수 있다는 것이 가장 큰 특징입니다. 예를 들어 컨테이너 자체는 물론이고, 컨테이너의 설정값 비밀 값 등도 모두 YAML 파일로 정의해 사용합니다. 그리고 쿠버네티스에서 실제로 서비스를 배포할 때에도 kubectl 명령어가 아닌 여러 개의 YAML 파일을 정의해 쿠버네티스에 적용하는 방식으로 동작이 주로 됩니다. 그렇기 때문에 쿠버네티스를 잘 사용하는 방법을 한마디로 표현하자면 YAML 파일을 잘 작성하는 것이라고 해도 과언이 아닐 정도입니다. 따라서 앞으로 설명할 모든 리소스 오브젝트는 기초적인 부분을 제외하면 대부분 YAML 파일로 작성해볼 것입니다.

- 쿠버네티스는 여러 개의 컴포넌트로 구성되어 있습니다.

쿠버네티스 노드의 역할은 크게 마스터와 워커로 나뉘어 있습니다. 마스터 노드는 쿠버네티스가 제대로 동작할 수 있게 클러스터를 관리하는 역할을 담당하며, 워커 노드에는 애플리케이션 컨테이너가 생성됩니다. 도커 스웜 모드를 사용할 때는 단일 도커 데몬만을 설치해 사용했지만, 쿠버네티스는 도커를 포함한 매우 많은 컴포넌트가 실행됩니다. 예를 들어, 마스터 노드에서는 API 서버, 컨트롤러 매니저, 스케줄러,DNS 서버 등이 실행되며, 모든 노드에서는 오버레이 네트워크 구성을 위해 프락시와 네트워크 플러그인이 실행됩니다.

- 쿠버네티스 설치 환경의 종류

쿠버네티스를 사용하기 위해 가장 먼저 해야 할 일은 리눅스 서버와 같은 환경에서 쿠버네티스를 설치하는 것입니다. 그러나 도커 엔진과 달리 쿠버네티스는 사용 환경과 목적에 따라 설치하는 방법이 매우 다양하고 복잡합니다. 개발 용도로 로컬에서 사용하려면 별도의 어려움 없이 쉽게 설치할 수도 있지만, 실제 운영 단계의 쿠버네티스 클러스터를 구축하려면 클라우드 환경에서 수십 개의 서버에 동시에 쿠버네티스를 설치해야 할 수도 있습니다. 

쿠버네티스 버전 선택

어떤 환경에서 쿠버네티스를 설치할 것인지 결정을 했다면 어떤 버전의 쿠버네티스를 설치할 것인지 생각해 봐야 합니다. 어떠한 버전의 쿠버네티스를 설치해도 핵심 개념은 같으므로 사용 방법을 익히는 데에는 크게 지장이 없습니다. 그러나 쿠버네티스의 기능이 매우 빠르게 업데이트되기 때문에 사소한 버전 차이로 인해 쿠버네티스의 사용  기능이 달라질 수도 있습니다. 때문에 운영 단계의 쿠버네티스를 고려하고 있다면 쿠버네티스 버전을 신중히 선택하는 것이 바람직합니다. 쿠버네티스의 기능을 실제로 사용해본 뒤, 요구사항에 적합한 쿠버네티스의 버전을 적절히 선택하는 것이 가장 바람직하다고 생각합니다. 지금부터 설명할 쿠버네티스 설치 도구들은 모두 기본적으로 설치하는 쿠버네티스 버전이 정해져 있습니다. 별도로 쿠버네티스 버전을 명시하지 않더라도 기본적으로 설정된 버전이 설치됩니다.