
Kubernetes
Kubernetes는 컨테이너화된 애플리케이션의 자동 배포, 스케일링, 로드 밸런싱, 운영을 위한 오픈소스 플랫폼.
Google이 내부적으로 사용하던 Borg 시스템에서 파생되어 개발되었고, 2014년에 오픈소스로 공개.
이후 CNCF(Cloud Native Computing Foundation)로 이관되어 관리되고 있으며, 클라우드 네이티브 시대의 핵심 플랫폼이 되었음.
왜 Kubernetes가 필요한가
컨테이너는 일관된 실행 환경을 제공하지만, 수많은 컨테이너를 수동으로 관리하기에는 한계.
- 어떤 서버에 어떤 컨테이너를 띄울지 결정해야 했고, 장애 발생 시 수동으로 조치해야 했으며, 확장이나 롤링 업데이트 등도 복잡하게 진행되어야 했음.
이런 문제를 해결하기 위해 등장한 것이 Kubernetes임.
복잡한 컨테이너 운영을 자동화함으로써, 운영자와 개발자의 부담을 크게 줄여줌.
Kubernetes의 핵심 구성요소
Pod – 가장 작은 배포 단위
- 하나 이상의 컨테이너가 함께 실행되는 단위.
- 컨테이너들은 동일한 네트워크, 스토리지 공간을 공유.
- 일반적으로는 하나의 Pod = 하나의 애플리케이션 인스턴스.
Node – 컨테이너가 실행되는 실제 서버
- 물리적 서버 혹은 가상 머신.
- 각 Node에는
kubelet이라는 에이전트가 설치되어 있음. - Pod를 실행하고, 상태를 Control Plane에 보고.
Control Plane – 클러스터를 통제하는 두뇌
- 클러스터의 상태를 관리하고, 적절한 스케줄링을 수행.
- 주요 컴포넌트:
- API Server: 모든 명령의 진입점.
- Scheduler: 어떤 Node에 Pod를 배치할지 결정.
- Controller Manager: 상태 유지를 위한 제어 루프.
- etcd: 클러스터의 상태를 저장하는 Key-Value 저장소.
Deployment – 선언형 배포 관리
- "원하는 상태"를 정의하고, Kubernetes가 이를 유지.
- 자동 롤링 업데이트, 롤백, 재시작 등을 지원.
- 예: "이 애플리케이션을 3개의 인스턴스로 유지해라"라고 선언하면, Kubernetes가 이를 보장.
Service – 네트워크 추상화
- 여러 Pod들을 하나의 엔드포인트로 묶어주는 리소스.
- Pod가 재시작되어도 고정된 접근 주소를 제공.
- 내부 통신용 ClusterIP, 외부 노출용 LoadBalancer, NodePort 등을 지원.
Kubernetes의 작동 원리
Kubernetes는 선언형(Declarative) 방식으로 동작.
사용자는 “이렇게 되기를 바란다”는 상태를 명시하고, Kubernetes는 실제 상태를 이와 같게 유지하려고 지속적으로 조정.
예:
replicas: 3
스케일링 & 셀프 힐링
- 자동 스케일링
- 사용량(Metrics)에 따라 Pod 수를 자동으로 조절 가능.
- Horizontal Pod Autoscaler 리소스를 통해 설정 가능.
- 셀프 힐링
- 컨테이너가 Crash될 경우 자동으로 재시작.
- Node 장애 발생 시 다른 Node로 자동으로 재스케줄.
ConfigMap & Secret
- ConfigMap: 환경 설정을 외부에서 주입하기 위한 리소스.
- Secret: 암호, API 키 등 민감 정보를 안전하게 저장하기 위한 리소스.
둘 다 컨테이너 실행 시 환경 변수나 파일로 주입 가능함.
보안성과 유연성을 동시에 확보하게 되었음.
네트워킹과 Ingress
Kubernetes는 모든 Pod에 고유한 IP를 부여하고, 서로 자유롭게 통신할 수 있도록 설계.
- Ingress
- 클러스터 외부에서 내부 서비스에 접근할 수 있도록 해주는 리소스.
- 도메인 기반 라우팅, SSL 종료, 인증 처리 등이 가능함.
Helm & GitOps
- Helm
- Kubernetes 애플리케이션을 패키지화할 수 있는 도구.
- 복잡한 YAML 파일들을 템플릿화하여 재사용 가능하게 되었음.
- GitOps
- 모든 인프라와 애플리케이션 구성을 Git으로 관리.
- Git 변경 → 자동 반영
- → CI/CD가 코드 변경 기반으로 자동화.
멀티 클러스터 & 하이브리드 클라우드
- 여러 개의 클러스터를 운영하며, 필요에 따라 워크로드 분산 가능.
- 온프레미스 + 클라우드 환경에서도 유연하게 대응 가능.
- AWS, GCP, Azure 모두 Kubernetes 서비스를 제공하고 있음.
- 확장성과 커스터마이징.
CRD(Custom Resource Definition)을 통해 사용자 정의 리소스를 추가 가능.
Operator 패턴을 통해 복잡한 애플리케이션도 자동으로 설치, 복구, 업그레이드 가능.
다양한 네트워크, 스토리지, 보안 플러그인이 존재하며, 생태계가 매우 활발.
정리하며
Kubernetes는 단순한 컨테이너 관리 도구를 넘어,
현대적인 애플리케이션 운영의 표준 플랫폼으로 자리 잡았음.
- 인프라 자동화
- 무중단 배포
- 장애 복구
- 확장성 확보
이 모든 것을 자동으로 처리해주는 강력한 시스템임.
클라우드 네이티브 시대에는 Kubernetes 이해와 활용이 필수가 되었음.