본문 바로가기
용어 사전

쿠버네티스(Kubernetes)란?

by 테크원 2023. 6. 20.
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)

쿠버네티스(Kubernetes)

쿠버네티스(Kubernetes)란?

쿠버네티스(Kubernetes)컨테이너 오케스트레이션(orchestration) 도구로서, 분산 시스템과 애플리케이션을 관리하기 위한 오픈 소스 플랫폼입니다. 쿠버네티스는 클러스터라는 개념을 사용하여 여러 물리적 또는 가상화된 머신에서 컨테이너를 실행하고 오케스트레이션합니다.

 

쿠버네티스는 컨테이너 기술인 도커(Docker) 컨테이너를 사용하는 애플리케이션의 배포, 확장, 관리, 스케일링을 자동화하고 효율적으로 운영할 수 있도록 도와주는데, 일반적으로 도커 컨테이너는 애플리케이션과 그에 필요한 모든 종속성을 포함한 독립적인 실행 환경을 제공합니다.

 

그러나 도커 컨테이너를 단일 개별적인 단위로만 다루면 복잡성이 증가하고 여러 개의 컨테이너로 구성된 애플리케이션을 관리하기 어려워지는데 이때 쿠버네티스가 도커 컨테이너를 자동화하고 효율적으로 운영할 수 있도록 도와주는 역할을 합니다.

 

쿠버네티스는 구글에서 2014년에 오픈소스로 시작되었으며, 현재는 클라우드 네이티브 컴퓨팅 재단(CNCF, Cloud Native Computing Foundation)에 의해 관리되고 있습니다. 이 프로젝트의 이름인 쿠버네티스는 그리스어로 "키잡이"나 "파일럿"을 뜻하며, 종종 K8s라는 약어로도 사용됩니다.

 

쿠버네티스의 주요 구성 요소

쿠버네티스는 컨트롤 플레인 컴포넌트(Control Plane Components)와 노드 컴포넌트(Node Components)로 나눌 수 있습니다.

 

1. 컨트롤 플레인 컴포넌트(Control Plane Components)

kube-apiserver: 쿠버네티스 API를 노출하고 클러스터의 프론트 엔드 역할을 담당하는 컴포넌트입니다. 클러스터 내부 및 외부에서 API 호출을 처리하고, 오브젝트의 생성, 수정, 조회, 삭제 등의 작업을 처리합니다.

etcd: 클러스터의 모든 데이터를 저장하는 일관성과 고가용성을 가진 키-값 저장소입니다. 쿠버네티스의 상태 및 구성 정보를 저장하고 필요에 따라 클러스터 간의 동기화를 담당합니다.

kube-scheduler: 새로운 파드를 실행할 노드를 선택하는 역할을 수행합니다. 파드의 리소스 요구 사항, 노드의 가용성, 가중치 등을 고려하여 최적의 노드를 선택하고 스케줄링합니다.

kube-controller-manager: 클러스터의 오브젝트 상태를 관리하는 여러 컨트롤러를 실행하는 컴포넌트입니다. 노드 컨트롤러, 디플로이먼트 컨트롤러, 서비스 어카운트 컨트롤러 등 다양한 컨트롤러가 포함되어 있습니다. 각 컨트롤러는 클러스터의 상태를 감지하고 필요에 따라 조치를 취하여 시스템을 유지 관리합니다.

cloud-controller-manager: 클라우드 공급자와 상호 작용하는 로직을 포함하는 컴포넌트입니다. 클라우드 제공 업체와 통신하여 노드 컨트롤러, 로드 밸런서 컨트롤러, 인그레스 컨트롤러 등을 실행합니다.

 

2. 노드 컴포넌트(Node Components)

kubelet: 클러스터의 각 노드에서 실행되는 에이전트로, 쿠버네티스의 주요 구성 요소 중 하나입니다. kubelet은 마스터 노드로부터 할당된 파드의 상태를 유지하고 파드의 실행을 관리합니다. 또한 컨테이너 런타임을 통해 파드 내부의 컨테이너를 실행하고 모니터링합니다.

kube-proxy: 클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념을 구현합니다. 서비스 요청을 적절한 파드로 전달하고, 로드 밸런싱 및 네트워크 정책을 관리합니다.

컨테이너 런타임*: 컨테이너 실행을 담당하는 소프트웨어입니다. 쿠버네티스는 다양한 컨테이너 런타임을 지원하며, containerd, CRI-O 등을 사용할 수 있습니다. 컨테이너 런타임은 파드 내부의 컨테이너를 생성, 관리, 모니터링합니다.

 

 

*컨테이너 런타임 인터페이스(CRI)는 쿠버네티스 클러스터의 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 프로토콜입니다. 쿠버네티스 컨테이너 런타임 인터페이스(CRI)는 gRPC 프로토콜을 사용하여 kubelet과 컨테이너 런타임 간의 통신을 정의하는데 CRI는 kubelet이 다양한 컨테이너 런타임을 사용할 수 있도록 플러그인 인터페이스를 제공합니다.

 

CRI를 통해 kubelet은 runc, containerd, CRI-O와 같은 OCI(Open Container Initiative) 표준을 준수하는 다양한 컨테이너 런타임을 지원할 수 있으며 이를 통해 kubelet은 컨테이너의 생성, 시작, 중지, 삭제와 같은 작업을 컨테이너 런타임과 통신하여 처리할 수 있습니다.

 

 

쿠버네티스가 제공하는 기능

쿠버네티스가 제공하는 기능으로는 서비스 디스커버리, 로드 밸런싱, 스토리지 오케스트레이션, 자동화된 롤아웃과 롤백, 자동화된 빈 패킹, 자가 치유 등이 있습니다.

 

