Kubernetes
Kubernetes
개요
쿠버네티스(Kubernetes, 줄여서 K8s) 컨테이너화된 애플리케이션 자동으로 배포, 확장 및 관리하기 위한 오픈소스 컨테이너 오스트레이션 플랫이다. 구글이 내부 시스템인 Borg를 기반으로 개발하여 2014년에 공개한 쿠버네티스는 현재 클라우드 네이티브 컴퓨팅 재단(CNCF, Cloud Native Computing Foundation)에서 관리하고 있으며, 클라우드 환경에서의 애플리케이션 운영 표준으로 자리 잡았다.
쿠버네티스는 수천 개의 컨테이너를 효율적으로 관리하고, 장애 복구, 자동 스케일링, 롤링 업데이트, 서비스 디스커버리, 로드 밸런싱 등의 기능을 제공함으로써 개발자와 운영팀이 애플리케이션에 집중할 수 있도록 돕는다.
주요 개념
1. 노드(Node)
노드는 쿠버네티스 클러스터를 구성하는 물리적 또는 가상 머신이다. 두 가지 유형의 노드가 존재한다:
- 마스터 노드(Master Node): 클러스터를 제어하고 조정하는 역할을 담당한다. API 서버, 스케줄러, 컨트롤러 매니저, etcd 등을 포함한다.
- 워커 노드(Worker Node): 애플리케이션 컨테이너가 실제로 실행되는 노드로, kubelet, kube-proxy, 컨테이너 런타임(예: Docker, containerd)을 실행한다.
2. 파드(Pod)
파드는 쿠버네티스에서 배포할 수 있는 가장 작은 논리적 컴퓨팅 단위이다. 하나의 파드는 하나 이상의 컨테이너를 포함할 수 있으며, 동일한 네트워크 네임스페이스와 스토리지를 공유한다. 일반적으로 하나의 애플리케이션 컨테이너를 하나의 파드에 배포하지만, 사이드카 패턴 등으로 여러 컨테이너를 함께 실행할 수 있다.
3. 서비스(Service)
서비스는 동일한 라벨을 가진 파드 그룹에 접근할 수 있는 네트워크 엔드포인트를 제공한다. 파드는 동적으로 생성되고 소멸되며 IP 주소도 변할 수 있지만, 서비스는 고정된 IP와 DNS 이름을 제공하여 안정적인 통신을 가능하게 한다. 주요 유형으로는 [ClusterIP](/doc/%EA%B8%B0%EC%88%A0/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/%EC%84%9C%EB%B9%84%EC%8A%A4%20%EC%9C%A0%ED%98%95/ClusterIP)
, [NodePort](/doc/%EA%B8%B0%EC%88%A0/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/%EC%84%9C%EB%B9%84%EC%8A%A4%20%EC%9C%A0%ED%98%95/NodePort)
, [LoadBalancer](/doc/%EA%B8%B0%EC%88%A0/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/%EC%84%9C%EB%B9%84%EC%8A%A4%20%EC%9C%A0%ED%98%95/LoadBalancer)
, [ExternalName](/doc/%EA%B8%B0%EC%88%A0/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/%EC%84%9C%EB%B9%84%EC%8A%A4%20%EC%9C%A0%ED%98%95/ExternalName)
이 있다.
4. 디플로이먼트(Deployment)
디플로이먼트는 파드와 레플리카셋(ReplicaSet)을 관리하여 애플리케이션의 선언적 업데이트를 제공한다. 롤링 업데이트, 롤백, 자동 확장 등의 기능을 지원하며, 애플리케이션의 상태를 유지하는 데 핵심적인 역할을 한다.
5. 네임스페이스(Namespace)
네임스페이스는 클러스터 내 리소스를 논리적으로 분리하기 위한 메커니즘이다. 예를 들어, 개발, 스테이징, 프로덕션 환경을 각각의 네임스페이스로 구분하여 관리할 수 있다. 기본적으로 default
, kube-system
, kube-public
등의 네임스페이스가 존재한다.
아키텍처
쿠버네티스 클러스터는 다음과 같은 주요 구성 요소로 이루어져 있다:
구성 요소 | 설명 |
---|---|
API Server | 클러스터의 프론트엔드로, 모든 REST 요청을 처리하고 상태를 조정한다. |
etcd | 일관성과 신뢰성을 보장하는 키-값 저장소. 클러스터의 모든 상태 정보를 저장한다. |
Scheduler | 새로운 파드를 어떤 노드에 배치할지 결정한다. |
Controller Manager | 컨트롤러(예: 복제, 노드, 엔드포인트)를 실행하여 클러스터의 상태를 유지한다. |
Kubelet | 각 워커 노드에서 실행되며, 파드의 상태를 보고하고 컨테이너를 관리한다. |
Kube-proxy | 네트워크 규칙을 관리하고, 서비스의 로드 밸런싱을한다. |
컨테이너 런타임 | 컨테이너를 실행하는 소프트웨어(Docker, containerd, CRI-O 등). |
핵심 기능
자동 스케일링
- 수평적 파드 자동 스케일링(HPA, Horizontal Pod Autoscaler): CPU 사용률이나 사용자 정의 메트릭에 따라 파드 수를 자동으로 늘리거나 줄인다.
- 클러스터 오톈 스케일링(Cluster Autoscaler): 리소스 부족 시 자동으로 노드를 추가하거나, 불필요한 노드를 제거한다.
자가 치유(Self-healing)
파드가 실패하거나 비정상 종료될 경우, 쿠버네티스는 자동으로 새로운 파드를 생성하여 지정된 상태를 유지한다. 또한, 라이브니스 및 리드니스 프로브를 통해 애플리케이션의 건강 상태를 모니터링하고 필요 시 재시작한다.
선언적 구성 관리
사용자는 YAML 또는 JSON 파일을 통해 원하는 상태를 선언하고, 쿠버네티스가 현재 상태와 비교하여 차이를 해소한다. 이 방식은 인프라를 코드로 관리하는 IaC(Infrastructure as Code)에 적합하다.
스토리지 오케스트레이션
로컬 스토리지, 네트워크 스토리지(NFS, iSCSI), 클라우드 스토리지(GCP, AWS, Azure) 등을 동적으로 마운트할 수 있으며, [PersistentVolume](/doc/%EA%B8%B0%EC%88%A0/%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80/%EC%A7%80%EC%86%8D%EC%84%B1%20%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80/PersistentVolume)
(PV)과 [PersistentVolumeClaim](/doc/%EA%B8%B0%EC%88%A0/%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80/%EC%A7%80%EC%86%8D%EC%84%B1%20%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80/PersistentVolumeClaim)
(PVC)을 통해 스토리지를 관리한다.
사용 사례
- 마이크로서비스 아키텍처 운영: 수많은 마이크로서비스를 독립적으로 배포하고 확장.
- CI/CD 파이프라인 통합: Jenkins, GitLab CI 등과 연동하여 자동 배포 구현.
- 하이브리드 및 멀티클라우드 환경: 다양한 클라우드 환경에서 일관된 운영 가능.
- 빅데이터 및 머신러닝 워크로드: Spark, Kubeflow 등을 통해 데이터 처리 및 모델 학습 자동화.
관련 도구 및 생태계
- Helm: 쿠버네티스 애플리케이션을 패키징하고 배포하기 위한 패키지 관리자.
- Prometheus + Grafana: 모니터링 및 메트릭 수집.
- Istio: 서비스 메시(Service Mesh)를 제공하여 마이크로서비스 간 통신을 제어.
- Kustomize: YAML 기반 구성 파일을 환경별로 커스터마이징.
참고 자료
쿠버네티스는 현대 소프트웨어 개발과 운영의 핵심 인프라로, 지속적인 생태계 발전과 커뮤니티 지원을 통해 클라우드 네이티브 환경의 표준으로 자리매김하고 있다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.