본문 바로가기
Devops

[Kubernetes] 쿠버네티스 간단 개념 정리

by heekng 2022. 8. 29.
반응형

쿠버네티스 간단 개념 정리

많은 기업에서 쿠버네티스를 이용해 서비스를 운영하고 있습니다.
따라서 도커만 사용하는 것이 아닌 쿠버네티스를 사용하기 위해 학습한 내용을 정리하고자 합니다.

먼저 도커

도커, 컨테이너는 다음과 같은 이유로 사랑받고 있습니다.

  • 가상머신에 비해 컨테이너 생성이 쉽고, 효율적이다.
  • 컨테이너 이미지를 이용한 배포와 롤백이 간단하다.
  • 언어나 프레임워크에 상관 없이 애플리케이션을 동일한 방식으로 관리한다.
  • 등…

위처럼 다양한 이유로 도커를 많은 사람들이 사용했는데, 이 과정에서 동일한 앱을 여러 서버에 띄워 사용하는 경우, 관리하는 과정에서 불편함이 생겼습니다.

떄문에 문제를 해결하기 위해 컨테이너를 관리하기 위한 도우 Container Orchestration이 탄생했습니다.

Container Orchestration

Container Orchestration란 복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구입니다.

  • 클러스터에 있는 여러 개의 노드를 마스터 노드에서 관리
  • 여러 컨테이너간의 네트워크를 관리
  • 노드의 사이즈 관리
  • 상태 관리
  • 배포 관리
  • 배포 버전 관리
  • 서비스 등록 및 조회
  • 볼륨 스토리지 관리
  • 등…

위와 같이 정말 다양한 애플리케이션 컨테이너 관리가 가능합니다.

kubernetes

kubernetes는 위에서 설명한 Container Orchestration의 종류 중 하나로 컨테이너를 쉽고 빠르게 배포, 확장하고 관리를 자동화해주는 오픈소스 플랫폼입니다.

Desired State

쿠버네티스의 동작 방식은 단순하게 상태 체크, 차이점 발견, 조치 세가지로 설명할 수 있습니다.

상태를 체크한 후, 설정한 상태와 다른 점이 있다면? 설정한 상태와 동일하게 현재 상태를 조치합니다.

이러한 과정을 반복(Loop)하여 상태를 관리합니다.

kubernetes master

  • API Server
    • Scheduler, Contrller 등을 관리
    • 상태를 바꾸거나 조회
    • etcd와 유일하게 통신하는 모듈
    • REST API 형태로 제공
    • 권한을 체크하여 적절한 권한이 없을 경우 요청을 차단
    • 관리자 요청 뿐 아니라 다양한 내부 모듈과 통신
    • 수평으로 확장되도록 디자인
  • Scheduler
    • 스케쥴러는 서버의 상태를 확인하는 역할을 합니다.
      새로 생성된 Pod이 있는지 감지하고, 실행할 노드를 선택합니다.
      노드의 현재 상태와 Pod의 요구사항을 체크합니다.
  • Controller
    • 컨트롤러는 컨테이너의 상태를 체크하는 역할을 합니다.
    • 끊임없이 상태를 체크하고 원하는 상태를 유지하고
    • 복잡성을 낮추기 위해 하나의 프로세스로 실행됩니다.
    • 논리적으로 다양한 컨트롤러(복제, 노드, 엔드포인트 컨트롤러 등등..)이 존재합니다.
  • etcd
    • etcd는 상태를 저장, 조회하는 데이터베이스입니다.
    • 모든 상태와 데이터를 저장합니다.
    • 분산 시스템으로 구성해 안전성을 높입니다.(고가용성)
    • 가볍고 빠르면서 정확하게 설계되었습니다.(일관성)
    • key(directory) - value 형태로 데이터를 저장합니다.

Node

  • Proxy
    • 프록시는 네트워크 프록시와 부하 분산 역할을 합니다.
    • 성능상의 이유로 별도의 프록시 프로그램 대신 iptables 또는 IPVS를 사용합니다.
  • kubelet
    • 각 노드에서 실행되며
    • Pod을 실행, 중지하고 상태를 체크하는 역할을 합니다.

쿠버네티스 작동 흐름

  1. API Server에 Pod을 요청
    • API Server는 etcd에 Pod이 생성요청상태라는 것을 저장합니다.
  2. Controller은 API Server을 통해 새 Pod이 있는지 확인하고, Pod을 할당합니다.
    • API Server는 etcd에 Pod이 할당요청상태라는 것을 저장합니다.
  3. Scheduler는 API Server을 통해 새 Pod이 할당되었는지 확인하고, Pod 노드를 할당합니다.
    • API Server는 etcd에 Pod이 노드에 할당되었고, 미실행 상태라는 것을 저장합니다.
  4. Kubelet은 API Server을 통해 미실행된 Pod이 있는지 확인하고, Pod을 생성합니다.
    • API Server는 etcd에 Pod이 노드에 할당되었고, 실행 상태라는 것을 저장합니다.

위 과정을 쿠버네티스 마스터에서 계속 반복하며 상태를 관리하게 됩니다.

반응형