Raw Fork/Exec 작업 드라이버 구성하기
Raw Fork/Exec 작업 드라이버 구성하기
이름: raw_exec
raw_exec 드라이버는 어떤 격리(isolation) 없이 작업을 위해 명령을 실행하는 데 사용돼요. 또한 작업은 노마드 프로세스와 같은 사용자로 시작돼요. 따라서 극도로 주의해서 사용해야 하며 기본적으로 비활성화되어 있어요.
출처: 문서
본문
기능
raw_exec 드라이버는 다음 기능을 구현해요.
| Feature | Implementation | |
|---|---|---|
| nomad alloc signal | true | |
| nomad alloc exec | true | |
| filesystem isolation | none | |
| network isolation | host, group | |
| volume mounting | none |
클라이언트 요구사항
raw_exec 드라이버는 지원되는 모든 운영 체제에서 실행할 수 있어요. 보안상의 이유로 기본적으로 비활성화되어 있어요. raw exec를 활성화하려면 노마드 클라이언트 구성이 플러그인 옵션에서 raw_exec 드라이버를 명시적으로 활성화해야 해요:
plugin "raw_exec" {
config {
enabled = true
}
}
v0.9 이전 노마드 버전은 다음 클라이언트 구성을 사용해요. 이 구성은 Nomad v0.9.0에서도 지원되지만, plugin 블록을 위해 폐기(deprecated)됐어요:
client {
options = {
"driver.raw_exec.enable" = "1"
}
}
플러그인 옵션
- enabled — 드라이버를 활성화할지 비활성화할지 지정해요. 기본값은
false예요. - denied_host_uids (Optional) — 거부할 쉼표로 구분된 호스트 uid 목록을 지정해요. 범위는 두 포함 끝점을 구분하는 하이픈으로 지정할 수 있어요. 작업 구성에 "user" 값이 지정되어 있고 그 사용자의 user id가 주어진 범위 안에 있으면, 작업은 시작 전에 오류가 나요. Windows 클라이언트에서는 확인되지 않아요.
config { denied_host_uids = "0,10-15,22" } - denied_host_gids (Optional) — 거부할 쉼표로 구분된 호스트 gid 목록을 지정해요. 범위는 두 포함 끝점을 구분하는 하이픈으로 지정할 수 있어요. 작업 구성에 "user" 값이 지정되어 있고 그 사용자가 지정된 범위의 gid를 가진 그룹 중 하나에 속하면, 작업은 시작 전에 오류가 나요. Windows 클라이언트에서는 확인되지 않아요.
config { denied_host_gids = "2,4-8" } - denied_envvars (Optional) — 드라이버가 모든 작업 환경에서 제거(scrub)해야 하는 환경 변수 목록을 전달해요. 접두사나 접미사로 받아들여지는
"*"와일드카드를 사용한 글로빙을 지원해요.config { denied_envvars = ["AWS_SECRET_KEY", "*_TOKEN"] }
클라이언트 옵션
참고: 클라이언트 구성 옵션은 곧 폐기될 예정이에요. 대신 플러그인 옵션을 사용해 주세요. 자세한 내용은 plugin 블록 문서를 참고해 주세요.
- driver.raw_exec.enable — 드라이버를 활성화할지 비활성화할지 지정해요. 기본값은
false예요.
클라이언트 속성
raw_exec 드라이버는 다음 클라이언트 속성을 설정해요:
driver.raw_exec— 드라이버가 사용 가능함을 나타내도록"1"로 설정돼요.
리소스 격리
raw_exec 드라이버는 파일시스템 격리를 제공하지 않아요.
실행된 프로세스가 새 프로세스 그룹을 만들면, 애플리케이션이 신호를 제대로 전달하지 않을 경우 노마드가 종료 시 프로세스를 누출(leak)시킬 수 있어요. 프로세스 트리를 관리하는 데 cgroups를 사용하고 있다면 노마드는 프로세스를 누출시키지 않아요. cgroups는 노마드가 적절한 권한으로 실행되고 cgroup 시스템이 마운트되어 있을 때 Linux에서 사용돼요.
클러스터가 메모리 초과 할당(oversubscription)을 활성화하도록 구성되어 있다면, memory_max = -1로 설정해 raw_exec 드라이버를 사용하는 작업이 최대 메모리 제한을 갖지 않도록 구성할 수 있어요.
resources {
cpu = 500
memory = 128
memory_max = -1 # no limit
}
다음 단계
작업에서 raw_exec 드라이버를 사용해요.