쿠버네티스(Kubernetes)

Seoyeon·2025년 9월 9일

백엔드

목록 보기
1/27

쿠버네티스(Kubernetes) 가이드: 개념, 활용법 총정리

  • 쿠버네티스는 오늘날 클라우드 컴퓨팅 환경의 핵심 기술로 자리 잡은 컨테이너 오케스트레이션 플랫폼
  • 컨테이너화된 애플리케이션을 자동으로 배포, 확장 및 관리하는 데 사용되는 강력한 오픈소스 시스템

1. 쿠버네티스란?

  • 쿠버네티스는 그리스어로 '항해사' 또는 '조종사'를 의미하며, 이름처럼 수많은 컨테이너들을 마치 한 척의 배처럼 조율하고 관리하는 역할

  • 구글이 내부적으로 사용하던 보그(Borg) 시스템을 기반으로 개발하여 2014년에 오픈소스로 공개했으며, 현재는 클라우드 네이티브 컴퓨팅 재단(CNCF)에서 관리하고 있음

  • 컨테이너 기술(예: 도커) -> 애플리케이션을 환경에 구애받지 않고 실행할 수 있도록 격리된 패키지로 만드는 것

  • 쿠버네티스 -> 이러한 컨테이너들을 대규모 프로덕션 환경에서 안정적으로 운영할 수 있도록 관리하고 조율하는 시스템

핵심 특징 및 장점:

  • 자동화된 롤아웃과 롤백: 새로운 버전의 앱을 점진적으로 배포하거나 문제가 발생했을 때 이전 버전으로 신속하게 되돌릴 수 있음
  • 서비스 디스커버리와 로드 밸런싱: 여러 컨테이너에 걸쳐 네트워크 트래픽을 분산하고, 장애가 발생한 컨테이너는 자동으로 제외하여 서비스의 안정성을 높임
  • 자동화된 빈 패킹(Bin Packing): 각 컨테이너가 필요로 하는 CPU, 메모리 등의 리소스를 분석하여 클러스터 내의 가용 노드에 최적으로 배치
  • 자가 치유(Self-healing): 실행 중인 컨테이너가 응답하지 않으면 자동으로 재시작하거나 교체하여 애플리케이션의 가용성을 유지
  • 스토리지 오케스트레이션: 로컬 저장소, 클라우드 공급자의 스토리지 등 다양한 종류의 저장 시스템을 자동으로 마운트하고 관리할 수 있음
  • 선언적 구성: 원하는 상태를 YAML 파일에 정의하면, 쿠버네티스가 현재 상태를 모니터링하며 그 상태를 유지하기 위해 끊임없이 작동

2. 쿠버네티스 활용법

쿠버네티스는 주로 kubectl이라는 커맨드 라인 인터페이스(CLI)와 YAML형식의 설정 파일을 통해 관리

< 활용과정 >

  1. 애플리케이션 컨테이너화: 먼저 배포하려는 애플리케이션을 도커(Docker)와 같은 컨테이너 기술을 사용하여 이미지로 만듦
  2. 핵심 오브젝트(Object) 정의: YAML 파일을 사용하여 쿠버네티스가 애플리케이션을 어떻게 실행하고 관리해야 하는지 정의
    • 주요 오브젝트
      • 파드(Pod): 쿠버네티스에서 생성하고 관리할 수 있는 가장 작은 배포 단위
        하나 이상의 컨테이너 그룹으로 구성되며, 스토리지와 네트워크 리소스를 공유
      • 디플로이먼트(Deployment): 파드와 레플리카셋(ReplicaSet)에 대한 선언적 업데이트를 제공
        원하는 파드의 개수(Replicas)를 정의하면, 디플로이먼트 컨트롤러가 그 수를 유지하도록 관리합니다. 앱의 업데이트, 롤백, 확장 등을 담당
      • 서비스(Service): 여러 파드에 대한 안정적인 네트워크 엔드포인트(고정 IP 주소와 DNS 이름)를 제공
        이를 통해 외부에서 파드에 접근하거나 파드 간의 통신을 용이하게 함
  3. 클러스터에 적용: 작성된 YAML 파일을 kubectl apply -f <파일명.yaml> 명령어를 사용하여 쿠버네티스 클러스터에 적용하면, 쿠버네티스는 정의된 내용에 따라 컨테이너를 실행하고 관리하기 시작

간단한 Nginx 웹서버 배포 예시 (YAML)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3 # 3개의 Nginx 파드를 실행
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer # 외부에서 접근 가능하도록 로드 밸런서 타입으로 서비스 노출

