유데미/ckad

Recap - Kubernetes Architecture

study_recode 2025. 1. 29. 00:34

노드 (Node)

  • 노드란?
    • 물리적 또는 가상 머신으로, 쿠버네티스가 설치된 워커 머신입니다.
    • 컨테이너는 노드에서 실행됩니다.
    • 과거에는 "미니언(minion)"이라고 불렸으며, 두 용어가 혼용될 수 있습니다.
  • 노드 장애 시 문제점
    • 특정 노드에서 애플리케이션이 실행 중일 때 해당 노드가 실패하면 애플리케이션이 중단됩니다.
    • 이를 방지하기 위해 여러 노드를 클러스터(cluster)로 묶어야 합니다.

클러스터 (Cluster)

  • 클러스터란?
    • 여러 노드를 그룹화한 것입니다.
    • 한 노드가 실패하더라도 다른 노드를 통해 애플리케이션에 접근할 수 있습니다.
    • 또한, 여러 노드는 부하를 분산하는 데 도움이 됩니다.

마스터 (Master)

  • 마스터의 역할
    • 클러스터를 관리하고, 클러스터 구성원 정보 저장, 노드 상태 모니터링, 장애 발생 시 워크로드를 다른 노드로 이동시키는 작업을 수행합니다.
    • 마스터는 쿠버네티스가 설치된 또 다른 노드이며, 클러스터의 오케스트레이션을 담당합니다.

쿠버네티스 주요 구성 요소

  1. API 서버 (API Server)
    • 쿠버네티스의 프론트엔드 역할을 합니다.
    • 사용자, 관리 장치, CLI 도구 등이 API 서버와 통신하여 클러스터와 상호작용합니다.
  2. etcd 키-값 저장소
    • 분산형 신뢰 가능한 키-값 저장소로, 클러스터 관리 데이터를 저장합니다.
    • 여러 마스터와 노드 간 충돌 방지를 위한 잠금(lock) 기능도 제공합니다.
  3. 스케줄러 (Scheduler)
    • 컨테이너를 여러 노드에 분배합니다.
    • 새로 생성된 컨테이너를 감지하고 적합한 노드에 할당합니다.
  4. 컨트롤러 (Controllers)
    • 오케스트레이션의 핵심으로, 장애 발생 시 새로운 컨테이너를 생성하는 등의 결정을 내립니다.
  5. 컨테이너 런타임 (Container Runtime)
    • 컨테이너를 실행하는 데 필요한 소프트웨어입니다.
    • 일반적으로 Docker를 사용하지만, Rocket 또는 CRI-O 같은 대안도 있습니다.
  6. kubelet
    • 각 워커 노드에서 실행되는 에이전트로, 컨테이너가 정상적으로 실행되도록 보장합니다.

마스터와 워커 노드의 구성

  • 마스터 노드: API 서버, etcd 키-값 저장소, 컨트롤 매니저(control manager), 스케줄러 등이 설치되어 있습니다.
  • 워커 노드: kubelet 에이전트와 컨테이너 런타임(Docker 등)이 설치되어 있습니다. kubelet은 마스터와 상호작용하며 워커 노드의 상태 정보를 제공합니다.

kubectl 명령어

  • 쿠버네티스를 관리하기 위한 CLI 도구입니다.
  • 주요 명령어:
    • kubectl run: 애플리케이션 배포
    • kubectl cluster-info: 클러스터 정보 확인
    • kubectl get nodes: 클러스터 내 모든 노드 목록 확인

Docker-vs-ContainerD

Docker와 containerd의 역사와 관계

  1. Docker의 시작:
    • Docker는 초기 컨테이너 기술의 사용자 경험을 단순화하여 대중화된 도구입니다.
    • Docker는 컨테이너 이미지 빌드, 실행, 관리 등 다양한 기능을 제공하며, RunC(컨테이너 실행) 및 containerd(런타임 관리 데몬)를 포함한 여러 구성 요소로 이루어져 있습니다.
  2. Kubernetes와 Docker:
    • Kubernetes는 처음에는 Docker를 기반으로 컨테이너를 오케스트레이션(관리)하도록 설계되었습니다.
    • 그러나 시간이 지나면서 Kubernetes는 Docker 외의 컨테이너 런타임도 지원할 필요가 생겼습니다.
  3. Container Runtime Interface(CRI):
    • Kubernetes는 CRI라는 표준 인터페이스를 도입하여 Docker 외의 런타임(예: Rocket)을 지원할 수 있도록 했습니다.
    • CRI는 Open Container Initiative(OCI) 표준을 따르는 런타임과 호환됩니다.
    • Docker는 CRI 표준에 맞춰 설계되지 않았기 때문에 Kubernetes는 "dockershim"이라는 임시 솔루션으로 Docker 지원을 유지했습니다.
  4. Docker 지원 종료:
    • Kubernetes 1.24 버전에서 dockershim이 제거되며 Docker 지원이 공식적으로 종료되었습니다.
    • 그러나 Docker가 OCI 이미지를 생성하기 때문에 기존 Docker 이미지들은 containerd와 같은 다른 런타임에서도 계속 사용할 수 있습니다.

세부 설명

  1. ctr (containerd 전용 디버깅 도구):
    • containerd 설치 시 기본 제공되는 CLI 도구입니다.
    • 이미지 다운로드(ctr images pull), 컨테이너 실행(ctr run) 등의 기본 작업만 가능하며, 사용자 친화적이지 않습니다.
  2. nerdctl (Docker 유사 CLI):
    • containerd를 위한 Docker-like CLI로, 대부분의 Docker 명령어를 대체할 수 있습니다.
    • 추가적으로 암호화된 이미지, 네임스페이스 등 최신 기능을 지원합니다.
    • 예: docker run 대신 nerdctl run 사용.
  3. crictl (Kubernetes 중심 디버깅 도구):
    • Kubernetes 노드에서 CRI 호환 런타임과 상호작용하기 위해 설계되었습니다.
    • 주로 디버깅 목적으로 사용되며, kubelet과 연동되어 비정상적인 컨테이너를 삭제할 수 있습니다.
    • 예: docker ps 대신 crictl ps, docker logs 대신 crictl logs.

'유데미 > ckad' 카테고리의 다른 글

Recap - Pods with YAML  (0) 2025.01.29
Recap - Pods  (0) 2025.01.29
Certification Details  (0) 2025.01.29