쿠버네티스 아키텍처 (컨테이너_Container, 파드_Pod, 노드_Node 구분하기)

데이터 엔지니어링은 분산 환경에서 이루어진다. 분산 시스템은 컨테이너 기반으로 이루어진다. 컨테이너 관리의 표준 쿠버네티스에 대해 알아보자!!

공부할 게 너무 많지만..

출처: 피식대학 Youtube

바쁜 분들을 위한 다섯 줄 요약

  • 컨테이너: 실행에 필요한 모든 파일을 포함하여 전체 런타임 환경에서 애플리케이션을 패키지화하고 분리하는 기술
  • 파드: 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위(컨테이너의 묶음)
  • 노드: 컴퓨팅 하드웨어의 가장 작은 기본 단위. VM(가상 머신) 혹은 PM(물리 머신). 하나의 노드는 여러 개의 파드를 가질 수 있고, 쿠버네티스 컨트롤 플레인은 클러스터 내 노드를 통해서 파드에 대한 스케줄링을 자동으로 처리한다.
  • 쿠버네티스 아키텍처의 자원 분류: 오브젝트(파드, 서비스, 볼륨, 네임스페이스)와 컨트롤러(레플리카셋, 디플로이먼트, 데몬셋, 잡)…
  • 파드 구성 패턴: 사이드카 패턴, 앰버서더 패턴, 어댑터 패턴

쿠버네티스 아키텍처

마스터와 노드

출처: https://www.decodingdevops.com/what-is-kubernetes-and-components-of-kubernetes/

쿠버네티스 클러스터는 마스터와 노드로 구분되며, 각각은 클러스터로 구성되어 있고 다양한 종류의 컴포넌트들을 포함한다.

  • 마스터: 클러스터 전체를 관리
    → 이중화를 통한 (active, standby) 가용성 보장이 중요
    etcd: 쿠버네티스 클러스터에 대한 metadata 저장소
    kube-apiserver: 쿠버네티스에 보내는 모든 요청은 apiserver 을 이용해서 다른 컴포넌트로 전달되며, 유효한 요청인지 검증한다.
    kube-scheduler: 자원 할당이 가능한 노드를 선택해서 해당 노드에 새로운 파드를 실행
    kube-controller-scheduler: 파드를 관리하는 컨트롤러 각각을 실행
    cloud-controller-manager: 클라우드 서비스와 연결해 관리
  • 노드(minion): 실제 컨테이너를 실행, 쿠버네티스 실행 환경을 관리
    kubelet: 파드 컨테이너들의 실행을 직접 관리, kube-apiserver 와 통신
    kubeproxy: 클러스터 안에 별도의 가상 네트워크 동작을 관리
    컨테이너 런타임: 실제로 컨테이너를 실행시키는 컴포넌트(ex. 도커)
  • 애드온: 클러스터 안에서 필요한 기능을 실행하는 파드
    → 네트워킹 애드온, DNS 애드온, 대시보드 애드온, 컨테이너 자원 모니터링, 클러스터 로깅

쿠버네티스 자원: 오브젝트와 컨트롤러

  • 사용자: yaml 템플릿으로 쿠버네티스 자원의 바라는 상태를 정의
    yaml 파일로 명령형 오브젝트 구성 방법(kind: 컨트롤러도 지정 가능)
    공식문서: 쿠버네티스 오브젝트로 작업하기
  • 컨트롤러: 바라는 상태와 현재 상태(status 가 spec)가 일치하도록 오브젝트들을 생성/삭제
  • 오브젝트: 쿠버네티스 시스템에서 영속성을 가지는 오브젝트이다. 오브젝트를 생성하게 되면 쿠버네티스 시스템은 원하는 상태를 보장하기 위해 지속적으로 작동
  • 네임스페이스: 쿠버네티스 클러스터 하나를 여러 개의 논리적 단위로 나눠서 사용하는 것

컨테이너

  • 실행에 필요한 모든 파일을 포함하여 전체 런타임 환경에서 애플리케이션을 패키지화하고 분리하는 기술. 이를 통해 전체 기능을 유지하면서 컨테이너화된 애플리케이션을 환경 간에 쉽게 이동할 수 있다.
  • 더 알아보기: 컨테이너의 역사

파드

쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위(컨테이너의 묶음)

출처: https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/explore/explore-intro/

파드 생명주기

출처: https://subscription.packtpub.com/book/virtualization_and_cloud/9781788834759/5/ch05lvl1sec46/pod-lifecycle
출처: https://livebook.manning.com/book/kubernetes-in-action-second-edition/chapter-6/v-4/

kubelet: 파드에서 컨테이너가 원하는 상태를 유지하도록 해줌

  • kubelet이 파드에서 컨테이너가 확실하게 동작하도록 관리
  • kubelet은 livenessProbe, readlinessProbe를 통해 지속적으로 컨테이너 헬스 체크

특별한 컨테이너

  • 초기화 컨테이너: 초기화 컨테이너는 앱 컨테이너가 실행되기 전 파드를 초기화하는 역할
  • 파드 인프라 컨테이너: 모든 파드에서 항상 실행되는 pause 컨테이너

Static Pod

kube-apiserver를 통하지 않고 kubelet이 직접 실행하는 파드. 시스템 파드(kube-apiserver, etcd)를 실행하는 용도로 많이 사용됨.

Pod 에 자원 할당, 환경 변수

  • 자원할당: CPU, Memory
    - 최소값: requests 로 정의
    - 최대값: limits 로 정의
    → CPU 는 최대 0.5(코어 하나의 연산 능력을 기준으로 하는 것), 메모리는 최대 1GB까지 사용할 수 있도록 함
    → 이를 통해 파드를 노드에 할당(스케줄링)

Pod 구성 패턴

  1. 사이드카 패턴 (ex. gitsync)
    기본 컨테이너는 원래 목적의 기능에만 충실하도록 구성하고, 나머지 공통 부가 기능들은 사이드카 컨테이너를 추가해서 사용. 원래 사용하려던 기본 컨테이너의 기능을 확장하거나 강화하는 용도의 컨테이너를 추가하는 것. 공통 역할을 하는 컨테이너의 재사용성을 높일 수 있다.
  2. 앰배서더 패턴 (ex. nginx 컨테이너)
    파드 안에서 프록시 역할을 하는 컨테이너를 추가하는 패턴. 트래픽을 세밀하게 제어할 수 있다. 서비스 메시(service mesh 용) 오픈소스인 istio가 있다.
  3. 어댑터 패턴 (ex. 프로메테우스)
    파드 외부로 노출되는 정보를 표준화하는 어댑터 컨테이너를 사용하는 패턴

노드

컴퓨팅 하드웨어의 가장 작은 기본 단위. VM(가상 머신) 혹은 PM(물리 머신). 하나의 노드는 여러 개의 파드를 가질 수 있고, 쿠버네티스 컨트롤 플레인은 클러스터 내 노드를 통해서 파드에 대한 스케줄링을 자동으로 처리한다.

출처: https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/explore/explore-intro/

맺는 말

노동요로 추천: 한사랑산악회의 Peaches

https://www.buymeacoffee.com/soniacomp

--

--

--

Data Engineer interested in constructing Data-Driven Architecture with Cloud Service

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
SoniaComp

SoniaComp

Data Engineer interested in constructing Data-Driven Architecture with Cloud Service

More from Medium

Kubernetes for kdb+ Container Orchestration

Kubernetes and its Use-Cases

Does Kubernetes deliver on its promise of portability?

OPA Gatekeeper Library example allow image pull policy