3. 쿠버네티스 주요 사용 사례

  • 마이크로서비스 아키텍처(MSA): 복잡한 애플리케이션을 여러 개의 작은 독립적인 서비스로 나누어 개발하고 배포하는 MSA 환경에서 각 서비스를 컨테이너로 관리하는 데 최적화
  • 클라우드 네이티브 애플리케이션 개발: 대규모 웹 서비스, 글로벌 커머스 플랫폼, 금융 서비스 등 확장성과 안정성이 중요한 클라우드 기반 애플리케이션의 표준 배포 환경으로 자리 잡음
  • CI/CD 파이프라인 자동화: 젠킨스(Jenkins), 깃랩 CI(GitLab CI) 등과 연동하여 소프트웨어의 빌드, 테스트, 배포 과정을 자동화하는 데 핵심적인 역할
  • 빅데이터 처리 및 머신러닝: 대규모 데이터 처리 워크로드나 머신러닝 모델 학습 파이프라인을 컨테이너화하여 효율적으로 실행하고 관리하는 데 사용 (예: Kubeflow)

4. 쿠버네티스의 없는 점과 한계

  • 애플리케이션 레벨 모니터링: 기본적으로 파드와 노드 상태만 감시하며, 애플리케이션 내부 성능 모니터링은 Prometheus, Grafana 등 외부 도구 필요
  • 로깅 및 트레이싱: 로그 수집/분석/시각화 기능은 ELK Stack, Loki 등 별도 시스템 연동 필요
  • 데이터베이스 관리: 스테이트풀 워크로드(DBMS 등)는 쿠버네티스로 배포 가능하지만 운영·튜닝·백업은 별도 도구 필요
  • 보안 관리: 인증/인가, 비밀 관리 등은 Vault, Istio 같은 보조 툴 의존
  • 네트워킹 세부 제어: 기본 네트워킹은 제공하지만, 고급 트래픽 제어나 서비스 메시 기능은 Istio 등 필요
  • 복잡한 학습 곡선: 개념이 방대하고 YAML 설정이 복잡해 초기 진입장벽이 높음
  • 비용 관리 기능 부재: 자원 최적화는 가능하지만 클라우드 비용 관리는 자체적으로 제공하지 않음

5. 비슷한 서비스와 비교

구분쿠버네티스 (Kubernetes)도커 스웜 (Docker Swarm)아마존 ECS (Amazon ECS)해시코프 노마드 (HashiCorp Nomad)
한 줄 요약기능의 끝판왕, 컨테이너 세상의 표준가장 빠르고 심플한 기본 관리 도구AWS 사용자에게 가장 편한 관리형 서비스컨테이너 외 모든 것을 관리하는 만능 스케줄러
비유풀옵션 대도시조립식 주택 단지아마존이 지은 신도시만능 캠핑카
특징기능이 매우 많고 자유도가 높아, 컨테이너 관리의 사실상 표준으로 쓰임.도커에 내장되어 있어, 도커만 쓸 줄 알면 가장 쉽게 시작할 수 있음.AWS에서 모든 것을 관리해주는 서비스. AWS 환경에 최적화되어 있음.컨테이너뿐 아니라 다양한 종류의 프로그램을 함께 관리할 수 있음.
장점 - 압도적인 생태계 (필요한 기능은 다 있음)
- 원하는 대로 모든 설정 가능
- 어떤 클라우드든 설치 가능
- 배우기 매우 쉬움
- 원래 쓰던 docker 명령어와 거의 똑같음
- 설치가 매우 간단함
- 다른 AWS 서비스와 연동이 완벽함
- 서버 관리가 필요 없는 서버리스(Fargate) 가능
- AWS가 알아서 관리해줘서 편함
- 설치가 매우 쉬움 (파일 하나로 끝)
- 컨테이너 외 다른 프로그램도 관리 가능
- 대규모 환경에서도 가볍고 빠름
단점 - 처음 배울 때 너무 복잡하고 어려움
- 직접 운영하려면 관리 포인트가 많음
- 기능이 너무 단순함
- 더 복잡한 기능을 추가하기 어려움
- 정보나 자료가 상대적으로 적음
- 오직 AWS에서만 사용 가능
- 다른 클라우드와 함께 쓰기 어려움
- 쿠버네티스만큼 기능이 다양하지 않음
- 네트워킹, 스토리지 등은 직접 설정할 부분이 많음
추천 대상복잡한 대규모 서비스를 운영하거나, 여러 클라우드를 함께 사용해야 하는 기업소규모 프로젝트나 개발 환경에서 빠르게 컨테이너를 묶어서 관리하고 싶을 때인프라가 대부분 AWS에 있고, 안정적인 관리형 서비스를 쓰고 싶을 때컨테이너와 다른 프로그램을 하나로 통합 관리하고 싶거나, 단순/빠른 것을 선호할 때

참고
https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/
https://jdcyber.tistory.com/46
https://databoom.tistory.com/entry/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4Kubernetes-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95
https://brunch.co.kr/@sokoban/81
https://csj000714.tistory.com/739

0개의 댓글