[Kubernetes] Kubernetes란?

kt·2025년 3월 23일

1. 개념

Kubernetes(약칭 K8s)는 컨테이너화된 애플리케이션의 자동 배포, 스케일링, 관리를 위한 오픈소스 플랫폼입니다. 구글이 내부에서 사용하던 Borg 시스템에서 영감을 받아 개발되었으며, 2014년에 오픈소스로 공개되었습니다.

기본 아키텍처

Kubernetes는 마스터-노드 아키텍처를 사용합니다:

마스터 컴포넌트

  • API 서버(kube-apiserver) : 모든 관리 작업의 프론트엔드로, REST API를 통해 클러스터와 상호작용합니다.
  • etcd : 클러스터의 모든 설정과 상태 정보를 저장하는 분산 키-값 저장소입니다.
  • 스케줄러(kube-scheduler) : 파드(Pod)를 어떤 노드에 배포할지 결정합니다.
  • 컨트롤러 매니저(kube-controller-manager) : 노드, 복제, 엔드포인트 등의 컨트롤러를 실행합니다.
  • 클라우드 컨트롤러 매니저(cloud-controller-manager) : 클라우드 제공업체와의 통합을 담당합니다.

노드 컴포넌트

  • Kubelet : 각 노드에서 실행되며, 파드와 컨테이너의 생명주기를 관리합니다.
  • Kube-proxy : 네트워크 프록시로, 클러스터 내 서비스의 네트워크 규칙을 관리합니다.
  • 컨테이너 런타임 : Docker, containerd 등 컨테이너를 실행하는 소프트웨어입니다.

핵심 개념

파드(Pod)

  • Kubernetes의 가장 기본적인 배포 단위로, 하나 이상의 컨테이너를 포함합니다.
  • 같은 파드 내의 컨테이너는 네트워크와 스토리지를 공유합니다.
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.19
    ports:
    - containerPort: 80

레플리카셋(ReplicaSet)

  • 지정된 수의 파드 복제본이 항상 실행되도록 보장합니다.
  • 파드가 실패하거나 삭제되면 자동으로 새 파드를 생성합니다.

디플로이먼트(Deployment)

  • 레플리카셋을 관리하고 업데이트하는 상위 수준의 추상화입니다.
  • 롤링 업데이트, 롤백, 스케일링 등의 기능을 제공합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19
        ports:
        - containerPort: 80

서비스(Service)

  • 파드 집합에 대한 네트워크 접근 방법을 정의합니다.
  • 안정적인 IP 주소, DNS 이름, 로드 밸런싱을 제공합니다.
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

인그레스(Ingress)

  • 클러스터 외부에서 내부 서비스로의 HTTP/HTTPS 라우팅 규칙을 정의합니다.
  • 호스트 기반 라우팅, TLS 종료 등의 기능을 제공합니다.

컨피그맵(ConfigMap)과 시크릿(Secret)

  • 컨피그맵: 애플리케이션 설정을 키-값 쌍으로 저장합니다.
  • 시크릿: 암호, 토큰, 키 등의 민감한 정보를 저장합니다.

네임스페이스(Namespace)

  • 클러스터 내에서 리소스를 논리적으로 분리하는 가상 클러스터입니다.
  • 다중 사용자 환경에서 리소스 격리를 제공합니다.

스테이트풀셋(StatefulSet)

  • 상태를 가진 애플리케이션을 위한 워크로드 API입니다.
  • 안정적인 네트워크 식별자와 영구 스토리지를 제공합니다.

2. 언제부터 트렌드가 되었는지(연혁)

Kubernetes의 주요 발전 단계와 트렌드 형성 과정은 다음과 같습니다:

초기 개발 및 공개

  • 2014년 6월 : Google이 Kubernetes를 오픈소스로 공개
  • 2015년 7월 : Kubernetes 1.0 버전 출시 및 Cloud Native Computing Foundation(CNCF)에 기부

