작업에서 Java 태스크 드라이버 사용하기
작업에서 Java 태스크 드라이버 사용하기 (Use the Java task driver in a job)
이름: java
java 드라이버는 Java Jar 파일로 패키징된 Java 애플리케이션을 실행하는 데 사용돼요. 드라이버는 Jar 파일이 artifact 다운로더를 통해 Nomad 클라이언트에서 접근 가능해야 해요.
기능, 클라이언트 요구 사항, 플러그인 구성은 Java 태스크 드라이버 구성을 참조하세요.
출처: 문서
본문
작업 구성 (Task Configuration)
task "webservice" {
driver = "java"
config {
jar_path = "local/example.jar"
jvm_options = ["-Xmx2048m", "-Xms256m"]
}
}
java 드라이버는 작업 명세에서 다음 구성을 지원해요:
-
class— (선택) 실행할 클래스 이름.jar_path가 지정되고 매니페스트가 메인 클래스를 지정한다면 선택 사항이에요. Jar 대신 클래스를 제공한다면 실행할 클래스와class_path를 지정해 주세요. -
class_path— (선택)class_path는 Java가 클래스와 Jar를 조회하는 데 사용하는 클래스 경로를 지정해요. -
jar_path— (선택) 다운로드된 Jar의 경로. 대부분의 경우 이는 그냥 Jar의 이름이에요. 하지만 제공된 아티팩트가 Jar를 하위 폴더에 포함하는 아카이브라면 경로는 상대 경로(subdir/from_archive/my.jar)여야 해요. -
args— (선택) Jar의 메인 메서드에 대한 인수 목록. 환경 변수 또는 해석 가능한 Nomad 변수에 대한 참조는 태스크 실행 전에 해석돼요. -
jvm_options— (선택) java를 호출할 때 전달할 JVM 옵션 목록. 이 옵션들은 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)
Java Jar를 실행하는 간단한 config 블록:
task "web" {
driver = "java"
config {
jar_path = "local/hello.jar"
jvm_options = ["-Xmx2048m", "-Xms256m"]
}
# Specifying an artifact is required with the "java" driver. This is the
# mechanism to ship the Jar to be run.
artifact {
source = "https://internal.file.server/hello.jar"
options {
checksum = "md5:123445555555555"
}
}
}
Java 클래스를 실행하는 간단한 config 블록:
task "web" {
driver = "java"
config {
class = "Hello"
class_path = "${NOMAD_TASK_DIR}"
jvm_options = ["-Xmx2048m", "-Xms256m"]
}
# Specifying an artifact is required with the "java" driver. This is the
# mechanism to ship the Jar to be run.
artifact {
source = "https://internal.file.server/Hello.class"
options {
checksum = "md5:123445555555555"
}
}
}