
“로컬에서는 잘 되는데 서버에서만 안 돼요…”
“환경이 달라서 재현이 안 됩니다…”
AI/빅데이터 업무를 하다 보면 한 번쯤 들어봤거나, 겪어본 상황입니다.
이런 문제를 줄이기 위해 등장한 게 컨테이너이고, 그 컨테이너를 여러 서버에 알아서 잘 굴려주는 시스템이 바로 쿠버네티스(Kubernetes) 입니다.
이 글은 AI/빅데이터 직무를 하는 사람 관점에서,
쿠버네티스가 뭔지, 왜 쓰는지, 어떤 개념들만 알고 있으면 되는지 정리한 1탄(개념편)입니다.
(실습·구체적인 명령어는 2탄 이후에서 다룰 예정)
1. 왜 쿠버네티스를 쓸까?
클라우드가 보편화되면서 서비스 구조가 이렇게 바뀌었죠.
- 하나의 덩치 큰 서버 → 여러 개의 작은 서비스(마이크로서비스)
- 한두 대 서버 → 수십·수백 대 서버
- 수동 배포 → 자동 배포, 자동 복구, 자동 확장
이때 꼭 필요해진 게
- 환경을 통째로 묶어서 어디서나 똑같이 돌릴 수 있는 방식(컨테이너)
- 그 컨테이너들을 여러 서버에 자동으로 배치·관리해주는 시스템(쿠버네티스)
쿠버네티스 = 여러 대의 서버에 컨테이너를 알아서 배치·운영해주는 오케스트레이션 시스템
우리는 이 이미지를 이런 조건으로 몇 개 돌려줘만 선언적으로 써주고,
어디에 올릴지 / 죽으면 다시 살릴지 / 몇 개를 유지할지 같은 운영은
쿠버네티스가 맡는 구조입니다.
2. 컨테이너부터 짚고 가기: Docker vs 쿠버네티스

쿠버네티스를 이해하려면 먼저 컨테이너 개념이 필요합니다.
2-1. 컨테이너란?
- 애플리케이션 + 라이브러리 + 런타임 환경을 하나의 단위로 묶은 것
- 어디에 배포해도 동일한 환경에서 실행되도록 만들어주는 기술
- 가장 대표적인 도구가 Docker
AI/빅데이터 관점에서 보면
- 특정 버전의 Python, PyTorch, CUDA, 의존 라이브러리 등을
하나의 이미지(Image) 로 만들어두면, - 로컬·온프레미스·클라우드·쿠버네티스 어디서든 같은 환경으로 실행 가능
2-2. 그럼 Docker만 쓰면 안 되나?
Docker만으로도 컨테이너를 실행할 수는 있습니다.
- 컨테이너가 많아지면
- 어느 서버에서 뭐가 도는지 관리가 어렵고
- 죽은 컨테이너를 다시 띄우는 것도 사람이 해야 하고
- 배포/롤백/오토스케일링을 직접 구현해야 합니다.
- 여러 서버(노드)를 하나의 자원 풀처럼 효율적으로 쓰기도 힘들어요.
그래서 등장한 게 쿠버네티스입니다.
Docker = 컨테이너를 만들고 실행하는 도구
Kubernetes = 컨테이너들을 여러 서버에 알아서 배치·관리하는 플랫폼
3. 쿠버네티스 기본 개념 한 번에 정리

