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

더 알아보기 (Learn more)