Java 작업 드라이버 구성하기
Java 작업 드라이버 구성하기
이름: java
java 드라이버는 Java Jar 파일에 패키징된 Java 애플리케이션을 실행하는 데 사용돼요. 드라이버는 Jar 파일이 아티팩트 다운로더(artifact downloader)를 통해 노마드 클라이언트에서 접근 가능해야 해요.
출처: 문서
본문
기능
java 드라이버는 다음 기능을 구현해요.
| Feature | Implementation | |
|---|---|---|
| nomad alloc signal | false | |
| nomad alloc exec | false | |
| filesystem isolation | none, chroot (only for linux) | |
| network isolation | host, group | |
| volume mounting | none, all (only for linux) |
플러그인 옵션
- default_pid_mode (string: optional) — 기본값은
"private"이에요. 작업에 대해 PID 네임스페이스 격리를 기본적으로 활성화하려면"private"으로, 격리를 비활성화하려면"host"로 설정해요.⚠️
"host"로 설정하면 같은 사용자로 실행 중인 다른 프로세스가 환경 변수 같은 민감한 프로세스 정보에 접근할 수 있게 돼요. - default_ipc_mode (string: optional) — 기본값은
"private"이에요. 작업에 대해 IPC 네임스페이스 격리를 기본적으로 활성화하려면"private"으로, 격리를 비활성화하려면"host"로 설정해요.⚠️
"host"로 설정하면 같은 사용자로 실행 중인 다른 프로세스가 예상치 못한 POSIX 신호 보내기 같은 IPC 기능을 사용할 수 있게 돼요. - allow_caps — 허용되는 Linux 기능(capabilities) 목록이에요. 기본값은
이며, docker가 기본적으로 허용하는 기능(NET_RAW 제외)을 모델로 해요. 운영자가["audit_write", "chown", "dac_override", "fowner", "fsetid", "kill", "mknod", "net_bind_service", "setfcap", "setgid", "setpcap", "setuid", "sys_chroot"]cap_add와cap_drop옵션으로 작업이 획득할 수 있는 기능을 제어할 수 있게 해요. 운영 체제가 지원하는 모든 기능을 허용 목록에 넣는 단축값으로"all"값을 지원해요.⚠️ 기본 이상의 기능을 더 허용하면 신뢰할 수 없는 작업이 호스트 시스템을 손상시킬 수 있는 등 바람직하지 않은 결과를 초래할 수 있어요.
클라이언트 요구사항
java 드라이버는 Java가 설치되어 있고 시스템의 $PATH에 있어야 해요. Linux에서 노마드는 chroot와 cgroups(둘 다 root 권한이 필요함)를 사용하므로 root로 실행해야 해요. 또한 실행 중인 Jar를 가져올 수 있는 유일한 방법이므로 작업은 적어도 하나의 아티팩트 다운로드를 지정해야 해요.
클라이언트 속성
java 드라이버는 다음 클라이언트 속성을 설정해요:
driver.java— 호스트 노드에서 Java가 발견되면 1로 설정돼요. 노마드는 호스트에서java -version을 실행하고 출력을 파싱해 이를 판단해요.driver.java.version— Java 버전. 예:1.6.0_65driver.java.runtime— 런타임 버전. 예:Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716)driver.java.vm— 가상 머신 정보. 예:Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)
작업 파일에서 이 속성들을 사용하는 예시예요:
job "docs" {
# Only run this job where the JVM is higher than version 1.6.0.
constraint {
attribute = "${attr.driver.java.version}"
operator = ">"
value = "1.6.0"
}
}
리소스 격리
제공되는 리소스 격리는 클라이언트의 운영 체제와 구성에 따라 달라져요.
Linux에서 노마드는 cgroups, 네임스페이스, chroot를 사용해 프로세스의 리소스를 격리하려 해요. 노마드 에이전트가 root로 실행 중이 아니면 많은 메커니즘을 사용할 수 없어요.
기본적으로 Java Jar는 Java 가상 머신 안에서 실행되므로 최소한의 격리를 제공해요.
노마드는 필요한 컨트롤러가 모두 사용 가능할 때만 cgroup으로 리소스를 제어할 수 있어요. 필요한 cgroup이 하나라도 없으면 노마드는 cgroup이 필요한 리소스 제어를 완전히 비활성화해요. 자세한 내용은 cgroup 컨트롤러 요구사항 문서를 참고해 주세요.
Chroot
Linux에서 생성된 chroot는 호스트 머신의 다음 디렉터리의 데이터로 채워져요:
[
"/bin",
"/etc",
"/lib",
"/lib32",
"/lib64",
"/run/resolvconf",
"/sbin",
"/usr",
]
작업의 chroot는 호스트의 데이터를 chroot로 링크하거나 복사해 채워져요. 이는 상당한 디스크 공간을 차지할 수 있다는 점을 유의하세요. Nomad v0.5.3부터 클라이언트가 로컬에서 가비지 컬렉션을 관리하므로 이로 인해 생길 수 있는 문제를 완화해요.
이 목록은 에이전트 클라이언트 구성 파일에서 구성할 수 있어요.
다음 단계
작업에서 Java 작업 드라이버를 사용해요.