Kubernetes 기본 개념
2026. 6. 13. 09:13ㆍKubernetes
Ⅰ. Kubernetes 개념
Ⅰ - Ⅰ. Kubernetes
| Kubernetes | 구분 | 설명 |
| 정의 | 컨테이너화된 애플리케이션의 배포, 확장, 운영을 자동화하는 오케스트레이션 플랫폼 | |
| 핵심 역할 | 여러 서버 (노드)에 배포된 컨테이너들을 중앙에서 효율적으로 관리 | |
| 장애 복구, 자동 확장, 로드밸런싱 등을 자동으로 수행 | ||
| 비유 | Docker가 컨테이너를 만드는 도구라면 Kubernetes는 컨테이너를 관리하는 운영체제 (OS) 역할 수행 | |
| 등장 배경 | 컨테이너 수가 증가하고, 수동 배포, 업데이트, 확장 관리가 복잡해짐에 따라 이를 자동화하기 위해 Google이 내부 시스템 Borg를 기반으로 개발 |
|
| 관리 단위 | Pod, ReplicaSet, Deployment, Service, Namespace 등 리소스 단위를 통해 컨테이너를 논리적으로 그룹화하고 관리 |
|
| 주요 기능 | 자동 배포 및 롤백 (Deployment) | |
| 서비스 디스커버리 및 로드밸런싱 (Service) | ||
| 자동 스케일링 (HPA) | ||
| 셀프 힐링 (Self - Healing) (노드 / 파드 장애 시 자동 복구) | ||
| Config 관리 및 시크릿 관리 (ConfigMap, Secret) | ||
| 운영 방식 | 마스터 노드가 클러스터 상태 관리 | |
| 워커 노드에서 실제 컨테이너 실행 | ||
| 장점 | 애플리케이션 가용성 및 확장성 향상 | |
| 운영 자동화로 관리 효율성 증가 | ||
| 환경 일관성 보장 (개발 ~ 운영 동일 환경 유지) | ||
| 대표 구성요소 | API Server | |
| Controller Manager | ||
| Scheduler | ||
| Kubelet | ||
| Kube - Proxy | ||
| etcd |
Ⅱ. 핵심 리소스 오브젝트
● Pod
| Pod | 구분 | 설명 |
| 개념 | Kubernetes에서 컨테이너가 실제로 실행되는 최소 실행 단위 | |
| 구성 | 하나 이상의 컨테이너 + 스토리지 (볼륨) + 네트워크 네임스페이스 공유 | |
| 특징 | 같은 Pod 내 컨테이너는 IP, 포트, 파일 시스템 공유 | |
| 컨테이너 간 통신이 필요할 때 함께 배치 | ||
| 한계 | 일시적 (비영속적)이라서 장애 시 자동 재생성은 ReplicaSet 또는 Deployment가 담당 |
● ReplicatSet (RS)
| ReplicaSet (RS) |
구분 | 설명 |
| 개념 | 지정된 개수의 동일한 Pod 복제본을 항상 유지하는 리소스 | |
| 복제 및 업데이트 자동화 실행하는 리소스 | ||
| 역할 | Pod 수를 자동으로 조정 (추가 및 삭제 가능) | |
| 장애 발생 시 Pod를 자동 재생성 | ||
| 특징 | Pod의 스펙은 그대로 유지 | |
| 직접 사용보다 Deployment 내부에서 자동 관리 | ||
| 비고 | Deployment가 내부적으로 ReplicaSet을 생성하여 관리 |
● Deployment
| Deployment | 구분 | 설명 |
| 개념 | Pod와 ReplicaSet을 관리하여 배포, 업데이트, 롤백을 자동화하는 리소스 | |
| 주요 기능 | 롤링 업데이트 (Rolling Update) | |
| 버전 롤백 (Rollout / Undo) | ||
| 스케일 아웃 / 인 자동화 | ||
| 특징 | HPA (오토 스케일러)와 연동하여 자동 확장 | |
| 무중단 배포 가능 | ||
| 장점 | 운영자가 직접 Pod를 관리할 필요 없이 선언형으로 배포 상태 유지 가능 |
● Service
| Service | 구분 | 설명 | |
| 개념 | Pod에 안정적인 네트워크 접근 주소 (IP)를 제공하는 추상화 리소스 | ||
| 역할 | Pod의 IP가 변경되어도 고정 주소로 접근 가능 | ||
| 로드밸런싱 및 트래픽 분산 수행 (kube-proxy) | |||
| 유형별 특징 | 유형 | 설명 | |
| Cluster IP | 내부 접근 전용 (기본) | ||
| NodePort | 외부 접근 가능 (30000 ~ 32767) | ||
| LoadBalancer | 클라우드 L4 로드밸런서 연동 | ||
| Headless | 고정 IP 없이 DNS 통해 직접 Pod IP 반환 | ||
| 특징 | Pod의 동적 IP 문제를 해결하고 안정적 서비스 제공 | ||
● ConfigMap
| ConfigMap | 구분 | 설명 |
| 개념 | 비민감한 설정값 (Key - Value)을 Pod에 주입하기 위한 리소스 | |
| 사용 방법 | Pod에 환경변수 (envFrom) 또는 파일 볼륨 (volumeMounts)로 주입 | |
| 이미지 불변 | ||
| 이미지 외부에서 설정 관리 가능 | ||
| 설정 외부 주입 | ||
| 보안상 민감하지 않은 설정 데이터를 키와 값의 쌍으로 저장 | ||
| 볼륨 마운트는 수 초 ~ 분 내 파일 생신 (컨테이너 자동 재시작은 아님) | ||
| env 주입은 Pod 재시작 필요 (일반적으로 Deployment Rollout) | ||
| 특징 | 코드와 이미지 설정을 분리해 환경별 설정 관리 용이 | |
| 변경 시 Pod 재시작 필요 (자동 반영은 안 됨) |
● Secret
| Secret | 구분 | 설명 |
| 개념 | 비밀번호, 토큰, 인증서 등 민감정보를 안전하게 저장하는 리소스 | |
| 특징 | 데이터는 Base64로 인코딩 저장 | |
| ConfigMap과 동일하게 환경변수 또는 파일로 주입 가능 | ||
| 권한 제한 (RBAC)으로 보안 강화 필요 | ||
| 사용 예시 | 데이터베이스 접속 정보 | |
| API Key | ||
| 인증서 (SSL / TLS) 저장 |
● NameSpace
| Namespace | 구분 | 설명 |
| 개념 | 클러스터 내 리소스를 논리적으로 격리하기 위한 단위 | |
| 역할 | 동일한 이름의 리소스 중복 생성 가능 | |
| 팀 / 환경별 (dev, stage, prod) 네임스페이스 분리하여 운영 | ||
| 정책 설정 | ResourceQuota, LimitRange로 과다 사용 방지하여 자원 사용 제한 | |
| NetworkPolicy로 네임스페이스 / 라벨 단위 트래픽 제어하여 네트워크 통신 제한 (CNI 자원 필요) |
||
| 특징 | 하나의 소프트웨어 인스턴스가 여러 테넌트를 서비스하는 아키텍처인 멀티테넌시 (Multi-Tenancy) 환경에서 자원 격리 필수 요소 |
● Ingress
| Ingress | 구분 | 설명 | |
| 개념 | 외부에서 클러스터 내부 Service로 도메인 / 경로 기반 HTTP(S) 요청 라우팅 | ||
| 역할 | URL Path 또는 호스트 이름 기반으로 트래픽 분배 | ||
| Ingress Controller (nginx, HAProxy 등)가 필수 | |||
| 핵심 요소 | 요소 | 설명 | |
| IngressClass | 어떤 Controller를 사용할지 지정 | ||
| TLS | HTTPS 인증서 연동 | ||
| Path Type | Prefix / Exact 매칭 지원 | ||
| 특징 | Service보다 상위 개념 - 도메인 기반 라우팅 관리 | ||
● DaemonSet
| DaemonSet | 구분 | 설명 |
| 개념 | 클러스터 내 모든 노드 (또는 지정 노드)에 하나씩 Pod를 배포하는 리소스 | |
| 특징 | 새 노드 추가 시 자동 배포 | |
| 삭제 시 자동 정리 | ||
| 노드별 공통 서비스 운영용 | ||
| 장점 | 노드 레벨에서 항상 필요한 시스템 Pod 관리용 | |
| 사용 예시 | 로그 수집기 (Fluentd) | |
| 모니터링 에이전트 (Prometheus Node Exporter) | ||
| CNI 네트워크 플러그인 |
● StatefulSet
| StatefulSet | 구분 | 설명 |
| 개념 | Pod를 순서대로 생성하고, 고정된 이름과 스토리지, 네트워크 정체성을 유지하는 리소스 | |
| 특징 | Pod 이름과 스토리지가 일정 | |
| 순서 있는 배포 및 업데이트 | ||
| Headless Service와 함께 사용 | ||
| 비교 | Deployment는 Stateless, StatefulSet은 Stateful 관리용 | |
| 사용 예시 | 데이터베이스 (MySQL, MongoDB, Redis) | |
| 메시지 큐 (Kafka, RabbitMQ) | ||
| 분산 스토리지 (Ceph) |
● Job
| Job | 구분 | 설명 |
| 개념 | 한 번 실행 후 종료되는 단발성 작업 수행 리소스 | |
| 특징 | 작업 완료 시 Pod 자동 종료 | |
| 실패 시 재시도 가능 | ||
| 사용 예시 | 데이터 백업 | |
| 로그 집계 | ||
| 데이터 마이그레이션 |
● CronJob
| CronJob | 구분 | 설명 |
| 개념 | Job을 정해진 스케줄 (cron 표현식)에 맞춰 반복 실행 | |
| 특징 | Linux cron과 동일한 일정 설정 | |
| 동시 실행 제한 및 실패 시 재시작 설정 가능 | ||
| 사용 예시 | 주기적 로그 정리 | |
| 정시 백업 | ||
| 모니터링 데이터 수집 |
Ⅲ. Kubernetes 주요 리소스 간 차이점
● Pod vs ReplicaSet vs Deployment
| 구분 | Pod | ReplicaSet (RS) | Deployment |
| 역할 | 컨테이너 최소 실행 단위 | Pod 복제본 유지 및 관리 | Pod / RS를 버전 단위로 배포, 업데이트, 롤백 |
| 관리 범위 | 개별 Pod 직접 관리 | 동일 스펙 Pod 여러 개 관리 | RS를 통해 여러 Pod 버전 및 배포 이력 관리 |
| 자동 복구 | 없음 | 있음 (Pod 수 유지) | 있음 (자동 롤백, 업데이트 지원) |
| 주 사용 목적 | 실습용 | 단순 복제 / 스케일링 | 서비스 운영용 (실제 배포 단위) |
| 단일 테스트용 | |||
| 상위 리소스 | 없음 | Deployment가 관리 | 없음 (최상위) |
| 설정 변경 시 반영 | 기존 Pod 삭제 후 재생성 필요 | 기존 RS 수정 | 새 RS 생성 후 롤링 업데이트 수행 |
● Deployment vs StatefulSet vs DaemonSet
| 구분 | Deployment | StatefulSet | DaemonSet |
| 목적 | 무상태 (stateless) 서비스 배포 | 상태 유지 (stateful) 서비스 배포 | 모든 노드에서 공통 Pod 실행 |
| Pod 이름 | 임의 자동 생성 (랜덤) | 고정 이름 부여 (pod-0, pod-1 등) | 노드마다 1개씩 생성 |
| 스토리지 | 임시 볼륨 사용 (삭제 시 사라짐) |
PersistentVolume과 연결 | 필요시 로컬 스토리지 사용 |
| 배포 순서 | 병렬 배포 가능 | 순차 배포 (Ordered) | 전체 노드에 자동 배포 |
| 대표 예시 | 웹 서버 | DB, Redis | 로그 수집기 |
| API 서버 | Kafka | 모니터링 에이전트 | |
| 스케일링 방식 | Pod 수 조절 자유로움 | 순서 유지하며 스케일 조정 | 노드 추가 시 자동 배포 |
| 롤백 지원 | 지원 | 지원 (단, 순서 보장) | 지원 안 함 (단순 배포 구조) |
● Service vs Ingress
| 구분 | Service | Ingress |
| 역할 | Pod 간 통신을 위한 내부 IP 제공 | HTTP / HTTPS 기반의 외부 접근 제어 |
| 접근 범위 | 내부 (L4) 통신 중심 | 외부 (L7) 트래픽 제어 중심 |
| 라우팅 단위 | 포트 기반 | 도메인 / 경로 기반 (Host / Path) |
| 지원 프로토콜 | TCP / UDP | HTTP / HTTPS |
| 구현 방식 | kube - proxy가 IPVS / iptables로 분산 처리 | Ingress Controller (nginx, HAProxy 등)가 라우팅 담당 |
| 대표 예시 | 클러스터 내부 서비스 연결 | 외부 사용자가 example.com으로 접속할 때 라우팅 |
| 로드밸런싱 | L4 (IP / Port 단위) | L7 (URL / 도메인 단위) |
● ConfigMap vs Secret
| 구분 | ConfigMap | Secret |
| 목적 | 비밀이 아닌 설정값 관리 | 민감한 정보 (비밀번호, 토큰 등) 관리 |
| 저장 데이터 | 일반 Key - Value | Base64 인코딩된 Key - Value |
| 보안 수준 | 일반 수준 | 높은 보안 필요 (RBAC 연동 필수) |
| Pod 주입 방식 |
환경 변수 (env) | 환경 변수 (env) |
| 파일 (volumeMount) | 파일 (volumeMount) | |
| 예시 |
DB_HOST | DB_PASSWORD |
| PORT | API_KEY | |
| LOG_LEVEL | TLS 인증서 | |
| 변경 반영 시 | Pod 재시작 필요 | Pod 재시작 필요 |
● Job vs CronJob
| 구분 | Job | CronJob |
| 목적 | 단발성 (1회성) 작업 실행 | 스케줄 기반 반복 작업 실행 |
| 실행 방식 | 즉시 실행 후 완료 | Cron 표현식에 따라 주기적 실행 |
| 예시 | 데이터 백업 | 매일 0시 자동 백업 (0 0 * * *) |
| 로그 정리 1회 실행 | ||
| 실패 처리 | 재시도 횟수 설정 가능 (backoffLimit) |
실패 시 다음 스케줄 때 재시도 가능 |
| Pod 개수 | 1개 | 실행 시마다 새 Job 생성 |
'Kubernetes' 카테고리의 다른 글
| Kubernetes Label과 Annotation (0) | 2026.06.13 |
|---|---|
| Kubernetes Ingress (0) | 2026.06.13 |
| Kubernetes Service (0) | 2026.06.13 |
| kubernetes Controller (0) | 2026.06.13 |
| Minikube (0) | 2026.06.13 |