생태계 확장 및 산업 채택

  • 2016년 : 주요 클라우드 제공업체들이 관리형 Kubernetes 서비스 출시 시작
    • Google Kubernetes Engine(GKE)
    • Amazon Elastic Kubernetes Service(EKS)
    • Microsoft Azure Kubernetes Service(AKS)
  • 2017년 : 클라우드 네이티브 애플리케이션 개발의 표준 플랫폼으로 자리매김
  • 2017년 말 : Docker Inc.가 Kubernetes를 공식 지원하면서 컨테이너 오케스트레이션 시장의 사실상 승자가 됨

기업 채택과 성숙

  • 2018-2019년 : 엔터프라이즈 환경에서의 Kubernetes 채택 급증
  • 2019년 : 가트너 보고서에 따르면 컨테이너 오케스트레이션 시장의 78%가 Kubernetes 사용
  • 2020년 이후 : 클라우드 네이티브 인프라의 필수 구성 요소로 확립

현재 상태

  • Kubernetes는 컨테이너 오케스트레이션의 표준으로 자리 잡았으며, 대부분의 클라우드 네이티브 애플리케이션 개발에 사용됩니다.
  • CNCF 졸업 프로젝트로서 성숙도와 안정성을 인정받았습니다(2018년 3월).
  • DevOps와 SRE(Site Reliability Engineering) 관행의 핵심 도구가 되었습니다.

3. 장단점

장점

장점설명
자동 스케일링트래픽이나 리소스 사용량에 따라 자동으로 애플리케이션을 스케일링할 수 있습니다.
자동 복구장애가 발생한 컨테이너를 자동으로 재시작하거나 교체합니다.
서비스 디스커버리내장된 DNS와 로드 밸런싱을 통해 서비스 디스커버리를 제공합니다.
롤링 업데이트다운타임 없이 애플리케이션을 업데이트할 수 있습니다.
선언적 설정인프라를 코드로 정의하고 관리할 수 있습니다.
다양한 배포 전략블루-그린, 카나리 등 다양한 배포 전략을 지원합니다.
클라우드 제공업체 독립성멀티클라우드 및 하이브리드 클라우드 환경에서 일관된 플랫폼을 제공합니다.
활발한 생태계풍부한 도구, 서비스 및 커뮤니티 지원을 제공합니다.
확장성수천 개의 노드와 수만 개의 파드를 관리할 수 있습니다.

단점

단점설명
복잡성초기 학습 곡선이 가파르고, 설정과 관리가 복잡할 수 있습니다.
리소스 오버헤드작은 규모의 애플리케이션에는 과도한 리소스가 필요할 수 있습니다.
스테이트풀 애플리케이션 관리상태를 가진 애플리케이션(데이터베이스 등)의 관리가 상대적으로 복잡합니다.
네트워킹 복잡성클러스터 네트워킹은 이해하고 디버깅하기 어려울 수 있습니다.
보안 구성보안 설정이 복잡하고 기본 설정이 충분히 안전하지 않을 수 있습니다.
운영 비용관리형 서비스를 사용하지 않는 경우 운영 및 유지보수 비용이 높을 수 있습니다.
모니터링과 로깅효과적인 모니터링과 로깅 설정이 추가 작업을 필요로 합니다.
업그레이드 복잡성클러스터 업그레이드가 복잡하고 위험할 수 있습니다.

4. 어떤 상황에서 주로 쓰이는지 활용 사례

Kubernetes는 다양한 상황에서 활용되며, 특히 다음과 같은 사례에서 그 강점을 발휘합니다:

마이크로서비스 아키텍처

# 마이크로서비스 예시: 사용자 서비스
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
    spec:
      containers:
      - name: user-service
        image: mycompany/user-service:v1.2
        ports:
        - containerPort: 8080
  • 여러 작은 서비스로 구성된 애플리케이션의 관리를 단순화합니다.
  • 서비스 간의 통신을 관리하고 서비스 디스커버리를 제공합니다.
  • 각 서비스를 독립적으로 스케일링하고 업데이트할 수 있습니다.

