본문 바로가기

Cloud-native/Kubernetes

[Kubernetes]쿠버네티스 리소스 - 어플리케이션 (Pod/ReplicaSet/Delpoyment/DaemonSet/StatefulSet)

쿠버네티스 리소스

쿠버네티스는 유연한 어플리케이션 실행 환경 관리를 소프트웨어로 수행하기 때문에 다양한 것들을 추상화하고 있다. 이렇게 추상화한 것을 쿠버네티스에서는 리소스라고 부른다.


 

파드(Pod)

  • 쿠버네티스에서는 여러 개의 컨테이너를 모아서 파드로 관리한다.
  • 파드 안에는 어플리케이션 서버용 컨테이너와 프록시 서버용 컨테이너 등과 관련된 것을 모아 관리할 수 있다.
  • 쿠버네티스에서 이 파드가 어플리케이션의 배포 단위가 되며, 포드 단위로 컨테이너의 작성, 시작, 정지, 삭제 등과 같은 조작을 한다.
  • 동일한 파드 안의 컨테이너는 반드시 동일한 노드 상에 동시에 디플로이 된다는 특징이 있다.
  • 파드 안의 여러 컨테이너에서 가상 NIC를 공유하는 구성을 취하기 때문에 컨테이너끼리 localhost를 경유하여 통신할 수 있다. 또 디렉터리도 공유할 수 있다.

리플리카셋 (ReplicaSet)

오랜 시간 동안 계속 실행되어야 하는 파드들을 관리하는 워크로드

  • 클러스터 안에서 지정된 수의 파드를 기동시 켜 주는 장치
  • 가동 중인 파드를 감시하여 장애 등 뭔가의 이유로 정지된 경우 해당 포드를 삭제하고 새로운 포드를 기동시킨다. 즉, 항상 필요한 수만큼 포드가 기동 된 상태를 클러스터 안에 만드는 역할을 한다.
  • 클러스터 안에 포드를 가동시켜 두는 값을 '리플리카 수'라고 한다.

디플로이먼트(Deployment)

오랜 시간 동안 계속 실행되어야 하는 파드들을 관리하는 워크로드

  • 어플리케이션의 배포 단위를 관리하는 것
  • 디플로이먼트는 리플리카셋의 이력을 가지고 있어서 포드 안의 컨테이너를 버전 업하고 싶을 때 시스템을 정지시키지 않고 버전업을 하는 롤링 업데이트를 할 수 있다. 또한 이 이력을 바탕으로 하나 앞 세대로 롤백할 수 도 있다.

데몬셋(DaemonSet)

클러스터의 전체 노드에 같은 파드를 실행하는 워크로드
  • 파드는 스케줄링을 어떤 노드에서 할지 쿠버네티스가 결정한다. 하지만 로그 콜렉터나 모니터링 에이전트처럼 각각의 노드에서 반드시 하나씩 작동시키고 싶은 경우가 있다.
  • 이럴 때 사용하는 것이 데몬셋이다. 데몬셋은 클러스터의 전체 노드에 포드를 하나 작성한다.
  • 데몬셋도 리플리카셋과 마찬가지로 매니페스트 파일에서 정의한 대로의 상태를 유지하도록 움직인다.
  • 즉, 어떤 노드에서 데몬셋으로 정의한 포드가 움직이고 있지 않다면 데몬셋 컨트롤러가 이를 감지하고 해당 노드에 포드를 생성시킨다.
  • 단, 데몬셋은 리플리카셋과 달리 리플리카 수를 지정할 수 없다.
  • 사실 노드 상에 움직이는 쿠버네티스의 네트워크 프록시 기능인 'kube-proxy'도 이 데몬셋을 사용하여 움직이고 있다.

스테이트풀셋(StatefulSet)

보통 상태가 없는 앱을 실행하는데 사용하는 컨테이너를 상태가 있는 앱을 실행할 때 사용하도록하는 워크로드
 
  • 컨테이너 어플리케이션은 기본적으로 stateless로, 상태를 갖지 않는 포드를 여러 개 움직이게 하기 위한 것이다.
  • 앞에서 설명한 리플리카셋은 이름이나 IP 주소 등이 랜덤으로 할당된다. 또 스케일 다운시에 정지될 포드가 랜덤으로 선택된다.
  • 하지만 데이터베이스와 같이 영구 데이터와 연계되는 경우에서는 상태를 유지할 필요가 있다. 이 스테이트풀한 컨테이너 어플리케이션을 실행하기 위한 리소스가 스테이트풀셋이다.
  • 스테이트풀셋은 리플리카셋과 달리 파드의 고유성을 보증해 준다.

완벽한 IT 인프라 구축의 자동화를 위한 Kubernetes(쿠버네티스) - Asa Shiho지음

2022.05.01 - [리뷰/도서] - [도서]완벽한 IT 인프라 구축의 자동화를 위한 Kubernetes(쿠버네티스)