쿠버네티스를 공부하다 보면 처음에 용어 폭탄을 맞는데,
AI/빅데이터 관점에서 우선 이 정도만 잡고 가면 충분합니다.
- Cluster / Node
- Pod
- Deployment
- Service
- Namespace, ConfigMap, Secret
하나씩 짧게 볼게요.
3-1. 클러스터(Cluster)와 노드(Node)
- 클러스터(Cluster)
- 쿠버네티스가 관리하는 전체 서버 묶음
- 보통 Control Plane(마스터 역할) + 여러 워커 노드로 구성
- 노드(Node)
- 컨테이너가 실제로 실행되는 개별 서버
- 물리 서버일 수도 있고, 가상 머신일 수도 있습니다.
“여러 대 서버를 하나의 큰 컴퓨팅 풀처럼 묶어놓은 게 클러스터,
그 안의 개별 서버가 노드” 라고 이해하면 편합니다.
3-2. 파드(Pod)
- 쿠버네티스에서 가장 작은 배포 단위
- 1개 이상의 컨테이너를 묶어놓은 것
- 같은 Pod 안의 컨테이너들은
- 같은 IP 주소
- 같은 저장공간(볼륨)
- 같은 네트워크 네임스페이스를 공유
실무에서는 대부분 컨테이너 1개 = Pod 1개로 구성하는 경우가 많습니다.
3-3. Deployment
Deployment는 이렇게 이해하면 됩니다.
“이 이미지를 항상 N개, 이런 설정으로 돌려줘.
죽으면 다시 살리고, 새 버전으로 부드럽게 업데이트해줘.”
예를 들어
라고 적혀 있으면, 쿠버네티스는 항상 Pod 3개를 유지하려고 합니다.
- Pod 하나가 죽으면 자동으로 새 Pod를 띄움
- 이미지 태그를 새 버전으로 바꾸면 롤링 업데이트(조금씩 새로 띄우면서 교체)
AI/빅데이터 직무 예시로 보면
- model-serving:1.0.0 이미지를 서버 3개에서 돌리고 있다가
1.1.0으로 올리고 싶을 때, 다운타임 없이 롤링 업데이트 가능
3-4. Service
Pod는 상태에 따라 쉽게 생기고 사라지기 때문에
- IP가 자주 바뀝니다.
- 특정 Pod의 IP를 직접 호출하는 방식은 위험합니다.
그래서 Service라는 개념이 있습니다.
- 여러 Pod 앞단에 있는 고정된 엔드포인트
- 뒤에 붙은 여러 Pod로 로드 밸런싱
예시:
- model-service라는 Service 뒤에 모델 서버 Pod 3개가 붙어 있다고 하면
- 클라이언트는 항상 model-service만 바라보고 호출
- 실제 트래픽 분산은 Service가 알아서 Pod들로 라우팅
3-5. Namespace, ConfigMap, Secret
- Namespace
- 하나의 클러스터를 논리적으로 나누는 공간
- 예) dev, stage, prod, 혹은 팀/프로젝트 단위로 나누기
- 권한·리소스 제한·이름 충돌 방지에 활용
- ConfigMap
- 환경변수, 설정 값 등을 이미지와 분리해서 관리
- 코드/이미지를 바꾸지 않고도 설정만 바꿀 수 있음
- Secret
- DB 비밀번호, API 토큰 등 민감 정보 관리용
- ConfigMap과 비슷하지만 민감한 데이터용이라는 점이 다름
4. AI·빅데이터 업무에서 쿠버네티스를 쓰면 좋은 이유
웹 서비스 회사만의 도구 같지만,
실제로는 AI/데이터 쪽에서도 꽤 잘 맞는 플랫폼입니다.
4-1. 실험 환경 통일 & 재현성
- 모델 학습 코드, 피처 엔지니어링, ETL 파이프라인을
전부 컨테이너 이미지로 만들어두면 - 팀원마다 로컬 환경이 달라도,
동일한 컨테이너 이미지 기준으로 실험을 재현할 수 있습니다. - 연구용 코드 → 서비스용 코드 전환 시에도
환경 차이로 고생하는 시간이 확 줄어듭니다.
4-2. 배치 작업 & 파이프라인 구성
쿠버네티스에는 Job / CronJob 리소스가 있습니다.
- Job
- 한 번 돌고 끝나는 작업(예: 하루치 데이터 전처리)
- CronJob
- 특정 주기마다 실행되는 작업(예: 매일 새벽 3시 ETL, 주간 리포트 생성 등)
Airflow, Argo Workflows 같은 워크플로우 도구도
뒤에서 쿠버네티스를 활용해서 작업을 스케줄링하는 구조를 많이 사용합니다.
4-3. 확장성과 자원 관리
- 평소에는 모델 서버를 2개만 돌리다가,
트래픽이 몰리면 자동으로 10개까지 늘리고, - 밤에는 학습 Job을 많이 돌리고, 낮에는 API 서버 위주로 돌리는 식으로
자원을 유연하게 할당할 수 있습니다.
쿠버네티스의 오토스케일링(HPA)과 GPU 노드 설정 등을 활용하면
- GPU 학습 Job들은 GPU 노드에서만 돌리게 하고,
- 경량 API 서버는 CPU 노드 위주로 돌리게 하는 식의 자원 최적화도 가능합니다.
5. 쿠버네티스 아키텍처: Control Plane과 워커 노드
조금만 더 깊게 보면, 쿠버네티스 클러스터는 크게 두 부분으로 나뉩니다.
- Control Plane (마스터 역할)
- 워커 노드(실제 컨테이너가 돌아가는 서버)
5-1. Control Plane(컨트롤 플레인)의 역할
주요 컴포넌트만 간단히 보면
- API Server
- kubectl 명령이나, 다른 서비스에서 오는 요청을 받는 입구
- 클러스터의 모든 요청이 이쪽으로 모입니다.
- etcd
- 쿠버네티스의 상태 정보를 저장하는 키-값 저장소
- 원하는 상태(Desired State)를 여기에 기록
- Scheduler
- 새 Pod를 어느 노드에 올릴까? 결정
- 노드의 자원 상태, 제약 조건 등을 고려해서 배치
- Controller Manager
- 실제 상태 vs 원하는 상태를 계속 비교·감시
- 예를 들어
- Deployment에 replicas: 3 이라고 적혀 있는데,
- 실제 Pod가 2개만 살아 있다면,
- Pod를 하나 더 만들어서 다시 3개로 맞춰줌
한 줄 요약
사용자가 선언한 상태와 실제 상태를 맞춰주기 위해
계속 상태를 감시하고 조정하는 두뇌 역할이 Control Plane이다.
5-2. 워커 노드에서 벌어지는 일
워커 노드에는 보통 이런 것들이 있습니다.
- kubelet
- Control Plane으로부터 이 노드에 이런 Pod를 올려라라는 명령을 받고,
- 컨테이너 런타임(Docker, containerd 등)에 실제 컨테이너 실행/정지를 요청
- kube-proxy
- Service와 Pod 사이의 네트워크 트래픽을 라우팅
- 로드 밸런싱, IP 테이블 설정 등에 관여
AI/빅데이터 입장에서 기억할 포인트는 단순합니다.
실제로 모델 서버, ETL Job, 배치 스크립트가
컨테이너 형태로 돌아가는 곳은 모두 워커 노드이다.
6. 한 번에 보는 쿠버네티스 워크플로우
이제 YAML 하나 적용했을 때, 내부에서 무슨 일이 일어나는지를 정리해보겠습니다.
- 우리가 kubectl apply -f deployment.yaml을 실행한다.
- API Server가 요청을 받고,
Deployment라는 리소스 정의를 etcd에 저장한다.
→ “이 애플리케이션은 replicas=3으로 돌아야 한다”는 원하는 상태 기록 - Scheduler가 “새로 만들어야 할 Pod들을 어느 노드에 올릴지”를 결정한다.
- 선택된 각 노드의 kubelet이 컨테이너 런타임에
- 해당 이미지 Pull
- 컨테이너 실행 요청
- Pod가 정상적으로 Running 상태가 되면,
- 앞단에 선언된 Service가 해당 Pod들의 IP를 대상으로 로드 밸런싱을 수행한다.
- 만약 Pod가 하나 죽으면?
- Controller가 “replicas=3인데, 지금 2개만 있네?”라고 감지하고
- 새 Pod를 하나 더 띄워서 다시 3개를 유지합니다.
AI/빅데이터 관점에서 요약하면
“나는 YAML에 모델 서버/배치 작업 스펙만 선언해두고,
나머지 인프라 운영은 쿠버네티스가 상태를 보면서 알아서 맞춘다.”
7. 로컬에서 연습해보기: Minikube / kind / k3s 간단 비교
실제 회사 클러스터에 바로 들어가서 실습하기 부담스럽다면,
로컬에 작은 클러스터 하나 올려서 연습하는 게 좋습니다.
대표적인 선택지는 아래 세가지입니다. Minikube를 추천합니다.
7-1. Minikube
- 가장 널리 알려진 로컬용 쿠버네티스
- 내 PC에 VM 또는 Docker 위에 클러스터를 하나 띄워줌
- 학습·테스트용으로 많이 사용
7-2. kind (Kubernetes in Docker)
- Docker 컨테이너 위에 쿠버네티스 클러스터를 올리는 방식
- CI 환경(예: GitHub Actions)에서 테스트용 클러스터 만들 때 자주 사용
- 로컬에서도 가볍게 여러 클러스터를 띄워볼 때 쓸 수 있음
7-3. k3s
- Rancher에서 만든 “경량 쿠버네티스 배포판”
- 리소스 적은 환경, 엣지/IoT, 집/연구실 작은 서버에 올리기 적합
- 실제 운영에 가까운 느낌으로 소규모 MLOps 환경을 구성해보고 싶을 때 좋음
8. 실제로 쓰면서 자주 겪는 삽질 포인트
실제로 쿠버네티스를 접하면, 개념보다 에러 처리로 고생할 때가 많습니다.
대표적인 것들만 몇 가지 짚어둘게요.
8-1. ImagePull 에러
- 에러 메시지 예
- ImagePullBackOff
- ErrImagePull
- 주 원인
- 이미지 이름/태그 오타
- Private Registry 인증/권한 문제
- 이미지를 빌드만 하고 레지스트리에 Push 안 한 경우
간단 체크 포인트
- 로컬에서 docker pull <이미지> 가 되는지 먼저 확인
- Private Registry라면
- Secret 생성 → imagePullSecrets 설정 여부 확인
8-2. Service / Ingress / 포트 문제
- Pod는 잘 떠 있는데 외부에서 접속이 안 되는 상황에서 자주 발생
확인할 것
- Service 타입(NodePort / LoadBalancer / ClusterIP) 설정
- Ingress 리소스의 host, path, backend Service 이름/포트
- Ingress Controller(nginx-ingress, traefik 등)가 실제로 설치되어 있는지
쿠버네티스를 처음 쓸 때 많이 헷갈리는 부분은
“Ingress 리소스만 만들었다고 끝이 아니라,
그걸 실제로 처리해줄 Ingress Controller가 클러스터에 설치되어 있어야 한다” 는 점.
8-3. 리소스 요청/제한 설정
resources.requests, resources.limits를 대충 두면
- 어떤 Pod는 CPU/메모리를 과도하게 먹고
- 어떤 Pod는 너무 적게 할당돼서 성능이 안 나오는 문제 발생
AI/빅데이터 작업에서는
- 학습 Job, 대용량 ETL Job은 메모리/CPU/GPU 리소스 요구량이 크기 때문에
- 각 Job/Pod별로 리소스 설정을 명시적으로 적어두는 게 좋습니다.
9. 앞으로 어떻게 공부를 이어가면 좋을까?
1탄에서는 개념 위주로만 정리했으니,
다음 단계로는 이런 키워드들을 자연스럽게 마주하게 되실 겁니다.
- Helm
- 여러 YAML을 템플릿화해서 관리하는 “쿠버네티스용 패키지 매니저”
- Argo CD / Flux
- GitOps 도구 (Git에 저장된 선언 상태를 기준으로 클러스터를 자동 관리)
- Argo Workflows / Airflow
- 데이터/ML 파이프라인 오케스트레이션
- Kubeflow, KServe, Seldon, MLflow + K8s
- 쿠버네티스 기반 MLOps 플랫폼
AI/빅데이터 직무에서 쿠버네티스를 어느 정도까지 알아야 할까?
개인적으로는 이렇게 3단계로 나눌 수 있습니다.
- Level 1 – 사용자 관점
- Pod / Deployment / Service 개념 이해
- kubectl로 배포, 로그 확인, 스케일 조절 가능
- 간단한 모델 서버·ETL Job을 YAML 수정해서 배포할 수 있는 수준
- Level 2 – 실무 활용 관점
- Namespace, ConfigMap, Secret, Ingress 활용
- Helm Chart로 공통 템플릿 만들어서 팀과 공유
- 오토스케일링, 리소스 최적화 개념 이해
- Level 3 – 플랫폼/인프라 관점
- 클러스터 구성, 네트워크/스토리지, 모니터링/로그 수집까지
- DevOps/플랫폼 엔지니어 역할에 가까운 영역이지만,
아키텍트/리더라면 개념 정도는 알고 있으면 좋음
'IT > [클라우드]' 카테고리의 다른 글
| [Kubernetes] Rolling Update & Rollback으로 FastAPI 무중단 배포하기 (3) (0) | 2025.11.23 |
|---|---|
| [Kubernetes] Minikube로 FastAPI 앱 배포하기 실습 (2) (0) | 2025.11.22 |
| [AWS EC2] EC2 인스턴스 볼륨 용량 늘리기 (0) | 2024.06.04 |
| [AWS EC2] 포트 개방 기본 (맨날 헷갈려서 메모) (0) | 2024.05.02 |
| [GCP] VSCode SSH 원격 제어 (0) | 2023.08.10 |