개발/클라우드 엔지니어

5. 쿠버네티스의 기본

새벽감성개발자 2024. 1. 24. 16:15
반응형

그림 1. 마스터와 노드의 내부 구조

 

5.1.1 k8s 클러스터를 구성하는 코어 프로세스(컨테이너)[1]

  1. kubectl
    • k8s 클러스터를 조작하기 위한 도구
    • 가장 빈번하게 이용되는 커맨드 라인 인터페이스
  2. kube-apiserver
    • kubectl 등의 API 클라이언트로부터 오는 REST요청을 검증
    • API 오브젝트를 구성하고 상태를 보고
  3. kube-scheduler
    • 쿠버네티스의 기본 스케줄러
    • 새로 생성된 모든 파드에 대해 실행할 최적의 노드를 선택
    • 스케줄러는 파드가 실행 가능한 노드를 찾은 다음 점수를 계산하여 가장 점수가 높은 노드를 선택
  4. kube-controller-manager
    • 컨트롤러를 구동하는 마스터상의 컴포넌트
  5. cloud-controller-manager
    • API를 통해서 클라우드 서비스와 연계하는 컨트롤러
    • 클라우드 업체에서 개발
  6. etcd
    • k8s 클러스터의 모든 관리 데이터는 etcd에 저장
    • CoreOS가 개발한 분산 키/값 저장소로 신뢰성이 요구되는 핵심 데이터의 저장 및 접근을 위해 설계
  7. kubelet
    • 각 노드에서 다음과 같은 역할을 수행
      • 파드와 컨테이너의 실행
      • 파드와 노드의 상태를 API 서버에 보고
      • 컨테이너의 동작을 확인하는 프로브 실행
      • 내장된 cAdvisor를 통해 메트릭 수집 및 공개
  8. kube-proxy
    • kube-proxy는 각 노드에서 동작하며 로드밸런싱 기능을 제공
      • 서비스와 파드의 변경을 감지하여 최신 상태로 유지
      • iptables 규칙을 관리
      • 서비스명과 ClusterIP 내부 DNS에 등록
  9. coredns
    • 파드가 서비스 이름으로부터 IP주소를 얻기 위해 사용
    • 버전 1.11부터, kube-dns 대신 coredns가 사용
    • kube-dns가 부족했던 신뢰성, 보안성, 유연성이 coredns에서 개선
    • CoreDNS 프로젝트는 CNCF가 관리

5.1.2 애드온 컴포넌트

  1. kube-flannel
    • kube-flannel은 모든 노드에서 실행되어 여러 노드 사이에서 IPv4 네트워크를 제공
    • 컨테이너(파드)는 K8s 클러스터 내부에서 사용되는 IP 주소를 바탕으로 다른 노드에 있는 파드와 통신
    • 네트워크 접근 제어가 필요한 경우 calico를 사용
  2. calico-kube-controllers
    • calico를 위한 컨트롤러, 데이터 스토어로서 etcd를 이용하기 위해 사용
  3. calico-node
    • 모든 노드에서 실행되어 노드 간 파드의 통신, 라우팅, 네트워크 접근 관리 기능을 제공
  4. kubernetes-dashboard
    • Web 대시보드
  5. heapster
    • kubelet에 내장된 cAdvisor로부터 메트릭 정보를 수집
    • 버전 1.11부터 지원이 중단
  6. metrics-server
    • heapster를 대신해서 버전 1.8부터 도입
    • API의 aggregation layer를 통해서 K8s 클러스터 전체로부터 메트릭을 수집

 

5.2.1 쿠버네티스 계층 구조

※ 클라이언트 도구인 kubectl을 통해 K8s 클러스터를 조작하는 사람을 제일 위에 놓고, K8s 클러스터의 구성도를 그림

그림 2. K8s 클러스터의 구성 개념도

 

반응형