[K8s]1. 쿠버네티스 알아보기

[K8s]1. 쿠버네티스 알아보기


이 글은 쿠버네티스 인 액션 이라는 책과 검색을 통해서 공부한 것을 정리합니다.

쿠버네티스

  • 컨테이너 시스템상에서 컨테이너 애플리케이션을 쉽게 배포하고 관리할 수 있게 해주는 소프트웨어 시스템
  • 마치 모든 노드가 하나의 컴퓨터인 것처럼 모든 컴퓨터 노드에서 소프트웨어 애플리케이션을 실행할 수 있다.
  • 즉 개발, 배포, 관리를 단순화함.

쿠버네티스 구조와 기능

  • 마스터와 워커노드로 구성
  • 프로세스
    • 개발자 -> 매니패스트 쿠버네티스 마스터에게 제출 -> 쿠버네티스는 워커 노드 클러스터에 배포
  • 기능
    • 서비스 검색, 확장, 로드 밸런싱, 회복, 리더 선출 등의 기능을 제공

### 마스터

  • 전체 쿠버네티스 시스템을 관리하고 통제하는 쿠버네티스 컨트롤 플레인을 담당한다.
  • 워커노드는 실제 배포하고자 하는 애플리케이션의 실행을 담당한다.

쿠버네티스 구성요소

마스터(컨트롤 플레인)

  • 클러스터를 관리하고 클러스터의 기능을 실행함.
    • API 서버: 사용자, 컨트롤 플레인과 통신
    • 스케줄러: 애플리케이션을 예약하는 스케줄러(배포가 가능한 요소에 워커노드를 할당)
    • 컨트롤 매니저: 구성 요소 복제, 워커 노드 추적, 노드 장애 처리 등
    • 결국 상태 유지 및 제어의 역할만 수행한다.

워커(노드)

  • 실제로 애플리케이션을 실행, 모니터닐, 제공
  • 컨테이너 런타임: ex) 도커
  • Kubelet: API 서버와 통신하고 노드에서 컨테이너를 관리
  • kube-proxy: 애플리케이션 구성 요소간에 네트워크 트래픽을 분산

디스크립션

  • 컨테이너 이미지 또는 애플리케이션 컴포넌트를 포함한 이미지, 컴포넌트 간 관련성 및 노드 배치 정보들
  • 컨테이너 이미지를 패키지로 -> 이미지 저장소에 푸시 -> 쿠버네티스 API 서버에 애플리케이션의 디스크립션을 게시
  • 스케줄는 API 서버가 애플리케이션의 디스크립션을 처리할 때, 각 그룹에서 필요한 연산 리소스와 각 노드의 할당되지 않은 리소스를 기반으로 사용가능한 워커 노드로 컨테이너의 지정 그룹을 예약. 이 후 해당 노드의 Kubelet은 필요한 컨테이너 이미지를 가져와서 컨테이너를 실행하도록 컨테이너 런타임 ex)도커에 지시함.

  • 앱 디스크립터 속의 묶음은 하나의 pod로 보고, 옆의 숫자는 병렬로 실행하는 수라고 본다.
  • 즉 쿠버네티스(마스터)에 디스크립터를 요청 -> 스케줄러가 API서버를 통해서 사용 가능한 워커노드를 확인하고, pod의 복제본을 예약 -> 노드의 kubelet이 이미지 저장소에서 컨테이터 이미지(도커)를 가져와서 컨테이너를 실행하도록 도커에 지시함.
  • 쿠버네티스는 주기적으로 사용자가 설정(제공한 디스크립션)한 값을 확인한다. 예를 들어서 pod의 수를 체크해서 계속 수만큼 띄우려고 함.
  • 기타 여러 지원하는 기능이 많음. 예를 들어서 특정 메트릭 지표의 부하상황을 파악하고 설정해두면 인스턴스의 수를 스스로 조정하도록 지시가 가능함.
  • 배포 버전의 문제를 감지하고 즉시 롤아웃을 중지하는 기능도 제공한다.