Kubernetes(K8s) 알아보기

JeongJun Min·2025년 11월 16일

Kubernetes

목록 보기
1/4
post-thumbnail

Kubernetes(쿠버네티스)는
컨테이너로 이루어진 애플리케이션을 자동으로 배포, 확장, 관리해주는 오케스트레이션 플랫폼이다.

다수의 컨테이너를 운영하는 서비스에서 모든 컨테이너를 실행하려면 docker container run 명령어를 일일이 입력해야 한다. 하지만 쿠버네티스를 사용하면 여러 개의 컨테이너를 쉽게 생성하고 관리할 수 있다.

쿠버네티스의 구조

쿠버네티스는 도커에 비해 더 복잡한 쿠버네티스 클러스터, 컨트롤 플레인, 노드, 워크로드, 네트워크, 스토리지 등으로 이루어져 있다.

1. 쿠버네티스 클러스터

쿠버네티스는 보통 다수의 노드로 구성이 된다. 크게 마스터 노드와 워커 노드로 구분되며, 개발자는 주로 마스터 노드와 통신하며 사용자는 인터넷을 통해 워커 노드와 통신을 한다.

클러스터 내에서 마스터 노드와 워커 노드 간의 유기적인 통신이 중요한데, 이때 CNI(Container Network Interface)라는 개념이 사용된다. 대표적인 플러그인으로 Flannelcalico가 있다.

2. 컨트롤 플레인

마스터 노드는 컨트롤 플레인을 다루게 된다. 이는 쿠버네티스 클러스터의 전반의 작업을 관리하는 역할을 한다. 컨트롤 플레인에는 API 서버, etcd, 스케줄러, 컨트롤 매니저가 있다.

API 서버

쿠버네티스 작업은 kubectl 명령어를 통해 마스터 노드의 kube-apiserver에게 API 요청을 보냄으로 이루어진다. API 서버는 쿠버네티스 컨트롤 플레인에서의 프론트엔드 역할을 한다.

etcd

쿠버네티스 클러스터에 존재하는 모든 데이터를 저장하는 key-value 저장소이다.

스케줄러

쿠버네티스에서는 파드(Pod)라는 오브젝트를 통해 애플리케이션을 실행한다. 이때 새롭게 생성되는 파드를 어느 노드에 실행시킬지 결정하는 역할을 수행한다.

컨트롤러 매니저

쿠버네티스의 리소스를 관리하고 제어하는 역할이다. 컨트롤러는 마스터 노드에서 실행되며 클러스터 상태를 모니터링을 한다. 컨트롤러에는 디플로이먼트 컨트롤러, 서비스 컨트롤러, 레플리카셋 컨트롤러 등 여러 종류가 있다. 각 컨트롤러는 특정 리소스 타입을 관리한다.

3. 노드

쿠버네티스 노드를 구성하는 구성 요소와 역할은 다음과 같다.

Kubelet

각 노드에는 Kubelet이 실행되는데, Kubelet은 파드 내부의 컨테이너 실행을 담당한다. Kubelet은 파드의 상태를 모니터링하고, 파드의 상태에 이상이 있다면 해당 파드를 다시 재배포한다.

Kube-Proxy

Kube-Proxy는 노드에서 네트워크 역할을 수행한다. 노드에 존재하는 파드들이 쿠버네티스 내/외부와 네트워크 통신이 가능하게 한다.

컨테이너 런타임

컨테이너 런타임은 컨테이너의 생명주기를 담당한다. 이를 위해 Kubelet은 컨테이너 런타임과 통신하는데, 이때 사용하는 것이 CRI(Container Runtime Interface)이다. 컨테이너 런타임에는 containerd, CRI-O, CRI-dockerd 등이 있다.

파드

도커에서는 컨테이너가 단독으로 실행되었지만 쿠버네티스에서는 컨테이너가 단독으로 실행하는 것이 아닌 파드(Pod)내에서 실행된다. 파드는 컨테이너를 실행하기 위한 오브젝트로 각 파드는 한 개 이상의 컨테이너를 담을 수 있다. 하나의 파드에 속하는 컨테이너들은 하나의 목적을 위해 구성된 컨테이너들이므로 모두 같은 노드에 실행된다. 파드는 컨테이너처럼 일시적인 존재이다. 그러므로 실행될 때마다 IP 주소가 변경된다.

4. 워크로드

쿠버네티스에서 실제로 동작하는 애플리케이션(작업)의 집합을 의미한다.

레플리카셋

Deployment가 Pod 개수를 유지하기 위해 내부적으로 사용하는 리소스, 파드의 복제를 관리하며 클라이언트가 요구하는 복제본 개수만큼 파드를 복제하고 모니터링하고 관리한다.

디플로이먼트

애플리케이션의 배포와 스케일링을 관리한다.

스테이트풀셋

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

데몬셋

쿠버네티스 클러스터 전체 노드에 특정 파드를 실행할 떄 사용한다. 쿠버네티스를 구성하는 모든 노드가 파드의 복사본을 실행하도록 한다. 쿠버네티스 클러스터에 새로운 노드가 추가되면 파드 역시 추가된다. 주로 모니터링, 로깅 시스템 실행하는 데 사양된다.

잡과 크론잡

작업이 정상적으로 완료되고 종료되는 것을 담당한다. 만약, 파드가 정상적으로 종료되지 않는다면 재실행시킨다. 잡은 작업이 한 번 종료되는 것을 담당하고 크론잡은 동일한 작업이 스케줄에 따라 여러 번 수행하는 것을 담당한다.

5. 네트워크

쿠버네티스에서는 네트워크와 관련이 있는 두 가지 요소가 있다.

서비스

파드를 여러 개 묶어서 클러스터 외부로 노출 시키는 역할을 한다. Pod는 재시작될 때마다 IP가 변경되기 때문에, 안정적으로 접근하려면 Service의 고정 IP가 필요하다. 실행 중인 파드 수정 없이 외부에 노출시켜 클라이언트와 통신할 수 있다.

  • Culster-IP : 고정 IP를 제공하여 클러스터 내부 통신을 제공한다. (외부 노출x)
    • 연결된 여러 개의 파드(동일한 디플로이먼트)로 RoundRobind으로 연결한다.
  • NodePort : 각 Node의 특정 Port를 통해 클러스터 내부/외부 통신을 제공한다.
    • PAT방식, 공인IP와 포트를 사설IP와 포트로 연결, 노드의 IP가 직접 노출되므로 보안상 위험
  • LoadBalancer : 외부 로드밸런서를 자동으로 생성하고 공인 IP 를 서비스에게 부여한다.

인그레스

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

Ingress는 L7(HTTP/HTTPS 기반) 로 동작한다. 하나의 도메인 아래 여러 경로를 서비스하고 싶을 때 반드시 필요하다.

6. 스토리지

쿠버네티스는 기본적으로 파드가 생성될 때 임시 스토리지를 사용한다. 따라서 영구적으로 저장하기 위해 Persistent Volume 사용하여 파드의 상태와 상관없이 파일을 보관할 수 있다.

참고자료

<한 권으로 배우는 도커 & 쿠버네티스> - 장철원

profile
개발계발

0개의 댓글