Post

도커와 쿠버네티스 7: 쿠버네티스의 기본 구조

구버네티스의 개념

구버네티스의 어원과 역사

  • 쿠버네티스: 컨테이너화된 애플리케이션의 자동 배포, 확장 및 관리를 해주는 오픈소스 플랫폼
    • Kubernetes: 고대 그리스러로, 배의 조타수를 의미한다
  • 구글에서 시작한 사내 프로젝트로 2014년에 발표되었다
    • 초기 디자인 대부분은 구글의 Borg 클러스터 매니저의 영향을 많이 받았는데 Borg는 구글 나애에서 사용하는 시스템으로 수천 개의 서버에서 수백만개의 작업을 실행하고 관리하는 시스템이다
    • 2015년: 쿠버네티스 1.0 버전이 발표되었다
    • 2016: 쿠버네티스 패키지 관리 프로그램인 Helm이 발표되었다 (9장에서 자세히 다룬다고 함)

      쿠버네티스의 구조

      쿠버네티스 클러스터

  • 쿠버네티스는 다수의 노드로 구성되는 경우가 많다
    • 크게, 마스터 노드와 워커 노드로 구분됨 → 개발자는 주로 마스터 노드와 사용자는 인터넷을 통해 워커 노드와 통신하는 경우 많다
  • Container Network Interfaces: 쿠버네티스 클러스터에 존재하는 컨테이너 간의 통신을 위해 필요한 인터페이스임
    • 이를 사용하려면 쿠버네티스 네트워크 플러그인을 제공하는데, 대표적인 플러그인은 Flannel과 calico이다 → 교재가 calico를 사용한다

컨트롤 플레인

  • Control Plane: 크버네티스 클러스터 전반의 작업을 관리하는 역할을 한다

    API 서버

  • 쿠버네티스의 작업은 kubectl 명령어를 통해 마스터 노드의 kube-apiserver에게 API 요청을 보냄으로써 이루어진다
  • 쿠버네티스 컨트롤 플레인에서의 프런트엔드 역할을 한다

etcd

  • 쿠버네티스 클러스터에 존재하는 모든 데이터를 저장하는 key-value 저장소

스케줄러

  • 쿠버네티스에서는 이후 배울 파드(pod)라는 오프젝트를 통해 애플리케이션을 실행한다
    • 파드: 쿠버네티스 클러스터를 구성하는 노드 중 하나에 실행된다 → 새롭게 생성되는 파드를 어느 노드에 실행시킬지 정하는 역할을 kube-scheduler가 수행한다

컨트롤러 매니저

  • 쿠버네티스 리소스를 관리하고 제어하는 역할을 한다
  • 마스터 노드에서 실행되며 클러스터 상태를 모니터링한다
  • 컨트롤러에는 디플로이먼트 컨트롤러, 시비스 컨트롤러, 레플리카셋 컨트롤러 등의 여러 종료가 있다
  • 각 컨트롤러는 특정 리소스 타입을 관리한다

노드

Kubelet

  • 파드 내부의 컨테이너 실행을 담당한다
  • 파드의 상태를 모니토링하고, 파드의 상태에 이상이 있다면 해당 파드를 다시 배포한다

Kube-Proxy

  • 노드에서 네트워크 역할을 수행한다
  • 노드에 존재하는 파드들이 쿠버네티스 내부/외부와 네트워크 통신을 가능하게 한다

컨테이너 런타임

  • 컨테이너의 생명주기를 담당한다 → Kubelet은 컨테이너 런타임과 통신하는데, 이떄 사용하는 것이 컨테이너 런타임 인터페이스임
  • 쿠버네티스가 사용하는 컨테이너 런타임에는 containerd, CRI-O 등이 있다

파드

  • 컨테이너를 실행하기 위한 오프젝트인데, 각 파드는 한 대 혹은 여러 개의 컨테이너를 담을 수 있다
    • 파드는 컨테이너를 그룹화한 것이라고 생각하면 됨
  • 쿠버네티스에서 다수의 파드들은 여러 워커 노드에 분산되어 실행되는데, 하나의 파드에 속하는 컨테이너들은 모두 같은 노드에서 실행한다
    • 서로 다른 파드는 서로 다른 노드에서 실행될 수 있지만, 하나의 파드가 분할되어 여러 노드에 실행되는 일은 없다는 것이다 → 하나의 파드는 하나의 노드에서 실행된다 → 컨테이너

워크로드

  • 쿠버네티스에서 실행되는 애플리케이션
  • 워크로드가 하나의 컴포넌트 형태로 실행하든, 다수의 컴포넌트가 함께 실행하든 쿠버네티스는 파드 내부엣 워크로드를 실행하게 된다 → 파드는 실행 중인 컨테이너의 집합을 나타낸다

레플리카셋

  • 파드의 복제를 관리하며 클라이언트가 요구하는 복제본 개수만큼 파드를 복제하고 모니터링하고 관리한다

디플로이먼트

  • 애플리케이션의 배포와 스케일링을 관리하는 역할을 담당한다

스테이트풀셋

  • 파드 사이에서 순서와 고유성이 보장되어야 하는 경우에 사용한다

데몬셋

  • 쿠버네티스를 구성하는 모든 노드가 파드의 복사본을 실행하도록 한다
  • 쿠버네티스 클러스터에 새로운 노드가 추가되면 파드 역시 추가된다
  • 데몬셋은 주로 로깅, 모니터링, 스터리지 등과 같은 시스템 수준의 서비르를 실행하는 데 사용된다

잡과 크론잡

  • 작업이 정상적으로 완료되고 종료되는 것을 담당한다
  • 만약, 파드가 정상적으로 종료되지 않는다면 재실행시킨다
  • 잡: 작업이 한번 종료되는 것을 담당한다
  • 크론잡: 동일한 작업이 스케줄에 따라 여러 번 수행하는 것을 담당한다
    • 리눅스에서 아용하는 크론 탭과 비슷한 역할을 한다

네트워크

서비스

  • 이를 사용하면 파드를 여러 개 묶어서 클러스터 외부로 노출시킬 수 있다
  • 서비스를 사용하는 방법의 장점은 이미 실행 중인 파드를 외부로 노출시키기 위해 파드 내부를 수정할 필요가 없다는 것이다
  • 쿠버네티스 서비스를 활용하면 실행 중인 파드 수정 없이도 외부에 오출시켜 클라이언트와 통신할 수 있다

인그레스

  • 인그레스를 활용하면 쿠버네티스 내부에 존재하는 서비스를 HTTP/HTTPS 루트를 클러스터 외부로 라우팅하는 역할을 한다

스토리지

  • 컨테이너에 이런저런 문제가 생기거나 컨테이너가 삭제되거나 재실행되면 해당 컨테이너 내부에 존재하는 파일을 모두 삭제됨 → 컨테이너 내부에 존재하는 파일들은 수명이 짧다
  • 하지만, 쿠버네티스 스토리지를 활용하면 파드의 상태와 상관없이 파일을 보관할 수 있다다
This post is licensed under CC BY 4.0 by the author.

Trending Tags