article thumbnail image
Published 2024. 4. 12. 21:33

개요

  • 컨테이너와 오케스트레이션을 이해해야합니다.

Container

기존 환경에선 호환성 메트릭스가 생겨 새로운 환경 구측이 매우 어렵습니다.

  • 개발, 테스트, 제작 환경도 전부 달랐습니다.

호환성 문제를 해결할 수 있는 무언가가 필요했습니다.

 

 

컨테이너는 자신만의 프로세스나 서비스, 네트워크, 인터페이스 마운트를 가상 머신과 동일하게 가질 수 있으며, 동시에 커널이라는 운영체제를 공유합니다.

운영체제는 두 가지로 구성(OS 커널과 소프트웨어 세트)

  • 커널은 하드웨어와 상호작용
  • 소프트웨어가 운영 체제를 다르게 만듭니다.(드라이버, 컴파일러, 파일관리자, 개발자 도구 등등..)

운영체제 구조 안에서 커널을 공유합니다. 만약 다른 커널(윈도우)을 공유할 필요가 생기게 된다면 윈도우 서버의 Docker를 사용해야합니다.

따라서 OS의 핵심 기능을 실행하지 못하며, 다른 운영체제와 커널을 같은 하드웨어단에서 가상화하거나실행하지 않는 것은 불가능합니다.

 

컨테이너 오케스트레이션

사용자 수가 증가해서 애플리케이션 확장이 필요하거나 감소할 때 규모를 줄이는 방법으로, 플랫폼은 컨테이너간 연결을 조정하여 로드에 따라 자동으로 스케일업, 다운을 해야합니다.

  • Docker Swarm
  • MESOS
  • Kubernetes

다양한 오케스트레이션 툴들이 있으며, 현재 모든 공용 클라우드 서비스 공급자에서 지원됩니다.

서비스 레벨에서 하드웨어 리소스가 동이 났을 때 기본 노드 수를 늘리거나 줄일 수 있습니다.

 

Kubernetes 기본 개념

Node

  • 쿠버네티스가 설치된 물리적, 가상의 머신으로 노드는 작업자 머신으로써 쿠버네티스가 컨테이너를 운영하는 곳입니다.
  • 과거에는 minions라고 불렸습니다.
  • 따라서 실행 중인 노드가 Fail 상태로 넘어가면 서버가 다운되므로, 노드가 하나 이상이어야합니다.

Clusster

  • 클러스터는 노드의 묶음으로 한 노드가 실패해도 다른 노드를 통해 애플리케이션에 접근할 수 있습니다.
  • 다중 노드는 로드 밸런서로 활용하기도 용이합니다.

Master

  • 클러스터 관리, 클러스터 데이터 저장, 노드 모니터링, 노드 fail시 해당 fail 노드의 작업을 다른 작업자 노드에게 전달시키기 위해 필요합니다.
  • 마스터는 쿠버네티스가 설치된 노드 중 하나로, 워커 노드에서 컨테이너의 실제 오케스트레이션 관리를 책임집니다.

Components

  • 쿠버네티스를 설치할 때 다양한 구성 요소를 설치하게 됩니다.(API Server, kubelet, kube, 런타임 컨트롤러, 스케쥴러..)
  • API Server는 쿠버네티스의 프론트엔드와 같이 사용자, CLI 모두 API Server와 통신해 클러스터와 상호작용합니다.
  • etcd(key store)는 Key-Value 저장소로 쿠버네티스가 클러스터 관리에 사용되는 모든 데이터를 저장하는데 사용합니다.
    • 클러스터에 노드가 여럿이고 마스터도 여럿일 경우 분산된 방식으로 클러스터 내부의 모든 노드에 관한 정보를 저장합니다.
  • Scheduler는 다중 노드에 걸쳐 작업이나 컨테이너를 배포하는 역할을 합니다. → 새로 생성된 노드를 찾아 컨테이너에 할당합니다.
  • Controller → Node, Container, Endpoint가 다운될 때 이를 인지하고 대응합니다. 이를 통해 새로운 컨테이너를 실행할지 결정하는 역할을 담당합니다.
  • container runtime은 컨테이너를 실행하는데 사용되는 기본 소프트웨어입니다. → Docker
  • Kubelet은 클러스터 내 각 노드에서 실행되는 에이전트입니다.
    • 에이전트는 예상대로 컨테이너가 노드에서 실행되는지 확인하게 됩니다.

 

Master vs. Worker Nodes

  • Worker 노드는 컨테이너 런타임과 Kubelet agent를 가지고 있습니다.
    • agent로 수집된 노드의 health state를 마스터에게 제공하며, 마스터가 요청한 작업을 수행합니다.
  • 마스터 노드는 kube-apiserver를 가집니다.
    • 수집된 모든 정보는 마스터의 key-value저장소(etcd)에 존재합니다.
    • Controller, Scheduler 또한 존재합니다.

 

Kubectl

  • 쿠버네티스 클러스터 상의 응용 프로그램을 배포하고 관리하는데 사용됩니다.
  • 클러스터 정보를 얻고 클러스터 내의 다른 노드의 상태를 얻으며, 이를 통해 다른 많은 것들을 관리하기 위해 사용됩니다.
  • kubectl run 명령은 클러스터에 응용 프로그램을 배포하는데 사용됩니다.
  • kubectl cluster-info 명령은 클러스터 정보를 보는데 사용 됩니다.
  • kubectl get 노드 명령은 모든 노드를 열거하는데 사용합니다.

'TIL > 개념정리' 카테고리의 다른 글

Pods란  (0) 2024.04.12
Docker 배포 최적화  (1) 2024.04.10
Docker 배포  (0) 2024.04.03
PyTorch 튜토리얼  (0) 2024.04.01
Docker Compose  (0) 2024.03.21
복사했습니다!