쿠버네티스 용어 및 개념 정리
✔️ 쿠버네티스란?
컨테이너 관리도구, 즉, 컨테이너 오케스트레이션*을 위한 솔루션
*오케스트레이션 : 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용다호고 서비스를 제공하는 것을 의미
다수의 컨테이너를 유기적으로 연결, 실핼 종료할 뿐 아니라 상태를 추적하고 보존하는 등 컨테이너를 안정적으로 사용할 수 있게 만들어주는 것
✔️ 쿠버네티스 구성 요소
✅ 클러스터(Cluster)
- 클러스터는 워커 노드(Worker Node)와 마스터 노드(Master Node)로 구성되어있다.
- 각 노드는 물리 서버일 수도 있고, 가상 서버일 수도 있다. → 이것들이 묶여 하나의 클러스터(Cluster)가 된다.
✅ 노드(Node)
마스터노드(Master Node)
- 클러스터 전체를 관리한다. 워터 노드의 수에 따라 3~7개 정도로 달라지며 반드시 홀수여야 한다.
- 이유는 클러스터를 관리할 때 상태값에 대한 합의 진행 시 짝수라서 합의가 되지 않는 경우를 방지하기 위함이다.
워커노드(Worker Node)
- 마스터 노드의 관리를 받아 애플리케이션을 실행시키는 노드.
- 개수의 제한은 없지만 쿠버네티스에서 제공하는 네트워크 플러그인에 따라 수백~수천개까지 워커 노드의 수가 제한된다.
✅ 디플로이먼트(Deployment)
- 마스터 노드에 생성 되며 워커노드에 컨테이너화된 애플리케이션이 떠있는지 모니터링한다.
- 만약 노드가 다운되거나 애플리케이션이 동작하지 않는 경우 다른 노드에 애플리케이션을 생성한다.
✅ 파드(Pod)
- 실제 애플리케이션 컨테이너는 그림의 Containerized app이라고 되어있는 부분이다.
- 하나의 파드에는 여러개의 애플리케이션이 뜰 수 있다.
- 쿠버네티스에서 파드부터는 클러스터 내부 IP를 가지게 된다.
- 이 수준에서는 실행중인 애플리케이션을 클러스터 외부로 서비스할 수 없다. 외부에서 서비스 하기 위해 서비스(Service)가 필요하다.
✅ 서비스(Service)
- 서비스는 파드를 묶어 외부에 노출시킨다.
- 서비스들에 이름을 부여할 수 있다.
- 서비스만으로는 정말 간단한 라우팅만 지원함.
- 쿠버네티스로 클러스터를 구성하다보면 다양한 애플리케이션을 띄우게 되는데 이때 로드밸런싱이나 Https 같은 처리가 필요한 경우에는 인그레스(Ingress)를 사용한다.
✅ 인그레스(Ingress)
- 클러스터 외부에서 크래픽을 받아서 라우팅 룰에 따라 서비스에 라우팅을 수행한다.
- 마치 이전에 NginX로 로드밸런싱 환경을 구성했을 때와 비슷하다.
- 간단히 NginX가 해주는 역할과 인그레스의 역할이 거의 비슷하다고 보면 된다.
✅ 파드 스케일링
- 쿠버네티스(Kubernetes)의 구성요소는 아니지만 파드의 기능 중 하나이다.
- 스케일링 되는 단위는 파드기준이며 오른쪽 그림처럼 파드는 서비스로 묶여있다.
- 왼쪽에서 오른쪽으로 스케일 아웃이 될 수도 있고 반대로 스케일을 줄일 수 도 있다.
- 쿠버네티스(Kubernetes)에서는 오토스케일링 기준을 정해 줄 수 있는데 이때 기본적으로 CPU와 메모리 사용량으로 기준을 정해 줄 수 있다
Kubelet 이란?
Kubelet은 쿠버네티스 노드에서 실행되는 노드 에이전트로 Pod의 생성, 실행 및 모니터링에 핵심적인 역할을 수행합니다.
또한, 클러스터의 원활한 운영을 지원하기 위해 노드 상태 및 리소스를 관리하고 ControlPlane과의 통신을 위한 징검다리 역할 등 다양한 역할을 수행합니다.
✔️ 파드 배포를 중심으로 쿠버네티스 구성 요소 알아보기
🔷 Master 마스터 (마스터노드)
: 쿠버네티스의 전반적인 기능들을 컨트롤하는 역할
0️⃣ kubectl - 쿠버네티스 클러스터에 명령을 내리는 역할로, 다른 구성 요소들과 다르게 바로 실행되는 명령 형태(바이너리 Binary)로 배포되기 때문에, 마스터 노드에 있을 필요는 없지만, 통상적으로 주로 API 서버와 통신하므로 마스터 노드에 설정되어 있다.
1️⃣ API 서버 - 쿠버네티스 클러스터의 중심 역할을 하는 통로로서, 주로 상태 값을 저장하는 etcd와 통신하지만, 그 밖의 요소들 또한 API 서버를 중심에 두고 통신하므로 API 서버의 역할이 매우 중요하다. 회사에 비유하면 모든 직원과 상황을 관리하는 관리자에 해당.
2️⃣ etcd - 구성 요소들의 상태 값이 모두 저장되는 곳으로, 회사의 관리자가 모든 보고 내용을 기록하는 노트라고 생각하면 편함. 실제로 etcd 외 다른 구성 요소는 상태 값을 저장하지 않기 때문에, etcd의 정보만 백업돼 있다면 긴급한 장애 상황에서도 쿠버네티스 클러스터를 복구할 수 있다. 또한, etcd를 복제해 여러 곳에 저장해두면(분산 저장이 가능한 Key-balue저장소) 하나의 etcd가 장애를 일으키더라도 복제된 곳들이 살아 있기 때문에 시스템의 가용성을 확보할 수 있다.
*etcd = etc directory + Distributed
3️⃣ 컨트롤러 매니저 - 쿠버네티스의 오브젝트 상태를 관리하는 것으로, 워커 노드에서 통신이 되지 않을 경우, 상태 체크와 복구는 컨트롤러 매니저에 속한 노드 컨트롤러에서 이루어짐. 외에도 요청받은 파드 개수대로 파드를 생성하는 리플리카셋 컨트롤러, 서비스와 파드를 연결하는 역할을 하는 엔드포인트 컨트롤러 또한 컨트롤러 매니저에 속한다.
4️⃣ 스케줄러 - 노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 파드를 어떤 워커 노드에 생성 할 것인지를 결정하고 할당하는 역할을 담당한다. 파드를 조건에 맞는 워커 노드에 지정하고 파드가 워커 노드에 할당되는 일정을 관리하는 역할.
🔷 Node 노드(워커노드)
: 자원을 제공하는 역할을 하는 노드. 만약 클러스터의 자원을 늘리고 싶다면 노드를 추가 하면 된다.
5️⃣ kubelet - 파드의 구성 내용(PodSpec)을 받아서 컨테이너 런타임으로 전달하고, 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링한다.
6️⃣ 컨테이너 런타임(CRI, Container Runtime Interface) - 파드를 이루는 컨테이너의 실행을 담당하고, 파드 안에서 다양한 종류의 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스. 외에 그림에서 보이는 네트워크 플러그인과 CoreDNS는 통신 관계 순서와 상관 없기 때문에 10번대로 구분지어 있습니다.
7️⃣ 파드(Pod) - 1개 이상의 컨테이너로 단일 목적의 작업을 하기 위해 모인 단위. 웹서버 역할, 로그나 데이터를 분석할 수도 있음.
* 파드는 언제라도 죽을 수 있는 존재이다.
* VM(가상머신)은 언제라도 죽을 수 있다고 가정하지 않지만, 파드는 언제라도 죽을 수 있다고 가정하고 설계되어 있다.
참고 - 0️⃣~7️⃣ 까지는 기본 설정으로 배포된 쿠버네티스에서 이루어지는 통신단계를 구분한 것이다.
🔷 위 순서 외 선택 가능한 구성 요소
*️⃣ 네트워크 플러그인 - 클러스터의 통신을 위해 네트워크 플러그인을 선택하고 구성해야 하는데, 이 때 네트워크 플러그인은 일반적으로 CNI로 구성되어 있다. 주로 사용하는 CNI는 캘리코, 플래널, 실리움, 큐브 라우터, 로마나, 위브넷, 캐널 등이 있다.
* CNI(Container Network Interface) : 클라우드 네이티브 컴퓨딩 제단의 프로젝트로 컨테이너의 네트워크 안정성과 확장성을 보장하기 위해 개발되었다.
* Calicosms L3로 네트워크 구성, Flannel은 L2로 구성
*️⃣ CoreDNS - 빠르고 유연한 DNS 서버로, 클러스터에서 도메인 이름을 이용해 통신하는 데 사용하며, 실무에서 쿠버네티스 클러스터를 구성하여 사용할 때는 IP보다 도메인 네임을 편리하게 관리해 주는 CoreDNS를 사용하는 것이 일반적입니다.
✔️ 사용자가 재포된 파드에 접속할 때
파드가 배포된 이후 사용자 입장에서 배포된 파드에 접속하는 과정
1. kube-proxy - 쿠버네티스 클러스터는 파드가 위치한 노드에 kube-proxy를 통해 파드가 통신할 수 있는 네트워크를 설정한다. 이 때 실제 통신은 br_netfilter와 iptables로 관리하게 된다.
2. 파드(Pod) - 네트워크 설정을 마치고 배포된 파드에 접속하여 필요한 내용을 전달받게 된다. 이 때 대부분 사용자는 파드가 어느 워커 노드에 위치하는지 신경 쓰지 않아도 된다.
참고링크 바로가기
'🏁 IT & Product > ⌨️ Programming' 카테고리의 다른 글
[K8s/Cloud] Kubernetes 쿠버네티스 개요 (0) | 2025.03.28 |
---|---|
OData란? (0) | 2024.11.24 |
IPMI / BMC 란? 액세스 방법과 서버에서의 역할 (0) | 2024.11.09 |
[ IT 용어 ] 쿠키(Cookie)와 세션(Session)의 차이 (0) | 2024.05.22 |
[Figma] 디자인하다 궁금한 점 (0) | 2023.01.06 |