상태 유지 배포

상태 유지 배포 (Stateful Deployments)

참고 — 상태 유지 배포는 동적 호스트 볼륨(dynamic host volumes)만 지원해요. CSI 볼륨의 경우 비슷한 목적을 제공하는 per_alloc 속성을 사용하세요.

출처: 문서

본문

Nomad 상태 유지 배포를 사용하면 작업을 호스트 볼륨에 효과적으로 바인딩할 수 있어요. 낮은 수준에서 보면 이것은 Nomad의 워크로드 배치 기본 단위인 할당(allocation)을 이용해, 할당이 볼륨 ID에 고정(sticky)되도록 만드는 것을 가능하게 하는 거예요. 상태 유지 배포는 동적 호스트 볼륨만 지원하므로, 효과적으로 사용하려면 작업을 특정 노드에 바인딩하는 것을 의미해요.

상태 유지 배포는 태스크 그룹(task group) 단위로 동작해요. 작업 스펙에서 volume.sticky 매개변수를 사용해 각 태스크 그룹이 고정 호스트 볼륨을 요구한다는 것을 나타내요.

이 예시는 볼륨의 sticky 매개변수를 true로 설정해요.

job "app" {
  group "example" {
    # ...
    volume "example" {
      type      = "host"
      source    = "ca-certificates"
      read_only = true
      sticky    = true
    }
    # ...
  }
}

볼륨을 sticky로 설정하면 배포 중에 스케줄러가 그 볼륨의 ID를 사용하는 태스크 그룹과 연관시켜요. 상태 유지 배포는 해당 태스크 그룹에 속한 모든 할당이 이 볼륨 ID를 사용할 수 있는 노드에 배치되거나 교체되어야 한다는 것을 요구해요.

sticky 볼륨이 있는 작업을 확장(scaling up)하면 태스크 그룹이 더 많은 볼륨 ID를 차지하게 되지만, 축소(scaling down)해도 사용하지 않는 볼륨이 삭제되거나 볼륨에 있는 데이터가 변경되지는 않아요.

스케줄러가 올바른 볼륨 ID가 있는 노드를 찾을 수 없으면(예: 노드가 다운되었거나 연결이 끊긴 경우) Nomad는 차단 평가(blocked evaluation)를 생성해요.

태스크 그룹 호스트 볼륨 클레임 (Task group host volume claims)

Nomad는 상태 저장소(state store)를 사용해 호스트 볼륨 ID와 해당 태스크 그룹, 그리고 작업 ID, 볼륨 이름, 네임스페이스의 연관 관계를 저장해요. API를 사용해 이러한 연관 관계를 나열하고 삭제할 수 있어요. 태스크 그룹 호스트 볼륨 클레임을 삭제하면, 이전 볼륨 ID를 사용할 수 없고 일치하는 이름의 다른 실현 가능한 호스트 볼륨이 있다고 가정하고 Nomad가 태스크 그룹에 다른 볼륨 ID를 할당해요. 하지만 배치 후 Nomad는 다시 클레임을 상태 저장소에 기록해요. 클레임 삭제는 운영상의 비상 상황이나 노드 문제를 디버깅할 때만 사용해야 해요. 예를 들어 상태 유지 배포가 있는 노드를 드레인(drain)하고 싶지만 작업을 중지하고 싶지 않을 때 클레임 삭제를 사용해요.

상태 유지 워크로드와 볼륨에 대한 자세한 내용은 다음 Nomad 페이지를 참고해요.

  • Considerations for Stateful Workloads — Nomad에서 실행되는 워크로드의 영구 스토리지 옵션을 살펴봐요.
  • Nomad 볼륨 스펙 — 볼륨 생성과 등록을 위한 스키마를 정의해요.
  • 작업 스펙의 volume 블록 — 클러스터에서 특정 볼륨을 요구하는 그룹을 구성할 수 있게 해줘요.
  • Stateful Workloads 가이드 — 영구 스토리지에 대한 접근이 필요한 작업을 실행하는 기법을 살펴봐요.

더 알아보기 (Learn more)