본문 바로가기
DevOps/Kubernetes

쿠버네티스(K8s)의 기본 개념과 구조부터 파악해보자!

by 민우's 코딩 2024. 9. 19.

 

오늘은 쿠버네티스를 본격적으로 공부하기전 알고가면 더 좋을 기본 개념과 구조에 대해서 정리하려고 합니다!

 

출처 : https://m.yes24.com/Goods/Detail/126115324

 

한 권으로 배우는 도커 & 쿠버네티스 - 예스24

STEP BY STEP, 원리부터 이해하는 도커 & 쿠버네티스 가이드클라우드 기반의 인프라가 보편화된 현재의 IT 환경에서 도커와 쿠버네티스는 애플리케이션을 개발하고 운영하는 데 빼놓을 수 없는 중

m.yes24.com

 

(위 책을 공부한 기반으로 작성한 블로그입니다!)

 

 

 

쿠버네티스란?

컨테이너화된 애플리케이션의 자동 배포, 확장 및 관리를 해주는 오픈소스 플랫폼 입니다. 

 

쿠버네티스는 쉽게 말하자면 수많은 컨테이너관리하는 시스템입니다.

만약 서버를 100개 운영한다면 서로 다른 서버에서 작동하는 수많은 컨테이너들을 한꺼번에 관리를 한다? -> 가능은 하나 매우 힘들것입니다. (컨테이너가 100개라면 docker container run를 100번... -> docker compose로 가능하지 않냐? -> 도커 컴포즈는 단일 호스트 환경에서만 작동합니다...)

 

하지만 쿠버네티스를 사용하면 여러 개의 컨테이너를 쉽게 생성 및 관리가 가능합니다. 이거 하나만으로 벌써 쿠버네티스를 사용할 가치가 있죠!

 

 

쿠버네티스의 구조

쿠버네티스의 구조는 클러스터, 컨트롤 플레인, 노드, 워크로드, 네트워크, 스토리지 등 복잡한 구성이 이루어져 있습니다. 

우선 쿠버네티스는 크게 클러스터라는 하나의 큰 영역이 존재합니다. 그 영역안에는 마스터 노드, 워커 노드들로 구성되어 있다고 볼 수 있습니다. 여기서 마스터 노드는 개발자가 통신하고, 워커 노드는 사용자와 통신하는 경우가 대부분입니다.


쿠버네티스 마스터 노드 (컨트롤 플레인)

 

쿠버네티스 마스터 노드는 전반적으로 클러스터의 작업을 관리하는 역할인 컨트롤 플레인을 다룹니다.

컨트롤 플레인을 구성하는 요소는 위 그림과 같이 구성 되어있습니다.

 

1. kube-api-server : k8s 작업은 kubectl 명령어를 통해 마스터 노드 kube-api-server에게 API 요청을 보내며 이루어짐

2. etcd : k8s 클러스터에 존재하는 모든 데이터를 저장하는 key-value 저장소입니다.

3. kube-scheduler : 새롭게 생성되는 pod를 어느 노드에 실행시킬지 정하는 역할 수행

4. controller-manager : k8s 리소스를 관리하고 제어하는 역할, 클러스터 상태 모니터링, 컨트롤러에는 다양한 종류가 있음

 

 

쿠버네티스 워커 노드 

 

쿠버네티스 노드를 구성하는 요소를 다음과 같습니다.

1. kubelet : 파드 내부의 컨테이너 실행 담당, 파드의 상태를 모니터링하고 상태 이상 시 해당 파드를 다시 배포함

2. kube-proxy : 네트워크 역할, 노드에 존재하는 파드들을 k8s 내부/외부와 네트워크 통신이 가능하게함

3. container-runtime(docker): 컨테이너의 생명주기를 담당, kubelet은 컨테이너 런타임과 통신하는데 이때 사용하는 것이 컨테이너 런타임 인터페이스임, containerd, CRI-O 등이 있음

4. pod : 쿠버네티스에서는 컨테이너가 pod 내에서 실행하게됩니다. 파드는 컨테이너를 실행하기 위한 오브젝트이며 한 개 혹은 여러 개의 컨테이너를 담을 수 있습니다. -> 컨테이너를 그룹화 했다! / 쿠버네티스의 최소 실행 단위

 

 

 

쿠버네티스 워크로드(kubernetes workload)

 

쿠버네티스에서 실행되는 애플리케이션을 의미합니다. 쿠버네티스는 파드 내부에서 워크로드를 실행하게 됩니다. 파드는 실행 중인 컨테이너의 집합이라고 볼 수 있습니다 워크로드의 종류를 정리하자면 다음과 같습니다.

 

1. ReplicaSet : 파드 복제 관리, 설정파일에 욕한 복제본 개수 만큼 파드를 복제, 모니터링, 관리

2. Deployment : 애플리케이션의 배포와 스케일링을 관리하는 역할

3. StatefulSet : 파드 사이에서 순서와 고유성이 보장 되어야하는 경우에 사용

4. DaemonSet : 쿠버네티스를 구성하는 모든 노드가 파드의 복사본을 실행하도록함, 주로 로깅, 모니터링, 스토리지 등과 같은 시스템 수준의 서비스를 실행하는데 사용함

5. Job, CronJob : 일정 주기마다 업데이트를 해야하는 경우에 사용하는 느낌입니다. 잡은 그 주기가 없이 일시적인 업데이트가 필요할때, 크론잡은 주기적으로 정기적인 업데이트가 필요할때 사용하는 예시를 들 수 있습니다.

 

쿠버네티스 네트워크

 

1. Service : 파드를 여러 개 묶어서 클러스터 외부로 노출시킬 수 있습니다. 이미 실행 중인 파드를 외부로 노출시키기 위해 파드 내부를 수정할 필요가 없으며 파드 수정 없이 외부에 노출시켜서 사용자와 통신이 가능합니다.

 

2. Ingress : 쿠버네티스 내부에 존재하는 서비스를 HTTP/HTTPS 루트를 클러스터 외부로 라우팅하는 역할을 합니다.

 

쿠버네티스 스토리지

 

스토리지 볼륨

 

도커에서 컨테이너가 삭제될 때 파일을 보존하기 위해 도커 볼륨을 썼는데 여기서도 컨테이너 파일을 보존하기 위해 스토리지 볼륨이라는 개념을 활용합니다. 파드가 재실행되더라도 데이터를 보존할 수 있는 스토리지를 제공합니다.

 

1. emptyDir : 파드 내부에서 임시적으로 사용하는 볼륨

2. hostPath : 노드 내에 데이터를 저장할 수 있는 볼륨

3. PersistentVolume : 외부 서버에 데이터를 저장하는 볼륨

 

 

 

지금까지 미리 알아두면 좋을 개념과 구조들에 대해서 설명해보았습니다. 앞으로는 더 자세한 정리를 진행 할 예정입니다!

 

글 읽어주셔서 감사합니다 ~,~

'DevOps > Kubernetes' 카테고리의 다른 글

kubernetes (1)  (3) 2024.07.22
Kubernetes 기본 적인 구조  (0) 2024.02.07
Kubernetes  (0) 2024.02.06