런타임 환경 설정
런타임 환경 설정
Nomad job 사양의 런타임 환경 설정에 대한 참조 정보를 제공해요. 작업 식별자, CPU와 메모리 리소스, IP 주소, 작업 디렉터리, 호스트 변수에 대해 알아보아요.
출처: 문서
본문
소개 (Introduction)
job 사양에서 지정한 일부 설정은 작업이 시작될 때 작업에 전달돼요. 다른 설정은 job이 스케줄링될 때 동적으로 할당돼요. 두 종류의 값 모두 환경 변수를 통해 job에 제공돼요.
변수 요약 (Variables Summary)
Job 관련 변수 (Job-related variables)
| 변수 | 설명 |
|---|---|
NOMAD_ALLOC_DIR |
공유 alloc/ 디렉터리 경로. 런타임 작업 디렉터리 문서 참고. |
NOMAD_TASK_DIR |
작업 local/ 디렉터리 경로. 런타임 작업 디렉터리 문서 참고. |
NOMAD_SECRETS_DIR |
작업의 secrets/ 디렉터리 경로. 런타임 작업 디렉터리 문서 참고. |
NOMAD_MEMORY_LIMIT |
작업의 메모리 한도(MB) |
NOMAD_MEMORY_MAX_LIMIT |
클라이언트에 여유 메모리 용량이 있을 때 작업이 사용할 수 있는 최대 메모리 한도(MB). 작업이 메모리 오버서브스크립션으로 구성되지 않았다면 생략됨. |
NOMAD_CPU_LIMIT |
작업의 CPU 한도(MHz) |
NOMAD_CPU_CORES |
cpuset 리스트 표기로 작업에 예약된 특정 CPU 코어. 작업이 CPU 코어를 요청하지 않으면 생략됨. 예: 0-2,7,12-14 |
NOMAD_ALLOC_ID |
작업의 할당 ID |
NOMAD_SHORT_ALLOC_ID |
작업 할당 ID의 처음 8자 |
NOMAD_ALLOC_NAME |
작업의 할당 이름. job 이름, task group 이름, 할당 인덱스에서 파생됨. |
NOMAD_ALLOC_INDEX |
할당 인덱스. task group 인스턴스를 구분하는 데 유용함. 0부터 (count - 1)까지. 시스템 job과 sysbatch job의 경우 이 값은 항상 0임. 인덱스는 일반적으로 job의 특정 버전 내에서 고유하지만, 배포의 canary나 실패한 작업이 인덱스를 재사용할 수 있음. Nomad는 이 인덱스의 고유성을 보장할 수 없으므로, 상태 저장 리소스의 잠금 대신 사용하면 안 됨. |
NOMAD_TASK_NAME |
작업 이름 |
NOMAD_GROUP_NAME |
그룹 이름 |
NOMAD_JOB_ID |
job의 ID. 명령줄 도구로 제출할 때는 job 이름과 같지만 API를 사용할 때는 다를 수 있음 |
NOMAD_JOB_NAME |
job 이름 |
NOMAD_JOB_PARENT_ID |
job에 부모가 있다면 그 부모 job의 ID |
NOMAD_DC |
할당이 실행 중인 데이터센터 |
NOMAD_PARENT_CGROUP |
작업 cgroup을 담는 부모 cgroup(Linux 전용) |
NOMAD_NAMESPACE |
할당이 실행 중인 네임스페이스 |
NOMAD_REGION |
할당이 실행 중인 리전 |
NOMAD_UNIX_ADDR |
task API의 unix 소켓과 함께 nomad CLI를 사용할 때 NOMAD_ADDR 값으로 사용할 값. "unix://${NOMAD_SECRETS_DIR}/api.sock"와 동등함 |
NOMAD_META_<key> |
작업의 메타데이터에서 key로 주어진 메타데이터 값. [A-Za-z0-9_.]가 아닌 키의 모든 문자는 _로 변환됨. 참고: 이는 노드 메타데이터의 키인 ${meta.<key>}와 다름. |
CONSUL_HTTP_TOKEN |
작업의 Consul 토큰. Consul 통합 문서 참고. |
CONSUL_TOKEN |
작업의 Consul 토큰. Consul 통합 문서 참고. 이 변수는 더 이상 사용되지 않으며 호환성 목적으로만 존재함. |
VAULT_TOKEN |
작업의 Vault 토큰. Vault 통합 문서 참고 |
네트워크 관련 변수 (Network-related Variables)
| 변수 | 설명 |
|---|---|
NOMAD_IP_<label> |
주어진 포트 label에 대한 호스트 IP. network 블록 문서 참고. |
NOMAD_PORT_<label> |
주어진 포트 label에 대한 포트. 포트 맵이 사용될 때 드라이버 지정 포트, 그 외에는 호스트의 정적 또는 동적 포트 할당. 서비스는 이 포트에 바인딩해야 함. network 블록 문서 참고. |
NOMAD_ADDR_<label> |
주어진 포트 label에 대한 호스트 IP:Port 쌍. |
NOMAD_ALLOC_INTERFACE_<label> |
bridged 또는 CNI 네트워킹을 사용할 때 주어진 포트 label에 대한 구성된 네트워크 네임스페이스 인터페이스. |
NOMAD_ALLOC_IP_<label> |
bridged 또는 CNI 네트워킹을 사용할 때 주어진 포트 label에 대한 구성된 네트워크 네임스페이스 IP. |
NOMAD_ALLOC_ADDR_<label> |
bridged 또는 CNI 네트워킹을 사용할 때 주어진 포트 label에 대한 구성된 네트워크 네임스페이스 IP:Port 쌍. |
NOMAD_HOST_PORT_<label> |
포트 label에 대한 호스트의 포트. network 블록 문서의 Mapped Ports 섹션 참고. |
NOMAD_UPSTREAM_IP_<service> |
Consul 서비스 메시 업스트림으로 정의될 때 주어진 service에 대한 IP. |
NOMAD_UPSTREAM_PORT_<service> |
Consul 서비스 메시 업스트림으로 정의될 때 주어진 service에 대한 포트. |
NOMAD_UPSTREAM_ADDR_<service> |
Consul 서비스 메시 업스트림으로 정의될 때 주어진 service에 대한 호스트 IP:Port. |
NOMAD_ENVOY_ADMIN_ADDR_<service> |
Consul 서비스 메시로 활성화된 서비스로 정의될 때 주어진 service의 envoy 사이드카 관리 포트에 대한 로컬 주소 127.0.0.2:Port. 호스트 네트워킹으로 구성되지 않았다면 Envoy는 그룹 네트워크 네임스페이스 안에서 실행됨. |
NOMAD_ENVOY_READY_ADDR_<service> |
Consul 서비스 메시로 활성화된 서비스로 정의될 때 주어진 service의 envoy 사이드카 ready 포트에 대한 로컬 주소 127.0.0.1:Port. 호스트 네트워킹으로 구성되지 않았다면 Envoy는 그룹 네트워크 네임스페이스 안에서 실행됨. |
참고
Nomad는 NOMAD_ADDR_<task>_<label> 같은 환경 변수 이름을 생성할 때 포트 라벨이나 작업 이름에서 영숫자도 밑줄도 아닌 문자를 밑줄로 바꿔요.
Consul 관련 변수 (Consul-related Variables)
참고
이 변수들은 Consul 서비스 메시 네이티브 작업에만 설정돼요.
| 변수 | 설명 |
|---|---|
CONSUL_HTTP_ADDR |
로컬 Consul agent의 주소를 지정함. bridge 네트워킹 모드에서는 unix 도메인 소켓으로, 호스트 네트워킹 모드에서는 TCP 주소로 자동 설정됨. |
CONSUL_HTTP_TOKEN |
Consul에 권한 부여하는 데 사용되는 Consul ACL 토큰을 지정함. Consul ACL이 활성화되면 서비스 인스턴스에 특정한 생성된 Consul 서비스 ID 토큰으로 자동 설정됨. |
CONSUL_HTTP_SSL |
Consul과 통신할 때 HTTPS를 사용해야 하는지 지정함. Nomad가 TLS로 Consul과 통신하도록 구성되면 true로 자동 설정됨. |
CONSUL_HTTP_SSL_VERIFY |
Consul과의 HTTPS 연결을 상호 검증해야 하는지 지정함. Nomad가 TLS 인증서를 검증하도록 구성되면 true로 자동 설정됨. |
CONSUL_CACERT |
Consul 통신에 사용되는 CA 인증서 경로를 지정함. Nomad가 consul.share_ssl 옵션으로 구성되면 자동 설정됨. |
CONSUL_CLIENT_CERT |
Consul 통신에 사용되는 Client 인증서 경로를 지정함. Nomad가 consul.share_ssl 옵션으로 구성되면 자동 설정됨. |
CONSUL_CLIENT_KEY |
Consul 통신에 사용되는 Client Key 인증서 경로를 지정함. Nomad가 consul.share_ssl 옵션으로 구성되면 자동 설정됨. |
CONSUL_TLS_SERVER_NAME |
Consul 통신의 SNI 호스트로 사용할 서버 이름을 지정함. Consul이 TLS를 사용하도록 구성되고 작업이 bridge 네트워킹 모드를 사용하는 그룹에 있으면 자동 설정됨. |
작업 식별자 (Task Identifiers)
Nomad는 할당 ID와 이름, 할당을 만든 배포 ID, job ID와 이름, 부모 job ID, 그리고 작업 및 그룹 이름을 전달해요. 이들은 NOMAD_ALLOC_ID, NOMAD_ALLOC_NAME, NOMAD_ALLOC_INDEX, NOMAD_JOB_NAME, NOMAD_JOB_ID, NOMAD_JOB_PARENT_ID, NOMAD_GROUP_NAME, NOMAD_TASK_NAME으로 주어져요. 할당 ID와 인덱스는 실행 중인 작업이 고유 식별자를 필요로 하거나 자신의 인스턴스 수를 알아야 할 때 유용해요.
리소스 (Resources)
job에 리소스를 요청하면 Nomad는 리소스 제안(resource offer)을 만들어요. job의 최종 리소스는 스케줄링될 때까지 결정되지 않아요. Nomad는 평가와 배치 후 할당된 리소스를 알려줘요.
CPU와 메모리 (CPU and Memory)
Nomad는 CPU와 메모리 한도를 NOMAD_CPU_LIMIT, NOMAD_MEMORY_LIMIT, NOMAD_MEMORY_MAX_LIMIT로 job에 전달해요. 작업은 이 값들을 사용해 Nomad가 제공하는 리소스 할당 안에 들어맞도록 동작을 조정해야 해요. 예를 들어 메모리 한도를 사용해 프로세스 내 캐시 크기를 결정하거나 버퍼를 언제 디스크로 플러시할지 결정할 수 있어요.
CPU와 메모리는 모두 정수로 표시돼요. CPU 한도의 단위는 1024 = 1GHz예요. 메모리의 단위는 1 = 1메가바이트예요.
애플리케이션이 런타임에 이러한 값에 맞춰 조정하도록 작성하면, 코드를 변경하지 않고 job 사양의 리소스 할당을 조정할 수 있으므로 스케줄링 유연성이 커져요. 또한 동적 리소스 할당을 받아들여 클러스터가 바빠지거나 한가해짐에 따라 확장하거나 축소할 수 있는 워크로드를 스케줄링할 수도 있어요.
네트워킹 (Networking)
Nomad는 job에 IP 주소와 포트를 할당하고 환경 변수로 노출해요. 자세한 내용은 Networking 페이지를 참고하세요.
작업 디렉터리 (Task Directories)
Nomad는 클라이언트의 각 할당에 대한 작업 디렉터리를 만들어요. 할당 작업 디렉터리에는 할당 안의 각 작업에 대한 작업 디렉터리가 포함돼요.
Nomad는 작업 디렉터리 기준으로 다음 디렉터리를 작업에 제공해요.
alloc/: 이 디렉터리는 task group의 모든 작업에 공유되며 로그 전송기 같은 여러 작업이 사용해야 하는 데이터를 저장하는 데 사용할 수 있어요.local/: 이 디렉터리는 각 작업에 비공개예요. task group의 작업들이 공유해서는 안 되는 임의 데이터를 저장하는 데 사용할 수 있어요.secrets/: 이 디렉터리는 각 작업에 비공개이며nomad alloc fs명령이나 파일시스템 API로 접근할 수 없어요. 가능한 경우 메모리 내 파일시스템으로 뒷받침되고noexec로 마운트돼요. 작업 밖에서 보이면 안 되는 비밀 데이터를 저장하는 데 사용할 수 있어요.
이 디렉터리들은 task group의 모든 작업이 종료 상태에 들어간 후 몇 시간에 해당하는 시점인, 할당이 제거될 때까지 유지돼요. 이는 작업이 생성한 데이터를 볼 시간을 주기 위해서예요.
대상 드라이버와 운영 체제에 따라 이 디렉터리들은 다양한 방식으로 제공돼요. 예를 들어 docker에서는 디렉터리가 컨테이너에 바인딩되지만, Linux의 exec에서는 작업 디렉터리에 chroot가 만들어지고 디렉터리들이 그 chroot에 마운트돼요. 디렉터리가 제공되는 방식과 관계없이 디렉터리 경로는 NOMAD_ALLOC_DIR, NOMAD_TASK_DIR, NOMAD_SECRETS_DIR 환경 변수로 읽을 수 있어요.
작업 디렉터리에 대한 자세한 내용은 Filesystem internals를 참고하세요.
임의 구성을 위한 Meta 블록 (Meta block for arbitrary configuration)
job 사양은 작업에 임의 구성을 제공하는 meta 블록을 지정할 수도 있게 해줘요. 이를 통해 여러 job에서 같은 실행 단위를 사용하더라도 job별 구성을 쉽게 제공할 수 있어요. 이러한 키-값 쌍은 NOMAD_META_<key>=<value> 환경 변수로 job에 전달돼요. [A-Za-z0-9_.]가 아닌 키의 모든 문자는 _로 변환돼요. 원래 대소문자와 대문자 버전 둘 다 주입돼요. 대문자 버전은 향후 릴리스에서 더 이상 사용되지 않을 예정이에요.
현재 meta 키가 소문자여야 한다는 강제는 없지만, 같은 대문자 표현을 가진 여러 키를 사용하면 정의되지 않은 동작이 발생해요.
호스트 환경 변수 (Host environment variables)
Nomad는 exec, raw_exec, java 작업 드라이버를 사용할 때 클라이언트 호스트에 정의된 환경 변수를 작업에 전달해요. Nomad는 또한 user 매개변수가 설정된 작업의 HOME, USER, LOGNAME 변수를 설정된 사용자 이름을 반영하도록 수정해요. 작업에 전달되는 변수는 클라이언트 구성 env.denylist로 제어할 수 있어요.
더 알아보기 (Learn more)
- 런타임 변수 보간(runtime variable interpolation) 가이드를 확인해 보세요.