클라우드 네이티브 애플리케이션

  • 컨테이너화된 애플리케이션의 개발과 배포를 가속화합니다.
  • CI/CD 파이프라인과 통합하여 지속적인 배포를 지원합니다.
  • 확장성과 가용성이 높은 애플리케이션을 구축할 수 있습니다.

하이브리드 및 멀티클라우드 환경

  • 여러 클라우드 제공업체와 온프레미스 환경에서 일관된 플랫폼을 제공합니다.
  • 클라우드 제공업체 간의 이식성을 향상시킵니다.
  • 벤더 락인을 방지하고 리스크를 분산시킵니다.

대규모 웹 애플리케이션

  • 트래픽 급증에 대응하기 위한 자동 스케일링을 제공합니다.
  • 글로벌 배포와 로드 밸런싱을 지원합니다.
  • 고가용성과 장애 복구 기능을 제공합니다.

DevOps 및 SRE 관행

  • 인프라를 코드로 관리하는 GitOps 방식을 지원합니다.
  • 자동화된 테스트와 배포를 통합합니다.
  • 선언적 구성으로 인프라 관리를 간소화합니다.

엣지 컴퓨팅

  • 분산된 환경에서 일관된 애플리케이션 관리를 제공합니다.
  • 네트워크 지연을 줄이기 위해 사용자에게 더 가까운 곳에서 서비스를 제공합니다.
  • 제한된 리소스를 효율적으로 사용합니다.

기계 학습 워크로드

  • GPU 리소스를 효율적으로 관리하고 할당합니다.
  • 모델 훈련과 추론 워크로드를 분산시킵니다.
  • Kubeflow와 같은 도구를 통해 ML 워크플로를 오케스트레이션합니다.

실제 활용 사례 예시

  1. Spotify : 마이크로서비스 아키텍처를 Kubernetes로 마이그레이션하여 개발 속도와 확장성을 향상시켰습니다.

  2. Pinterest : 매일 수백만 명의 사용자에게 서비스를 제공하는 데 Kubernetes를 사용하며, 컴퓨팅 리소스 활용을 최적화했습니다.

  3. Shopify : 블랙 프라이데이와 같은 트래픽 급증 시 자동 스케일링을 위해 Kubernetes를 사용합니다.

  4. Capital One : 금융 서비스 애플리케이션을 위한 안전하고 확장 가능한 플랫폼으로 Kubernetes를 채택했습니다.

  5. Pokémon GO : 예상보다 훨씬 많은 사용자에게 서비스를 제공하기 위해 Kubernetes를 사용하여 급속하게 확장했습니다.

  6. Box : 파일 공유 및 저장 서비스를 위해 Kubernetes를 사용하여 멀티클라우드 전략을 구현했습니다.

  7. The New York Times : 기사 게시 시스템을 현대화하고 확장하기 위해 Kubernetes를 사용했습니다.

결론

Kubernetes는 컨테이너화된 애플리케이션의 배포, 스케일링, 관리를 위한 강력한 플랫폼입니다. 복잡성이라는 단점에도 불구하고, 확장성, 안정성, 이식성이라는 강점 때문에 클라우드 네이티브 애플리케이션 개발의 표준으로 자리 잡았습니다.

기업이 디지털 트랜스포메이션을 추진하고 모놀리식 애플리케이션을 마이크로서비스로 분해함에 따라 Kubernetes의 중요성은 계속 증가할 것으로 예상됩니다. 클라우드 네이티브 도구와 서비스의 생태계가 계속 성장하면서 Kubernetes는 현대적인 인프라 관리의 필수적인 부분으로 남을 것입니다.

참고 자료

profile
기록하는 블로그

0개의 댓글