Study/Kubernetes

[이론] 쿠버네티스 구성요소

Dream Amal 2025. 6. 23.

쿠버네티스란?

  • 컨테이너 오케스트레이션을 위한 솔루션
    • 오케스트레이션 : 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용하도록 서비스를 제공하는 것
  • 쿠버네티스 구성 방법
    1. CSP의 관리형 쿠버네티스
      • EKS (Amazon), GKS (GCP), NKS (NCP) 등
    2. 플랫폼에서 제공하는 설치형 쿠버네티스
      • Rancher (수세) , Openshitf (레드헷)
    3. 쿠버네티스를 자동으로 구성해주는 솔루션 사용
      • kubeadm (주로 사용), kops, KRIB, kubespray
      • 각 솔루션 비교

⭐ 쿠버네티스 구성 요소 ⭐

  • 마스터 노드
    • kubectl : k8s cluster에 명령을 내리는 역할, 주로 API server와 통신함
    • API server : cluster 중심 역할을 하는 통로
    • ETCD : 구성 요소들의 상태 값이 모두 저장되는 분산 저장소
      • etcd 외의 다른 구성요소는 상태값을 관리하지 X, etcd 정보만 백업되어 있으면 긴급한 장애 상황에 클러스터 복구가 가능함
    • Controller Manager : 클러스터의 오브젝트 상태를 관리
      • ex) 워커 노드 통신이 되지 않는 경우, 상태 체크와 복구가 컨트롤러 매니저에 속한 노드 컨트롤러에서 이루어짐
      • ex) ReplicaSet에 요청받은 pod의 개수대로 pod를 생성함
    • Scheduler : 노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 pod를 어떤 워커노드에 생성할 것인지를 결정하고 할당함
  • 워커노드
    • kubelet : pod의 구성 내용(PodSpec)을 받아서 컨테이너 런타임으로 전달, pod 안의 컨테이너들이 정상 동작하는지 모니터링함
    • container runtime : pod를 이루는 컨테이너의 실행을 담당
      • pod 안에서 다양한 종류의 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스
    • POD : 한 개 이상의 컨테이너로, 단일 목적의 일을 하기 위해 모인 단위
  • CNI (Container Network Interface) : 컨테이너 네트워크의 안정성과 확장성을 보장하기 위해 개발됨
    • Calico, Flannel 등 다양한 네트워크 플러그인이 있음
      • k8s 클러스터의 통신을 위해서 네트워크 플러그인을 선택하여 구성해야 함
      • NCP의 경우 Calico를 기반으로 L3 기반의 컨테이너 네트워크를 구성함
  • CoreDNS : cluster 내에서 도메인을 이용해 통신하는 데 사용
  • kube-proxy : cluster는 pod가 위치한 node에 있는 kube-proxy를 통해 pod가 통신할 수 있는 네트워크를 설정함
항목 Master Node Worker Node
역할 클러스터 상태 관리 및 제어 컨테이너(Pod) 실행 담당
주요 구성 kube-apiserver, etcd, scheduler 등 kubelet, kube-proxy, container runtime
실행 대상 컨트롤 컴포넌트 실제 애플리케이션 Pod
  • ⭐ k8s의 특징
    • 쿠버네티스는 선언적(declarative) 시스템 구조를 가지고 있음
      • 각 요소가 추구하는 상태(desired status)를 선언하면 현재 상태(current status)와 맞는지 점검하고, 이를 맞추려고 함
    • 추구하는 상태를 API server에 선언하면, 다른 요소들이 API 서버에 와서 현재 상태와 비교하고 그에 맞게 상태를 변경하려고 함
      • API server는 현재 상태 값을 가지고 있으므로, 이를 보존하기 위해 ETCD가 필요한 것
  • 그림으로 알아보기
    • 쿠버네티스 구성 요소간의 통신 단계 pod의 생명주기 (pod 생성, 수정, 삭제의 과정)

⭐ 쿠버네티스 오브젝트 ⭐

  • Spec과 Status 등의 개별 속성을 포함해 부르는 단위를 오브젝트(Object)라고 함
    • 오브젝트 스펙은 대부분 yaml 로 작성하여 관리함
  • 기본 오브젝트
    • Pod : 쿠버네티스에서 실행되는 최소 단위
      • 독립적인 공간과 사용 가능한 IP를 가지고 있음
    • Namespace : cluster에서 사용되는 리소스들을 구분해 관리하는 그룹
      • default : namespace를 지정하지 않으면 기본으로 할당되는 그룹
      • kube-system : 쿠버네티스 시스템에서 사용
    • Volume : pod가 생성될 때, pod에서 사용할 수 있는 디렉터리를 제공
      • pod가 언제든지 삭제될 수 있으므로 디렉터리도 임시로 사용하지만, pod가 사라지더라도 영구적인 디렉터리를 volume을 통해 생성할 수 있음
    • Service : pod 가 새롭게 생성될 때 부여되는 새로운 IP를 기존 제공하던 기능과 연결하여 pod 접속을 내/외부로 안정적으로 유지하도록 함
  • Deployment : 기본 오브젝트를 조금 더 효율적으로 동작할 수 있도록 기능을 조합하여 구현한 것
    • pod에 기반을 두고 있으며 ReplicaSet을 합쳐 놓은 형태
  • 이외에도 다양한 오브젝트들이 존재함
    • ReplicaSet : 지정된 수의 pod 복제본이 항상 실행 상태로 유지하는 데 사용됨
    • DaemonSet : deployment의 replicas가 node 수 만큼 정해져 있으며, node 하나 당 pod 한 개만 생성함
      • node를 관리하는 pod일 경우, DaemonSet으로 만드는 것이 효율적임
    • StatefulSet : 각 pod가 순서대로 생성되어 고정된 이름, 볼륨, 설정 등을 유지할 수 있음
      • 효율성 면에서 좋은 구조는 아니지만, 마스터-슬레이브 구조 시스템에서는 요구 사항에 맞춰 필요한 경우가 있음
    • PV, PVC : pod에서 생성한 내용을 기록하거나 모든 pod가 동일한 설정 값을 유지하기 위해 공유 가능한 볼륨이 필요한 경우가 있음
      • PV(PersistentVolume, 지속적으로 사용 가능한 볼륨) : 볼륨을 사용할 수 있게 준비
      • PVC(PersistentVolumeClaim, 지속적으로 사용 가능한 볼륨 요청) : 준비된 볼륨에서 일정 공간을 할당받아 사용
        • PV와 PVC의 관계도
    • ConfigMap : 설정을 목적으로 사용하는 오브젝트
728x90

댓글