데이터 엔지니어링/K8s

[K8s] Kubernetes (K8s)

pythaac 2022. 5. 13. 18:26

https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/

 

쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하

kubernetes.io

 

정의

  • 컨테이너화된 워크로드와 서비스를 관리하기 위한
  • 이식성 있는 / 확장 가능한 오픈소스 플랫폼
  • 이름 유래
    • 키잡이(helmsman), 파일럿을 뜻하는 그리스어에서 유래
    • K8s의 8은 K와 s 사이에 있는 "ubernete" 8글자를 의미

 

쿠버네티스가 필요한 이유

  • 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너가 필요
    - ex) 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야함
  • 이를 시스템에 의해 처리하면 더 쉬울 것
  • 쿠버네티스가 필요한 이유
    • 분산 시스템을 탄력적으로 실행하기위한 프레임워크 제공
    • 애플리케이션의 확장/장애조치 처리
    • 배포 패턴 제공(시스템의 카나리아 배포를 쉽게 관리)

 

쿠버네티스가 제공하는 것

  • 서비스 디스커버리 / 로드밸런싱
    • DNS 이름 / 자체 IP 주소로 컨테이너를 노출할 수 있음
    • 컨테이너에 트래픽이 많으면 로드밸런싱+배포
  • 스토리지 오케스트레이션
    • 로컬 저장소 / 공용 클라우드 공급자 등 원하는 저장소 시스템을 자동으로 탑재
  • 자동화된 롤아웃/롤백
    • 배포된 컨테이너의 원하는 상태를 서술 가능
    • 현재 상태를 원하는 상태로 설정한 속도에 따라 변경
      - ex) 쿠버네티스를 자동화하여 (배포용 새 컨테이너 생성 -> 기존 컨테이너 제거 -> 리소스를 새 컨테이너에 적용) 이 가능
  • 자동화된 빈 패킹(bin packing)
    • 쿠버네티스 클러스터 노드 제공
      - 컨테이너화된 작업을 실행하는데 사용
    • 각 컨테이너가 필요한 CPU/메모리를 쿠버네티스에게 알리면
    • 컨테이너를 노드에 맞추어(?) 최적화된 리소스 사용하도록 함
  • 자동화된 복구(self-healing)
    • 실패한 컨테이너를 다시 시작
    • 컨테이너 교체
    • '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽임
  • 시크릿과 구성 관리
    • 암호 / OAuth 토큰 / SSH 키 등 중요한 정보 저장/관리

 

쿠버네티스 컴포넌트

  • 쿠버네티스 Cluster
    • 쿠버네티스를 배포하면 Cluster를 얻음
    • 쿠버네티스 Cluster는 Worker Machine의 집합
      - Worker Machine : 컨테이너화된 애플리케이션을 실행하는 노드(Worker Node)
    • 모든 Cluster는 최소 1개의 Worker Node를 가짐
  • Worker Node
    • 애플리케이션의 구성요소인 Pod를 호스트
      - Pod : Cluster에서 실행 중인 컨테이너의 집합
  • Control Plane
    • 컨테이너의 라이프사이클을 정의/배포/관리하기 위한 API와 인터피에스들을 노출하는 컨테이너 오케스트레이션 레이어
    • Worker Node와 Cluster내의 Pod 관리
    • 일반적으로 Control Plane이 여러 컴퓨터에 걸쳐 실행
  • Cluster는 일반적으로 여러 Node를 실행하므로 내결함성/고가용성 제공