[Kubernetes] 쿠버네티스의 개념과 구성 요소

2023. 9. 11. 09:40
반응형

 

 

쿠버네티스란?

 

쿠버네티스(Kubernetes)는 컨테이너 오케스트레이션 플랫폼의 하나로, 분산 시스템을 관리하고 배포하는 데 사용된다.

쿠버네티스는 컨테이너화된 애플리케이션을 자동화된 방식으로 관리하고 확장할 수 있도록 도와준다.

 

쉽게 말해서 컨테이너 기술을 제공해 주는 것의 예시가 도커라면, 쿠버네티스는 컨테이너들의 집합을 관리해주는 플랫폼이다.

 

예를 들어 생각해보면, 우리가 웹 서버를 여러대의 서버 인스턴스(컴퓨터)들에서 도커 컨테이너로 운영하고 있다고 생각해보자.

만약 쿠버네티스를 사용하지 않는다면, 우리는 배포할 때에, 일일이 서버 인스턴스에 접속해서 도커 명령어를 통해 업데이트를 진행해야 하는 번거로움이 있을 것이다.

 

쿠버네티스는 이런 일련의 과정을 자동화해주며, 도커 호스트 관리, 컨테이너 배치, 오토 스케일링, 로드 밸런싱, 헬스 체크 등 컨테이너 운영을 자동화하기 위한 도구로서 사용된다. 이런 도구를 오케스트레이션 플랫폼이라고 한다. 

 

 

오토 스케일링(Auto-Scailing)

해당 단어는 트래픽이 몰렸을 때, 새로운 인스턴스를 자동으로 생성해주고, 트래픽이 없으면, 인스턴스를 제거하는 것을 의미한다.

쉽게 말하면 접속자가 많으면 컴퓨터 대수를 늘리고, 접속자가 없으면 컴퓨터 대수를 줄이는 것이다.

 

로드 밸런싱

로드밸런서는 여러 대의 백엔드 서버 또는 인스턴스 그룹 사이에서 들어오는 트래픽을 분산하는 역할을 한다.

 

리버스 프록시

리버스 프록시는 클라이언트와 백엔드 서버 사이에 위치하여, 백엔드 서버의 포트, 리소스 자원 등의 노출을 방지하고 보안 강화

부하 분산

로드 밸런서의 주요 역할이며 , 사용자의 트래픽을 "여러대의 서버 인스턴스 (= 인스턴스 그룹)" 로 분배해주는 역할.

헬스체커

로드밸런서는 백엔드 서버에 대한 헬스 체크를 수행한다. 주기적으로 백엔드 서버에 요청을 보내서 서버 상태를 확인하고, 문제가 있는 경우 해당 서버에 트래픽을 전송하지 않는다. 문제가 있는 친구가 있으면 감지하여 다른 친구에게 보내서 처리한다는 뜻이다.

 

 

 

 

 

 


로드 밸런서와 쿠버네티스

 

로드 밸런서와 쿠버네티스는 모두 분산 시스템과 애플리케이션 배포에서 사용되는 기술이고, 오토 스케일링, 로드 밸런싱, 헬스 체크, 리버스 프록시 등의 기능을 수행한다는 공통점이 있다. 그렇다면 로드 밸런서와 쿠버네티스의 차이점은 무엇일까?

쿠버네티스는 로드 밸런서 이상의 기능을 제공한다. 애플리케이션 배포, 스케일링, 롤링 업데이트, 모니터링, 자동 복구 등 다양한 애플리케이션 관리 기능을 제공한다.

로드 밸런서는, 생성된 서버 인스턴스들에게 트래픽을 분산해주는 역할을 한다. 컨테이너는 가상 컴퓨터 안에서 실행되어야 하므로, 인스턴스가 실행되는 속도가 느리고, 부하를 분산할 때 비교적 느릴 수 있다.

 

쿠버네티스는 클러스터라는 큰 컴퓨터 안에서 도커 컨테이너들이 실행되고, 마스터 노드가 이들을 관리하기 때문에 별개로 서버 인스턴스를 관리하지 않아도 로드 밸런서와 동일한 역할을 할 수 있다. 또한 Pod 단위로 컨테이너를 자동으로 확장하고 관리하여 애플리케이션의 가용성을 높일 수 있으며, 오토 스케일링 및 롤링 업데이트와 같은 작업을 자동화한다. 

 

 

롤링 업데이트

