워크로드 관리
워크로드 관리 (Workload Management)
Kubernetes는 워크로드와 그 구성 요소의 선언적 관리를 위한 여러 내장 API를 제공해요.
궁극적으로 애플리케이션은 Pod 안의 컨테이너로 실행되지만, 개별 Pod를 관리하는 건 많은 노력이 들어요. 예를 들어 Pod가 실패하면 교체할 새 Pod를 실행하고 싶을 텐데, Kubernetes가 그 일을 해줄 수 있어요.
Kubernetes API로 Pod보다 높은 추상화 수준을 나타내는 워크로드 객체를 만들면, Kubernetes 컨트롤 플레인이 정의한 워크로드 객체 스펙을 기반으로 대신 Pod 객체를 자동으로 관리해요.
워크로드 관리를 위한 내장 API는 다음과 같아요.
-
Deployment (간접적으로 ReplicaSet): 클러스터에서 애플리케이션을 실행하는 가장 흔한 방법. 상태 없는(stateless) 애플리케이션 워크로드 관리에 적합하며, Deployment의 어떤 Pod든 상호 교환 가능하고 필요 시 교체될 수 있어요. Deployment는 레거시 ReplicationController API의 대체품이에요.
-
StatefulSet: 같은 애플리케이션 코드를 실행하는 하나 이상의 Pod를 관리하며, Pod가 고유한 식별자(identity)에 의존해요. Deployment(교환 가능한 Pod)와는 달라요. 가장 흔한 사용은 Pod와 영구 스토리지 사이의 연결을 만드는 것이에요. 예를 들어 각 Pod를 PersistentVolume과 연결하는 StatefulSet을 실행할 수 있어요. StatefulSet의 Pod 하나가 실패하면 Kubernetes가 같은 PersistentVolume에 연결된 교체 Pod를 만들어요.
-
DaemonSet: 특정 노드에 로컬인 시설을 제공하는 Pod를 정의해요. 예를 들어 그 노드의 컨테이너가 스토리지 시스템에 접근하게 하는 드라이버가 있어요. 드라이버나 다른 노드 수준 서비스가 유용한 노드에서 실행되어야 할 때 DaemonSet을 사용해요. DaemonSet의 각 Pod는 고전 Unix/POSIX 서버의 시스템 데몬과 유사한 역할을 해요. 클러스터 네트워킹 플러그인처럼 클러스터 운영에 기본이 될 수도 있고, 노드를 관리하는 데 도움을 주거나, 실행 중인 컨테이너 플랫폼을 향상시키는 덜 필수적인 시설을 제공할 수도 있어요. DaemonSet(과 그 Pod)을 클러스터의 모든 노드 또는 일부 노드(예: GPU가 설치된 노드에만 GPU 가속기 드라이버 설치)에서 실행할 수 있어요.
-
Job 및/또는 CronJob: 완료되면 종료되는 작업을 정의할 수 있어요. Job은 일회성 작업을 나타내는 반면, CronJob은 스케줄에 따라 반복돼요.