Kubernetes의 구성요소

image|975 image|1075

  • Pod

    • 어플리케이션 배포를 위한 최소 단위

    • 기존의 Docker Cluster 환경은 아래 그림과 같이 각 호스트별로 컨테이너를 할당하여, 서비스를 진행하였다. 이를 위해서는 각 컨테이너간 통신을 위해 라우팅이 필수적으로 이루어졌다.

      image

      이는 호스트의 리소스를 크게 소모하게 되어 불필요한 자원들을 소모하게 되었다.

    • 위와 같은 문제를 해결하기 위해 K8S에서는 한 쌍의 서비스를 한개의 Pod로 만들게 되어, Pod 한개 당 IP를 한개 부여하게 되었다.

      image

  • Controller

    • Scheduler에 의해 선택된 노드에 Pod를 배치
    • 배치된 Pod에 대한 상태를 확인
    • Pod의 상태를 etcd에 등록
    • 토큰 발행, Service Account 등 인증
  • Scheduler

    • API-server를 통해 전달된 노드의 상태를 점수로 매겨, Pod를 배치할 가장 적절한 노드를 결정한다.
  • Add-on

    • Calico
      • 클러스터 환경 내 Pod간 통신에 관여하는 네트워크 플러그인
    • CoreDNS
      • K8S에서 제공되는 DNS서비스
  • kube-proxy

    • Pod에 대한 통신을 제어하여, 사용자가 Pod로 접근시 NAT 및 라우팅을 진행해준다.
  • api-server

    • 각 wokrer node의 kubelet과 상호작용하여, Pod에 대한 상태, 노드의 리소스 등을 확인한다.
  • etcd

    • 클러스터 환경 정보를 저장하는 데이터 파일로 클러스터의 모든 정보는 etcd에 저장된다. 이는 API와 함께 동작하게 된다.