작업에서 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"
}
}
}