쿠버네티스의 주요 개념

리소스 용도
노드 컨테이너가 배치되는 서버
네임스페이스 쿠버네티스 클러스터 안의 가상 클러스터
파드 컨테이너의 집합 중 가장 작은 단위로, 컨테이너의 실행 방법을 정의
레플리카세트(replica Sets) 같은 스펙을 갖는 파드를 여러 개 생성하고 관리하는 역할
디플로이먼트(Deployments) 레플리카 세트의 리비전을 관리
서비스 파드의 집합에 접근하기 위한 경로를 정의
인그레스(Ingress) 서비스를 쿠버네티스 클러스터 외부로 노출시킨다.
컨피그맵(Config Maps) 설정 정보를 정의하고 파드에 전달
퍼시스턴트 볼륨(Persistent Volume) 파드가 사용할 스토리지의 크기 및 종류를 정의
퍼시스턴트 볼륨 클레임(Persistent Volume Claim) 퍼시스턴트 볼륨을 동적으로 확보
스토리지 클래스(Storage class) 퍼시스턴트 볼륨을 확보하는 스토리지의 종류를 정의
스테이트풀 세트(Stateful Sets) 같은 스펙으로 모두 동일한 파드를 여러 개 생성하고 관리
잡(Job) 상주 실행을 목적으로 하지 않는 파드를 여러 개 생성하고 정상적인 종료를 보장
크론잡(Clon Jobs) 크론 문법으로 스케줄링되는 잡.

쿠버네티스 클러스터와 노드

  • 쿠버네티스 클러스터
    • 쿠버네티스의 여러 리소스를 관리하기 위한 집합체
      • 쿠버네티스 리소스 중에서 가장 큰 개념은 노드(Node)
    • 적어도 하나 이상의 마스터(서버)에 의해 관리를 받음
  • 노드
    • 쿠버네티스 클러스터의 관리 대상으로 등록된 도커 호스트
    • 컨테이너가 배치되는 대상

네임스페이스

쿠버네티스는 클러스터 안에 가상 클러스터를 또 다시 만들 수 있는데, 이 클러스터 안의 가상 클러스터를 네임스페이스(namespace)라고 한다.

파드

파드(pod)는 컨테이너가 모인 집합체의 단위로, 적어도 하나 이상의 컨테이너로 이루어진다.
쿠버네티스를 도커와 함께 사용한다면 파드는 컨테이너 하나 혹은 컨테이너의 집합체가 되며, 결합이 강한 컨테이너를 파드로 묶어 일괄 배포한다.(컨테이너가 하나인 경우에도 파드로 배포)

파드는 노드에 배치해야 하며, 같은 파드를 여러 노드에 배치할 수도 있고 한 노드에 여러 개 배치할 수도 있다.
그러나 한 파드 안의 컨테이너는 모두 같은 노드에 배치해야 한다. 다시 말해, 파드 하나가 여러 노드에 걸쳐 배치될 수는 없다.
따라서 ‘파드의 적절한 크기’를 가장 먼저 고려해야 한다.

레플리카세트(Replica Sets)

파드(pod)를 정의한 매니페스트 파일(manifest file)로는 하나밖에 생성할 수 없다.
그러나 어느 정도 규모가 되는 애플리케이션을 구축하려면 같은 파드를 여러 개 실행해 가용성을 확보해야 하는 경우가 있다. 이런 경우에 사용하는 것이 레플리카세트(Replica Sets)다.

레플리카세트는 똑같은 정의를 갖는 파드를 여러 개 생성하고 관리하기 위한 리소스

디플로이먼트(deployment)

레플리카세트보다 상위에 해당하는 리소스로 디폴로이먼트(deployment)가 있다.

디플로이먼트는 애플리케이션 배포(deploy)의 기본 단위가 되는 리소스
  • 레플리카세트는 똑같은 파드의 레플리케이션 개수를 관리 및 제어하는 리소스
  • 디폴로이먼트는 레플리카세트를 관리하고 다루기 위한 리소스
Deployment -> Replica Set -> Pods

서비스(Services)

서비스는 쿠버네티스 클러스터 안에서 파드의 집합(주로 레플리카세트)에 대한 경로나 서비스 디스커버리를 제공하는 리소스다.
서비스의 대상이 되는 파드는 서비스에서 정의하는 레이블 셀렉터로 정해진다.

인그레스(Ingress)

쿠버네티스 클러스터 외부로 서비스를 공개하려면 서비스를 NodePort로 노출시킨다.
그러나 이 방법은 L4 레벨까지만 다룰 수 있기 때문에 HTTP/HTTPS처럼 경로를 기반으로 서비스를 전환하는 L7 레벨의 제어는 불가능하다.
이를 해결하기 위한 리소스가 인그레스다. 서비스를 이용한 쿠버네티스 클러스터 외부에 대한 노출과 가상 호스트 및 경로 기반의 정교한 HTTP 라우팅을 양립시킬 수 있다.
HTTP/HTTPS 서비스를 노출하려는 경우에는 십중팔구 인그레스를 사용한다.