쿠버네티스와 컴포넌트

  31 Dec 2020


Kubernetes와 컴포넌트

컨테이너 개발시대

  • 컨테이너는 VM과 유사하나 격리 속성을 완화하여 어플리케이션 간에 운영체제를 공유함
  • 자체 파일시스템, CPU 점유율, 메모리, 프로세스 공간
  • 기본 인프라와 종속성을 끊어, 클라우드나 OS 배포본에 이식할 수 있음

용어

  1. 노드
    • 쿠버네티스의 작업 장비
  2. 파드
    • 클러스터에서 실행중인 컨테이너의 집합
  3. 컨트롤 플레인
    • 클러스터의 라이프사이클을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어

쿠버네티스 컴포넌트

쿠버네티스 클러스터

  • 컨테이너화된 어플리케이션을 실행하는 노드라는 워커머신의 집합
  • 모든 클러스터는 최소 한개의 워커노드를 가짐

워커노드

  • 어플리케이션의 구성 요소인 파드를 호스트함
  • 컨트롤 플레인은 워커노드와 클러스터 내 파드를 관리함
  • 프로덕션 환경에서는 일반적으로 컨트롤 플레인이 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 일반적으로 여러 노드를 실행함
    • 내결함성과 고가용성이 제공됨

컨트롤플레인 컴포넌트

  • 클러스터에 관한 전반적인 결정(스케줄링 등)을 수행
  • 클러스터 이벤트(deployment의 replicas 필드에 대한 요구 조건이 충족되지 않을 경우 새로운 파드르 구동)등을 감지하고 반응함
  • 클러스터 내 어떠한 머신이든 동작 가능
  • But, 간결성을 위해 구성 스크립트는 보통 동일 머신상에 모든 컨트롤 플레인 컴포넌트를 구동시키고, 사용자 컨테이너는 해당 머신상에 동작시키지 않음

쿠버네티스 API

  • 컨트롤 플레인의 핵심은 API 서버이다
  • 최종 사용자, 클러스터의 다른 부분, 외부 컴포넌트가 서로 통신할 수 있도록 HTTP API를 제공함

kube-apiserver

  • 쿠버네티스 api를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트
  • 쿠버네티스 컨트롤 플레인의 프론트 엔드
  • 수평으로 확장되도록 디자인됨
    • 더 많은 인스턴스를 배포해서 확장할 수 있음
    • 인스턴스를 실행하고, 인스턴스간 트래픽을 균형있게 조절할 수 있음

etcd

  • 모든 클러스터 데이터를 담는 뒷단의 저장소
  • 일관성*고가용성 키-값 저장소

Kube-scheduler

  • 노드가 배정되지 않은 새로 생성된 파드를 감지, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트

kube-controller-manager

  • 컨트롤러를 구동하는 마스터 상의 컴포넌트
    • 노드 컨트롤러
      • 노드가 다운되었을 때, 통지와 대응
    • 레플리케이션 컨트롤러
      • 시스템의 모든 레플리케이션 컨트롤러 오브젝트에 대해 알맞은 수의 파드들을 유지시켜주는 책임
    • 엔드포인트 컨트롤러
      • 엔드포인트 오브젝트를 채움
      • 서비스와 파드를 연결시킴
    • 서비스 어카운트 & 토큰 컨트롤러
      • 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성

cloud-controller-manager (이거 뭐야!)

  • 클라우드별 컨트롤 로직을 포함하는 컨트롤 플레인 컴포넌트
  • 클러스터를 클라우드 공급자 API에 연결
  • 해당 클라우드 플랫폼과 상호작용하는 컴포넌트와 클러스터와 상호작용하는 컴포넌트를 분리할 수 있음

노드 컴포넌트

  • 동작 중인 파드를 유지시키고, 쿠버네티스 런타임 환경을 제공
  • 모든 노드상에서 동작

Kubelet

  • 클러스터의 각 노드에서 실행되는 에이전트
  • 파드에서 컨테이너가 확실히 동작하도록 관리함
  • 제공된 파드 스펙의 집합을 받아서 컨테이너가 해당 파드 스펙에 따라 동작하도록 담당

kube-proxy

  • 각 노드에서 실행되는 네트워크 프록시
  • 쿠버네티스 서비스 개념의 구현부
  • 운영 체제에 가용한 패킷 필터링 계층이 있으면 이를 사용함
  • 그렇지 않으면, 트래픽 자체를 포워드함

컨테이너 런타임

  • 컨테이너 실행을 담당하는 소프트웨어

애드온

  • 쿠버네티스 리소스(데몬셋, 디플로이먼트 등)을 이용하여 클러스터 기능을 구현함
  • kube-system 네임스페이스에 속함

DNS

  • 모든 쿠버네티스 클러스터는 클러스터 DNS를 갖추어야 한다
  • 구성환경 내 다른 DNS 서버와 더불어, 쿠버네티스 서비스를 위해 DNS 레코드를 제공해주는 DNS 서버임
  • 쿠버네티스에 의해 구동되는 컨테이너는 DNS 검색에서 이 서버를 자동으로 포함함
...