컨테이너 오케스트레이션 핵심 기능 및 쿠버네티스 용어 정리
컨테이너 오케스트레이션이란?
여러 컨테이너의 배포, 네트워킹, 확장, 상태 관리, 장애 복구 등을 자동화하는 기술입니다.
컨테이너 오케스트레이션 핵심 기능 ★
- 비정상 컨테이너 감지 및 장애 발생 시 자동 재시작하거나 교체하여 복구하는 Self-healing 기능
- 트래픽이나 리소스 사용량에 따라 컨테이너 수를 조절하는 Auto-scaling 기능
- 다른 서비스 IP를 몰라도 서비스 이름으로 찾아 통신할 수 있는 서비스 디스커버리 기능
- 실행중 컨테이너를 새 버전 컨테이너로 순차 교체하여, 무중단 배포에 가깝게 다운타임을 최소화하는 Rolling Update 기능
- 신규 배포에 문제 발생 시 이전 버전으로 되돌릴 수 있는 롤백 기능
쿠버네티스 오토스케일링
Kubernetes HPA를 사용하면, CPU 사용량 등을 기준으로 Pod 수 자동 확장 및 축소가 가능합니다.
Cluster Autoscaler와 연동하면, Pod를 실행할 노드의 리소스가 부족할 때
EC2 워커 노드 수도 자동으로 확장하거나 축소할 수 있습니다.
컨테이너 오케스트레이션 툴 종류
Kubernetes, Docker Swarm, Nomad, AWS ECS 등이 있습니다.
컨테이너 수동 배포 단점
- 배포 시마다 직접 서버에 접속하여 작업해야 하므로 사람의 실수가 발생할 가능성이 높습니다.
- 컨테이너 수가 많아지면, 어떤 서버에서 어떤 컨테이너가 실행되는지 관리가 어렵습니다.
- 구버전 컨테이너를 종료하고 새 버전 컨테이너를 실행하는 과정에서 다운타임이 발생할 수도 있습니다.
- 트래픽 증가 시 컨테이너 수를 자동으로 조절하기 어렵습니다.
- 자동 재시작 설정이 없다면, 컨테이너 장애 발생 시 직접 재시작해야 합니다.
- 장애 컨테이너를 감지하려면 별도의 모니터링 시스템을 구성해야 합니다.
- 컨테이너 간 통신을 위해 Docker 네트워크를 직접 구성하고 관리해야 합니다.
쿠버네티스 개념
쿠버네티스 용어 정리
노드
EC2 서버와 같이 쿠버네티스 클러스터를 구성하는 물리 또는 가상 컴퓨터입니다.
워커 노드에서는 컨테이너 런타임이 Pod 내부의 컨테이너를 실행합니다.
컨트롤 플레인에 속한 노드는 컨트롤 플레인 노드 또는 마스터노드,
데이터 플레인에 속한 노드는 워커 노드라고 합니다.
Pod
하나 이상의 컨테이너를 묶어서 실행하는 쿠버네티스의 최소 배포 단위입니다.
파드 내부 컨테이너들은 같은 네트워크를 네임스페이스를 사용하며,
Volume을 마운트하여 스토리지를 공유할 수 있습니다.
Sidecar Pattern은 하나의 Pod에 메인 애플리케이션 컨테이너와
보조 역할을 하는 컨테이너를 함께 실행하는 패턴입니다.
kubelet (큐블렛)
각 노드에서 실행되며, 컨트롤 플레인 지시에 따라 Pod의 컨테이너를 실행 및 관리하는 에이전트입니다.
Pod 내부의 컨테이너 프로세스가 종료되면,
큐블렛이 Pod의 restartPolicy에 따라 컨테이너를 자동으로 재시작합니다.
kube-proxy 각 노드에서 실행되면서 Service로 들어온 요청이 적절한 Pod로 전달되도록 네트워크 규칙을 관리하는 컴포넌트입니다.
API Server를 통해 Service 및 EndpointSlice 변경 정보를 확인하고,
노드 iptables 등 네트워크 규칙을 설정하는 역할을 합니다.
API Server
쿠버네티스 API를 제공하고 사용자 및 각 컴포넌트의 요청을 받아 처리합니다.
컨트롤 플레인의 핵심 구성 요소 중 하나입니다.
데이터 플레인
실제 애플리케이션의 Pod, 컨테이너가 실행되는 영역입니다.
Pod를 실행하는 워커 노드, 큐블렛, 컨테이너 런타임 등으로 구성됩니다.
Deployment
여러 Pod를 원하는 개수만큼 생성하여 실행하고, 유지 및 업데이트하는 Kubernetes 리소스입니다.
상태를 저장하지 않는 애플리케이션을 파드로 실행하고 관리할 때 사용하면 좋습니다.
Deployment는 컨트롤 플레인에서 관리됩니다.
StatefulSets
상태를 유지해야 하는 애플리케이션의 Pod를 관리하기 위한 리소스입니다.
각 Pod에 고유하고 안정적인 이름과 네트워크 식별자를 부여하며,
PersistentVolume과 함께 데이터를 지속적으로 저장할 수 있습니다.
Service
Pod를 클러스터 내부 또는 외부에서 접근할 수 있도록 노출하는 Kubernetes 리소스입니다.
Service 리소스는 컨트롤 플레인에서 관리되고, Service 트래픽 전달은 데이터 플레인에서 처리됩니다.
LoadBalancer는 외부에서 접근 가능하도록 EXTERNAL-IP를 제공하는 Service 타입이고,
ClusterIP는 클러스터 내부에서만 접근할 수 있는 CLUSTER-IP를 제공하는 Service 타입입니다.
Ingress
클러스터 외부의 HTTP/HTTPS 요청을 로드밸런서 등 하나의 외부 진입점에서 받아,
URL 경로나 도메인 규칙에 따라 여러 Service로 요청을 전달하도록
라우팅 규칙 (Ingress Rule) 을 정의하는 Kubernetes 리소스입니다.
실제 요청 처리는 보통 Ingress Controller가 수행합니다.
컨트롤 플레인
클러스터 상태를 원하는 상태로 유지하도록 제어하고,
Pod를 어떤 노드에 배치할지 결정하거나 클러스터 전체를 관리하는 영역입니다.
쿠버네티스 구성 요소들이 클러스터와 통신할 때 요청을 받고 인증을 거쳐서 처리하는 kube-apiserver,
클러스터가 원하는 상태를 유지하도록 감시하고 조정하는 관리자 kube-controller-manager,
클러스터 상태 및 설정 정보를 저장하는 Key-Value 저장소 etcd,
어떤 노드에 Pod를 배치할지 결정하는 kube-scheduler 등이 포함됩니다.
쿠버네티스 클러스터
하나 이상의 워커 노드, 컨트롤 플레인으로 구성된 쿠버네티스 전체 실행 환경입니다.