워크로드

워크로드 (Workloads)

Pod, 즉 Kubernetes에서 배포할 수 있는 가장 작은 컴퓨트 객체와, 그것들을 실행하는 데 도움이 되는 더 높은 수준의 추상화를 이해해 보아요.

워크로드(workload)는 Kubernetes 위에서 실행되는 애플리케이션이에요. 워크로드가 단일 컴포넌트든 함께 동작하는 여러 컴포넌트든, Kubernetes에서는 그것을 pod 집합 안에서 실행해요. Kubernetes에서 Pod는 클러스터에서 실행되는 하나 이상의 실행 중인 컨테이너 집합을 나타내요.

Kubernetes pod는 정의된 수명 주기를 가져요. 예를 들어 pod가 클러스터에서 실행되기 시작한 후, 그 pod가 실행되는 노드에 치명적인 결함이 생기면 그 노드의 모든 pod가 실패해요. Kubernetes는 그 수준의 실패를 최종적인 것으로 취급해요. 노드가 나중에 정상이 되더라도 복구하려면 새 Pod를 만들어야 해요.

하지만 인생을 훨씬 편하게 만들기 위해, 각 Pod를 직접 관리할 필요는 없어요. 대신 여러분을 대신해 pod 집합을 관리하는 워크로드 리소스를 사용할 수 있어요. 이러한 리소스는 지정한 상태와 일치하도록 올바른 수의 올바른 종류의 pod가 실행되고 있는지 확인하는 컨트롤러를 구성해요.

Kubernetes는 몇 가지 내장 워크로드 리소스를 제공해요.

  • Deployment와 ReplicaSet(레거시 리소스 ReplicationController를 대체). Deployment는 클러스터에서 무상태(stateless) 애플리케이션 워크로드를 관리하는 데 잘 맞아요. Deployment 안의 어떤 Pod든 교체 가능하고 필요하면 대체할 수 있어요.
  • StatefulSet은 어떤 방식으로든 상태를 추적하는 하나 이상의 관련 Pod를 실행하게 해 줘요. 예를 들어 워크로드가 데이터를 영구적으로 기록한다면, 각 Pod를 PersistentVolume과 매칭하는 StatefulSet을 실행할 수 있어요. StatefulSet의 Pod에서 실행되는 코드는 같은 StatefulSet의 다른 Pod로 데이터를 복제해서 전반적인 복원력을 높일 수 있어요.
  • DaemonSet은 노드에 로컬인 기능을 제공하는 Pod를 정의해요. DaemonSet의 스펙과 일치하는 노드를 클러스터에 추가할 때마다 컨트롤 플레인이 해당 DaemonSet의 Pod를 새 노드에 스케줄링해요. DaemonSet의 각 pod는 고전적인 Unix/POSIX 서버의 시스템 데몬과 비슷한 작업을 수행해요. DaemonSet은 클러스터 네트워킹을 실행하는 플러그인처럼 클러스터 운영의 기본일 수도 있고, 노드 관리에 도움이 될 수도 있으며, 실행 중인 컨테이너 플랫폼을 향상시키는 선택적 동작을 제공할 수도 있어요.
  • Job과 CronJob은 실행을 완료하고 멈추는 작업을 정의하는 다양한 방법을 제공해요. Job을 사용해 한 번 실행되고 완료되는 작업을 정의할 수 있어요. CronJob을 사용해 스케줄에 따라 같은 Job을 여러 번 실행할 수 있어요.

더 넓은 Kubernetes 생태계에서는 추가 동작을 제공하는 타사 워크로드 리소스를 찾을 수 있어요. 커스텀 리소스 정의를 사용하면 Kubernetes 코어에 없는 특정 동작을 원할 때 타사 워크로드 리소스를 추가할 수 있어요. 예를 들어 애플리케이션을 위한 Pod 그룹을 실행하되, 모든 Pod가 사용 가능할 때까지 작업을 멈추고 싶다면(아마 고성능 분산 작업을 위해) 직접 구현할 수 있어요.