지난 시간에는 쿠버네티스에 대한 개념과 아키텍처에 대해 알아보았다. 쿠버네티스는 크게 마스터/워커 노드로 구성되어 있으며 지난 시간에는 마스터 노드의 구성과 역할에 대해서 알아보았다. 이번 시간에는 워커 노드에 대해서 자세히 알아보도록 하자.
[지난 시간 내용]
2024.04.13 - [[기술공부]/Kubernetes] - [k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)
[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)
지금까지 가상화 배포에서 컨테이너 배포로 바뀌게 된 배경과, 쿠버네티스가 등장하게 된 배경에 대해 알아보았다. 이번 시간에는 쿠버네티스의 개념과 아키텍처에 대해 알아보도록 하자. [지
developers-haven.tistory.com
1. k8s(쿠버네티스)란?
k8s는 컨테이너 런타임(Container Runtime, 컨테이너 실행 엔진)을 통해 컨테이너를 다루는 도구 중 하나이다. 노드에 컨테이너를 분산 배치하거나, 오류가 생긴 컨테이너를 교체하는 것 같은 일을 통해 컨테이너를 관리해준다. 그리고 k8s는 선언형 인터페이스를 사용하여 클러스터 상태를 계속 체크하면서 선언된 상태가 되도록 조치를 취하게 된다.
(참고) 명령형 인터페이스와 선언형 인터페이스의 차이
1. 명령형 인터페이스(CLI, Command-Line Interface) - 사용자가 직접 명령을 내리고 실행하며, 각 단계 및 세부사항을 명시해줘야 한다.
2. 선언형 인터페이스(Declarative Interface) - 사용자는 원하는 최종 상태만을 선언하고, 시스템은 해당 상태를 달성하기 위해 작업을 자동으로 처리해준다.
2. k8s 아키텍처
Worker Node 구성도
(1) Kube-proxy
- 각 워커 노드에서 구동되는 네트워크 proxy 서버로 k8s 내부 네트워크 트래픽 관리
- 워커 노드의 네트워크 규칙을 유지 및 관리하며 클러스터 내외부 통신을 가능하게 만듦
구조: 1개의 워커 노드 → 1개 이상의 pod → 각 pod 안에는 1개 이상의 컨테이너
워커 노드마다 Kube-proxy를 가지고 있고, 해당 워커 노드 내에는 1개 이상의 pod가 배치될 수 있다. 그리고 각 pod는 저마다 고유한 IP 주소를 가지게 되고 동일 pod 내의 컨테이너들은 해당 pod의 IP를 같이 공유한다. 이때, Kube-proxy를 통해 서로 다른 워커 노드에 있는 pod간의 통신이 이루어진다.
+----------------------------------------------------------------------------+ | 워커 노드 (Worker Node) | | (IP: 192.168.0.10) | | +------------------+ | | | kube-proxy | | | +------------------+ | | | | | v | | | | +---------------------------+ +---------------------------+ | | | 파드 | | 파드 | | | | (Pod - IP: 10.1.0.2) | | (Pod - IP: 10.1.0.3) | | | | +-----------------+ | | +-----------------+ | | | | | 컨테이너 1 | | | | 컨테이너 1 | | | | | | (IP: 10.1.0.2) | | | | (IP: 10.1.0.3) | | | | | | Port: 8080 | | | | Port: 8080 | | | | | +-----------------+ | | +-----------------+ | | | | | 컨테이너 2 | | | | 컨테이너 2 | | | | | | (IP: 10.1.0.2) | | | | (IP: 10.1.0.3) | | | | | | Port: 8081 | | | | Port: 8081 | | | | | +-----------------+ | | +-----------------+ | | | +---------------------------+ +---------------------------+ | +----------------------------------------------------------------------------+
(2) Kubelet
- 마스터 노드의 Kube-API-Server와 통신하며 서버를 통해 들어오는 신호 모니터링
- pod 상태를 유지 및 관리(생명주기 관리)하여 pod에서 컨테이너가 정상 동작하도록 관리
- 쉽게 생각하면 노드의 심장처럼 모니터링하고 관리하는 역할과 같음
Kubelet 기능
(1) pod 관리
: 마스터 노드로 부터 할당된 pod를 워커 노드에 배치하고 실행하는 역할 → pod 상태를 주기적으로 모니터링하고 관리하며 안정성을 유지
(2) Container 실행
: pod에 정의된 컨테이너를 실행하고 관리하는 역할 → 컨테이너 런타임(ex. Docker, Containerd)을 사용하여 컨테이너를 시작하고 중지시킴
(3) 리소스 모니터링
: 워커 노드의 리소스 사용량을 모니터링하며 클러스터 상태 파악 → 이러한 정보가 마스터 노드의 Kube-API-Server에 전달되어 ‘스케줄링’에 사용됨
(4) 상태(이벤트) 보고
: 마스터 노드의 Kube-API-Server에 주기적으로 노드와 파드 상태 보고
(5) 노드 자동 복구
: 워커 노드가 비정상적으로 종료되면 자동으로 복구 시도 → 노드 장애 시 클러스터 안정성 보장 가능
(3) Container Runtime Engine
- 워커 노드에서 컨테이너 실행을 담당하는 S/W (ex. Docker)
- 컨테이너 이미지를 가져오고 구동시키는 엔진 역할
두 번의 시간에 걸쳐, 쿠버네티스의 전체적인 아키텍처와 마스터/워커 노드의 구성과 역할에 대해서 알아보았다. 쿠버네티스를 처음 접한다면 아키텍처를 먼저 이해하는 것이 가장 중요하다고 할 수 있다. 이제 아키텍처를 이해했다면 그 다음으로 쿠버네티스의 오브젝트에 대해서 알아보도록 하자. 오늘도 이 내용이 많은 사람들에게 도움이 되었으면 좋겠다:)
'[기술공부] > Kubernetes' 카테고리의 다른 글
[k8s] 쿠버네티스 오브젝트 - pod에 대하여 (0) | 2024.04.13 |
---|---|
[k8s] 쿠버네티스 오브젝트란? (0) | 2024.04.13 |
[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1) (0) | 2024.04.13 |
[k8s] 도커와 쿠버네티스의 관계 (0) | 2024.04.13 |
[k8s] 컨테이너 등장 배경 with 가상화 배포 환경 (0) | 2024.04.13 |