IT/Kubernetes

[Kubernetes] 쿠버네티스 구성 요소 (Components) - DevelopMoon

developmoon 2024. 10. 23. 11:31

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

Kubernetes 클러스터의 구성 요소

  • 쿠버네티스 클러스터는 Control Plane Components와 하나 이상의 work nodes로 구성된다.

출처: https://kubernetes.io/docs/concepts/overview/components/

 

Control Plane Components

  • Control Plane Components는 클러스터의 전반적인 상태를 관리한다.
  • kube-apiserver
    • Kubernetes HTTP API를 노출하는 핵심 구성 요소 서버이다.
    • 수평적으로 확장되도록 설계되어 더 많은 인스턴스를 배포하여 확장할 수 있다.
    • kube-apiserver의 여러 인스턴스를 실행하고 해당 인스턴스 간의 트래픽을 균형 있게 조정할 수 있다.
  • etcd
    • 모든 API 서버 데이터에 대한 일관되고 가용성이 높은 키 값 저장소이다.
    • 쿠버네티스 클러스터가 동작하기 위해서 클러스터 및 리소스의 구성 정보, 상태 정보 및 명세 정보 등이 필요한데 etcd는 이를 키-값(key-value) 형태로 저장하는 저장소이다.
    • 안정적인 동작을 위해 자료를 분산해서 저장하는 구조를 채택하고 있다.
  • kube-scheduler
    • 아직 노드에 바인딩되지 않은 Pod를 찾아 각 Pod를 적합한 노드에 할당한다.
    • 스케줄링 결정에 고려되는 요소
      1. 개별 및 집단 리소스 요구 사항
      2. 하드웨어, 소프트웨어, 정책 제약 조건, 선호도 및 반선호도 사양, 데이터 지역성, 작업 간 간섭 및 마감
  • kube-controller-manager
    • 실행 컨트롤러 Kubernetes API 동작을 구현한다.
    • 실행되는 Control Plane Components 제어하는 장치 프로세스이다.
    • 복잡성을 줄이기 위해 모두 단일 바이너리로 컴파일되어 단일 프로세스에서 실행된다.
    • 컨트롤러의 여러 가지 유형
      • Node controller
        • 노드가 다운될 때 대응하는 역할을 담당한다.
      • Job controller
        • 일회성 작업을 나타내는 작업 객체를 감지한 후 해당 작업을 완료할 Pod를 생성한다.
      • EndpointSlice controller
        • 서비스와 Pod간의 링크를 제공하기 위해 EndpointSlice 객체를 채운다.
      • ServiceAccount controller
        • 새 네임스페이스에 대한 기본 ServiceAccount를 생성한다.
  • cloud-controller-manager (optional)
    • 선택 사항으로 기본 클라우드 공급자와 통합한다.
    • 쿠버네티스 Control Plane Components 중 클라우드 전용 제어 로직을 내장한 구성 요소이다.
    • 해당 옵션을 사용하면 클러스터를 클라우드 공급자의 API에 연결할 수 있으며, 해당 클라우드 플랫폼과 상호 작용하는 구성 요소와 클러스터와만 상호 작용하는 구성 요소를 분리할 수 있다.
    • 자체 데이터 센터나 개인 학습 환경에서 사용하는 경우에는 clould-contorller-manager를 실행하지 않는다.
    • kube-controller-manager와 마찬가지로 여러 개의 논리적으로 독립적인 제어 루프를 단일 프로세스로 실행하는 단일 바이너리로 결합한다.
    • 성능을 개선하거나 장애를 허용하기 위해 수평적으로 확장할 수 있다.
    • 다음 컨트롤러는 클라우드 공급자 종속성을 가질 수 있다.
      • Node controller
        • 클라우드 공급자가 응답을 멈춘 후 클라우드에서 노드가 삭제되었는지 확인하기 위해 클라우드 공급자를 확인한다.
      • Route controller
        • 기본 클라우드 인프라에서 경로를 설정하기 위한 것이다.
      • Service controller
        • 클라우드 공급자 로드 밸런서를 생성, 업데이트 및 삭제하기 위한 것이다.

 

Node components

  • 모든 노드에서 실행하고 실행 중인 Pod를 유지 관리하며 Kubernetes 런타임 환경을 제공한다.
  • kubelet
    • 컨테이너를 포함하여 Pod가 실행 중인지 확인한다.
    • 다양한 메커니즘을 통해 제공되는 PodSpec을 받아 해당 PodSpec에 설명된 컨테이너가 실행되고 건강한지(정상적으로 작동하는지) 확인한다.
    • Kubernetes에서 생성되지 않은 컨테이너를 관리하지 않는다.
  • kube-proxy (optional)
    • 서비스를 구현하기 위해 노드에서 네트워크 규칙을 유지하여 구현한다.
    • 각 네트워크에서 실행되는 네크워크 프록시이다.
    • 쿠버네티스 클러스터 내부에서 네트워크 요청을 전달하는 역할이다.
  • Container runtime
    • 포함된 컨테이너 실행을 실질적으로 담당하는 애플리케이션을 의미한다.
    • 쿠버네티스 환경 내에서 컨테이너의 실행 및 수명 주기를 관리하는 역할을 한다.

Addons

  • Kubernetes 리소스(DaemonSet, Deployment 등)를 사용하여 클러스터 기능을 구현한다.
  • 클러스터 수준 기능을 제공하기 때문에 애드온의 네임스페이스 리소스는 kube-system 네임스페이스에 속한다.
  • DNS
    • 클러스터 전체의 DNS 서비스를 제공하여, 서비스와 Pod 간의 네트워크 이름 해석을 지원한다.
  • 웹 UI (대시보드)
    • 클러스터의 상태를 시각적으로 모니터링하고 관리할 수 있는 웹 인터페이스를 제공한다.
  • 컨테이너 리소스 모니터링
    • 컨테이너의 성능 메트릭을 수집하고 저장하여 클러스터의 리소스 사용 현황을 실시간으로 모니터링한다.
  • 클러스터 수준 로깅
    • 클러스터 내의 모든 컨테이너 로그를 중앙 로그 저장소에 집계하여, 로그 데이터를 효과적으로 관리하고 분석한다.

Reference

https://kubernetes.io/docs/concepts/overview/components/

https://www.samsungsds.com/kr/insights/kubernetes-3.html