1. 서비스 디스커버리(Service Discovery): 쿠버네티스는 서비스 디스커버리 기능을 제공하여 애플리케이션 내부의 서비스들을 자동으로 발견하고 찾을 수 있게 합니다. 서비스를 사용하는 클라이언트는 DNS 이름 또는 IP 주소를 통해 서비스에 접근할 수 있으며, 쿠버네티스는 이를 관리하여 자동으로 요청을 적절한 파드로 전달합니다.

 

2. 로드 밸런싱(Load Balancing): 쿠버네티스는 로드 밸런싱을 통해 애플리케이션에 들어오는 트래픽을 여러 파드로 분산시킵니다. 로드 밸런서는 효율적으로 트래픽을 분산하여 애플리케이션의 가용성을 높이고 성능을 개선합니다.

 

3. 스토리지 오케스트레이션(Storage Orchestration): 쿠버네티스는 스토리지를 관리하는 기능을 제공합니다. 볼륨(Volume)을 사용하여 컨테이너 내부에서 데이터를 영구적으로 저장하고 공유할 수 있으며, 다양한 스토리지 백엔드와 통합하여 데이터 관리를 자동화합니다.

 

4. 자동화된 롤아웃과 롤백(Automated Rollouts and Rollbacks): 쿠버네티스는 애플리케이션의 업데이트나 배포 과정을 자동화하고, 롤아웃 중 문제가 발생할 경우 롤백을 자동으로 수행할 수 있습니다. 이를 통해 애플리케이션의 업데이트 과정을 안전하게 관리하고, 시스템의 가용성을 유지할 수 있습니다.

 

5. 자동화된 빈 패킹(Automated Bin Packing): 쿠버네티스는 클러스터 내의 자원을 효율적으로 활용하기 위해 자동화된 빈 패킹을 지원합니다. 여러 파드를 클러스터 내의 머신에 최적으로 배치하여 자원 활용도를 극대화하고, 비용을 절감할 수 있습니다.

 

6. 자가 치유(Self-Healing): 쿠버네티스는 파드와 노드의 상태를 지속적으로 모니터링하고, 문제가 발생한 경우 자동으로 복구합니다. 파드가 비정상적으로 종료되거나 노드가 다운되어도, 쿠버네티스는 자동으로 해당 파드를 재시작하거나 다른 노드로 이동시켜 가용성을 유지합니다.

 

쿠버네티스의 장점

컨테이너 실행 플랫폼: 쿠버네티스는 물리 또는 가상 머신의 클러스터에서 컨테이너를 예약하고 실행할 수 있는 플랫폼을 제공합니다. 이를 통해 애플리케이션을 가볍고 격리된 환경인 컨테이너로 실행할 수 있습니다.

컨테이너 기반 인프라 구현: 쿠버네티스는 컨테이너 기반 인프라를 완전히 구현하고 사용할 수 있습니다. 컨테이너는 표준화되고 가볍고 이식성이 높아 애플리케이션 배포와 관리를 효율적으로 수행할 수 있습니다.

자동화된 배포 및 업데이트: 쿠버네티스는 애플리케이션의 배포 및 업데이트를 제어하고 자동화할 수 있습니다. 롤아웃 및 롤백 기능을 통해 안정적인 애플리케이션 배포를 지원하며, 자동 스케일링을 통해 애플리케이션 리소스를 필요에 따라 자동으로 확장할 수 있습니다.

스테이트풀 애플리케이션 지원: 쿠버네티스는 스토리지를 마운트하고 추가하여 스테이트풀 애플리케이션을 실행할 수 있습니다. 이를 통해 데이터베이스와 같은 상태를 유지해야 하는 애플리케이션도 쿠버네티스에서 운영할 수 있습니다.

확장성과 자가 치유: 쿠버네티스는 애플리케이션과 해당 리소스를 신속하게 확장할 수 있습니다. 또한, 자동 배치, 자동 재시작, 자동 복제, 자동 스케일링과 같은 기능을 통해 애플리케이션 상태를 지속적으로 모니터링하고 자가 치유할 수 있습니다.

다양한 기능 제공: 쿠버네티스는 서비스 디스커버리, 로드 밸런싱, 레지스트리, 네트워킹, 텔레메트리, 보안, 설치 및 클러스터 라이프사이클 관리 등 다양한 기능을 제공합니다. 또한, 다른 오픈소스 프로젝트와의 연계를 통해 기능을 확장할 수 있습니다.

클라우드 네이티브 애플리케이션 제작: 쿠버네티스 패턴을 사용하여 클라우드 네이티브 애플리케이션을 제작할 수 있습니다. 이는 마이크로서비스 아키텍처와 함께 사용되어 애플리케이션의 확장성과 유연성을 높일 수 있습니다.

 

쿠버네티스의 단점

학습 곡선과 복잡성: 쿠버네티스는 학습 곡선이 높고 복잡한 개념과 용어가 많습니다. 처음 사용자들은 이를 습득하는 데 시간과 노력이 필요합니다.

기존 시스템 호환성 및 인력 확보: 기존 시스템과의 호환성을 맞추거나 쿠버네티스를 활용할 수 있는 인력을 확보하는 것이 도전적일 수 있습니다. 기존 시스템의 마이그레이션과 관련된 작업이 필요할 수 있습니다.

성능 및 안정성: 쿠버네티스의 구조는 단순하나, 높은 성능과 안정성이 요구되는 시스템에는 적합하지 않을 수 있습니다. 대규모 데이터 처리 또는 실시간 트래픽 처리와 같은 경우에는 추가적인 최적화가 필요할 수 있습니다.

 

반응형