분산시스템 환경에서, 컴퓨터를 차례로 업데이트 하는 것을 의미한다. 가장 큰 특징은 무중단 배포라는 것이다.

예를 들어 10대의 컴퓨터가 있다면, 첫번째 컴퓨터에 업데이트를 하는 동안, 부하는 다른 컴퓨터로 돌린다. 만약 첫번째 컴퓨터가 업데이트가 성공했다면, 만약 첫번째 컴퓨터에서 문제가 있다면 롤백을 한다. 두번째 컴퓨터에 업데이트를 진행한다. 해당 과정을 반복하여 10대의 컴퓨터에 배포하는 것이 롤링 업데이트이다.

 

쿠버네티스는 이런 롤링 업데이트를 자동으로 지원해준다.

 

 

 

 

 


쿠버네티스의 구성

 

https://commons.wikimedia.org/w/index.php?search=kubernetes+master+node&title=Special:MediaSearch&go=Go&type=image

 

 

1. Kubernetes Cluster

쿠버네티스가 관리하는 전체 시스템을 의미하며, 클러스터에는 여러 대의 서버, 가상 머신으로 구성된 노드들이 포함된다.

클러스터는 컨테이너를 배포하고 관리하는 집합체로서 사용되며, 하나의 클러스터 안에는, 여러개의 노드 안에서 실행되는 컨테이너 기반의 애플리케이션과 마이크로서비스를 운영할 수 있다.

 

2. Node

쿠버네티스 클러스터 내에서 컴퓨팅 자원을 제공하는 머신이다. 한 마디로 말하면 클러스터 내에서 실행되고 있는 컴퓨터들이다.

노드는 애플리케이션 컨테이너를 실행하는 데 필요한 CPU, 메모리, 디스크 등 리소스가 포함되어 있다.

노드 안에서는 한 개 또는 여러개의 컨테이너가 실행되는 Pod가 있다.

일반적으로 노드는 "워커 노드"라고 부르며, 이들을 관리하는 "마스터 노드"가 있다.

 

마스터 노드 (Kubernetes Master)

클러스터를 관리하고 제어하는 핵심 구성 요소를 포함하고 있다.

API Server : 쿠버네티스 클러스터 전체를 컨트롤하는 중심 컴포넌트이다. 모든 명령과 통신을 API를 통해 하며 RESTful API를 제공한다. 모든 쿠버네티스 컴포넌트와 사용자는 API Server를 통해 클러스터와 상호작용한다.

Controller Manager: 클러스터 내에서 실행 중인 다양한 컨트롤러들을 관리한다. 레플리카, 서비스, 볼륨, 노드 컨트롤러를 생성하고 관리하여 클러스터의 원하는 상태를 유지한다.

Scheduler : 새로운 Pod가 어떤 Worker node에서 실행될지를 결정한다. 노드의 리소스 사용률을 고려하여 할당한다.

Etec : 클러스터의 데이터베이스 역할을 하며, 클러스터의 상태나 설정값을 저장한다.

 

 

워커 노드 (Worker Node)

워커 노드는 마스터 노드로부터 받은 명령을 수행하고, 컨테이너를 실행하고 관리하는 역할을 한다.

Kubelet : 마스터 노드의 API 서버와 통신하여, 노드에 배포된 Pod를 관리하고, 상태를 주기적으로 보고한다.

Kube-proxy : 트래픽을 상태에 따라 적절한 Pod로 라우팅하여 분배해주는 로드 밸런싱 역할을 한다.

Container Runtime : 워커 노드에서 컨테이너를 실행하는 데 사용되는 소프트웨어이며, 일반적으로 Docker를 사용한다.

cAdvisor : 각 컨테이너와 시스템의 상태 및 성능을 수집하고, 마스터 노드에 보고한다.

Pod : 쿠버네티스의 기본 배포 단위이며, 하나의 팟 내에서 여러개의 컨테이너가 실행된다.

 

3. Pod

쿠버네티스의 기본 배포 단위이며, 하나 이상의 컨테이너를 포함하고, 동일한 네임스페이스와 스토리지를 공유한다.

결합성이 강한 컨테이너들을 함께 배포해야 하는 경우에 Pod이라는 개념이 나오게 되며, Pod 내에서 컨테이너들이 함께 실행되면, 서로 통신하거나 공유 데이터를 사용할 수 있게 된다. 예를 들어 웹 서버와, 데이터베이스 서버를 함께 실행하는 경우를 생각해 볼 수 있다.

반응형

BELATED ARTICLES

more