작업에서 Isolated Fork/Exec 태스크 드라이버 사용하기

작업에서 Isolated Fork/Exec 태스크 드라이버 사용하기 (Use the Isolated Fork/Exec task driver in a job)

이름: exec

exec 드라이버는 태스크에 특정 명령을 실행하는 데 사용돼요. 하지만 raw_exec와 달리 운영체제의 기본 격리 프리미티브를 사용해 태스크의 리소스 접근을 제한해요. 단순하지만 exec 드라이버는 어떤 명령도 호출할 수 있으므로, 더 높은 수준의 기능을 제공하는 스크립트나 다른 래퍼를 호출하는 데 사용할 수 있어요.

기능, 클라이언트 요구 사항, 플러그인 구성은 Isolated Fork/Exec 태스크 드라이버 구성을 참조하세요.

출처: 문서

본문

작업 구성 (Task Configuration)

task "webservice" {
  driver = "exec"

  config {
    command = "my-binary"
    args    = ["-flag", "1"]
  }
}

exec 드라이버는 작업 명세에서 다음 구성을 지원해요:

  • command — 실행할 명령. 반드시 제공해야 해요. 호스트에 존재하는 바이너리를 실행한다면 경로는 절대 경로여야 하며, 태스크의 chroot 안이나 volume_mount 블록으로 마운트된 호스트 볼륨 안에 있어야 해요. 드라이버는 바이너리를 실행 가능하게 만들고 다음 순서로 검색해요:
    • 태스크 디렉토리의 local 디렉토리
    • 태스크 디렉토리
    • 작업 명세에 나열된 순서대로 마운트들
    • 태스크 디렉토리 안의 usr/local/bin, usr/bin, bin 디렉토리

artifact에서 다운로드한 바이너리를 실행한다면, 경로는 할당의 루트 디렉토리에서 상대 경로일 수 있어요.

  • args — (선택) command에 대한 인수 목록. 환경 변수 또는 해석 가능한 Nomad 변수에 대한 참조는 태스크 실행 전에 해석돼요.

  • pid_mode — (선택) 이 태스크에 대해 PID 네임스페이스 격리를 활성화하려면 "private"로, 격리를 비활성화하려면 "host"로 설정해요. 설정하지 않으면 플러그인 구성의 default_pid_mode에서 동작이 결정돼요.

경고: "host"로 설정하면 같은 사용자로 실행 중인 다른 프로세스가 환경 변수 같은 민감한 프로세스 정보에 접근할 수 있게 돼요.

  • ipc_mode — (선택) 이 태스크에 대해 IPC 네임스페이스 격리를 활성화하려면 "private"로, 격리를 비활성화하려면 "host"로 설정해요. 설정하지 않으면 플러그인 구성의 default_ipc_mode에서 동작이 결정돼요.

경고: "host"로 설정하면 같은 사용자로 실행 중인 다른 프로세스가 예상치 못한 POSIX 신호 전송 같은 IPC 기능을 사용할 수 있게 돼요.

  • cap_add — (선택) 태스크에 대해 활성화할 Linux capability 목록. 유효 capability(cap_add와 cap_drop에서 계산)는 allow_caps로 구성된 허용 capability의 부분 집합이어야 해요. 드라이버 구성의 allow_caps 필드가 모든 capability를 허용하지 않는다면 여기서 "all"은 허용되지 않는다는 점에 유의하세요.
config {
  cap_add = ["net_raw", "sys_time"]
}
  • cap_drop — (선택) 태스크에 대해 비활성화할 Linux capability 목록. 유효 capability(cap_add와 cap_drop에서 계산)는 allow_caps로 구성된 허용 capability의 부분 집합이어야 해요.
config {
  cap_drop = ["all"]
  cap_add  = ["chown", "sys_chroot", "mknod"]
}
  • work_dir — (선택) 태스크에 대한 사용자 지정 작업 디렉토리를 설정해요. 이 경로는 절대 경로여야 하며 태스크의 chroot 안이나 volume_mount 블록으로 마운트된 호스트 볼륨 안에 있어야 해요. nomad alloc exec를 사용할 때도 작업 디렉토리가 바뀌어요.

예제 (Examples)

노드에 존재하는 바이너리를 실행하려면:

task "example" {
  driver = "exec"

  config {
    # When running a binary that exists on the host, the path must be absolute.
    command = "/bin/sleep"
    args    = ["1"]
  }
}

artifact에서 다운로드한 바이너리를 실행하려면:

task "example" {
  driver = "exec"

  config {
    command = "name-of-my-binary"
  }

  artifact {
    source = "https://internal.file.server/name-of-my-binary"
    options {
      checksum = "sha256:abd123445ds4555555555"
    }
  }
}

더 알아보기 (Learn more)