server_join 구성 블록
server_join 구성 블록 (Server Join Configuration Block)
이 페이지는 Amazon, Microsoft, Google 클라우드 및 온프레미스에서 Nomad 에이전트가 Nomad 서버를 발견하고 연결하는 방법을 구성하는 방법에 대한 참조 정보를 제공해요. server_join 블록을 사용해 조인할 서버 목록, 재시도 간격, 최대 재조인 시도 횟수를 구성해요.
출처: 문서
본문
server_join {
retry_join = [ "1.1.1.1", "2.2.2.2" ]
retry_max = 3
retry_interval = "15s"
}
server_join 매개변수 (Parameters)
-
retry_join(array<string>: [])— 클러스터 멤버로 조인되는 Nomad 서버 주소와 Cloud Auto-join 구성의 목록을 지정해요. start_join과 유사하지만 조인 시도는 retry_max 횟수까지 재시도돼요. 또한 retry_join은 Nomad 서버와 클라이언트 모두에서 사용할 수 있지만, start_join은 Nomad 서버에만 정의돼요. 이것은 주소가 결국 사용 가능해질 것임을 알 때 유용해요. 배열과 함께 retry_join을 start_join의 대체로 사용하고, 두 옵션을 함께 사용하지 마세요. 서버 주소는 서버 주소 형식을 따라야 해요.server_join { retry_join = [ "1.1.1.1", "2.2.2.2" ] }Auto-join 구성은 Cloud Auto-join 형식을 따라야 해요. go-discover를 사용해 AWS EC2 클러스터에 조인하는 Cloud Auto-join:
server_join { retry_join = [ "provider=aws tag_key=..." ] }go-netaddrs를 사용해 hcloud CLI로
nomad-server=true라는 라벨이 붙은 Hetzner 서버 클러스터에 조인하는 Cloud Auto-join:server_join { retry_join = [ "exec=hcloud server list -o noheader -o columns=ipv4 -l nomad-server=true | tr '\n' ' '" ] }서버 주소와 Cloud Auto-join 구성을 함께 사용할 수 있어요. 서버 주소와 Cloud Auto-join 구성을 모두 포함하는 혼합 구성:
server_join { retry_join = [ "1.1.1.1", "provider=aws tag_key=..." ] }예상되는 서버 주소 형식에 대한 자세한 내용은 서버 주소 형식, 예상되는 Cloud Auto-join 형식에 대해서는 Cloud Auto-join을 참고해요.
-
retry_interval(string: "30s")— 재시도 조인 시도 사이에 기다리는 시간을 지정해요. -
retry_max(int: 0)— 반환 코드 1로 종료하기 전에 수행할 최대 조인 시도 횟수를 지정해요. 기본적으로 0으로 설정되며, 이는 무한 재시도로 해석돼요. -
start_join(array<string>: [])— 시작 시 조인할 서버 주소 목록을 지정해요. Nomad가 지정된 주소 중 어느 것과도 조인할 수 없으면 에이전트 시작이 실패해요. 문자열 형식에 대한 자세한 내용은 서버 주소 형식 섹션을 참고해요. 이 필드는 Nomad 서버에만 정의되며, 클라이언트 구성에 포함하면 구성 파싱 오류가 발생해요.
서버 주소 형식 (Server Address Format)
이 섹션은 Nomad 서버의 위치를 설명하는 데 허용되는 구문과 형식을 설명해요. IP 주소로 직접 참조하거나 DNS로 해석하는 등 Nomad 서버를 참조하는 방법은 여러 가지가 있어요.
IP 주소로 직접 (Directly via IP Address)
다른 Nomad 서버를 IP 주소로 지정할 수 있어요. 이는 ip:port 형식으로 수행돼요. 예:
1.2.3.4:5678
IP 주소가 IPv6 주소라면 대괄호로 둘러싼 URL 형식이어야 해요. 예:
[2001:db8::1]:5678
포트 옵션을 생략하면 기본값은 Serf 포트(다르게 구성하지 않는 한 4648)예요:
1.2.3.4 => 1.2.3.4:4648
도메인 또는 DNS로 (Via Domains or DNS)
다른 Nomad 서버를 DNS 주소로 지정할 수 있어요. 이는 address:port 형식으로 수행돼요. 예:
nomad-01.company.local:5678
포트 옵션을 생략하면 기본값은 Serf 포트(다르게 구성하지 않는 한 4648)예요:
nomad-01.company.local => nomad-01.company.local:4648
go-discover 인터페이스로 (Via the go-discover interface)
retry_join은 클라우드 제공자 메타데이터를 사용해 자동화된 클러스터 조인을 수행하기 위해 go-discover 라이브러리를 사용하는 통합 인터페이스를 허용해요. 자세한 내용은 Cloud Auto-join을 참고해요.
"provider=aws tag_key=..." => 1.2.3.4:4648
Cloud Auto-join
retry_join의 Cloud Auto-join을 사용하면 Nomad가 클라우드 제공자 메타데이터를 사용해 클러스터 서버 주소를 자동으로 발견할 수 있어요. Cloud Auto-join은 go-discover와 go-netaddrs 형식을 모두 허용해요.
provider= 접두사가 붙은 구성은 go-discover를 사용하고, exec= 접두사가 붙은 구성은 go-netaddrs를 사용해요. go-discover가 지원하지 않는 클라우드 제공자의 경우 go-netaddrs를 사용해요.
go-discover 구성 (go-discover Configurations)
go-discover 구성은 provider= 접두사로 시작해요.
다음 섹션들은 지원되는 클라우드 제공자의 일부에 특정한 Cloud Auto-join retry_join 옵션을 설명해요. 모든 제공자에 대한 정보는 go-discover의 추가 문서를 참고해요.
Amazon EC2
이것은 주어진 리전에서 주어진 tag_key와 tag_value를 가진 모든 서버의 첫 번째 개인 IP 주소를 반환해요.
{
"retry_join": ["provider=aws tag_key=... tag_value=..."]
}
provider(필수) — 제공자의 이름 (여기서는 "aws").tag_key(필수) — 자동 조인할 태그의 키.tag_value(필수) — 자동 조인할 태그의 값.region(선택) — 인증할 AWS 리전.addr_type(선택) — 발견할 주소의 유형:private_v4,public_v4,public_v6. 기본값은private_v4예요. (>= 1.0)access_key_id(선택) — 인증용 AWS 액세스 키. 아래의 Authentication and Precedence 섹션을 참고해요.secret_access_key(선택) — 인증용 AWS 시크릿 액세스 키. 아래의 Authentication and Precedence 섹션을 참고해요.
인증 및 우선순위 (Authentication and Precedence)
- 정적 자격 증명
access_key_id=... secret_access_key=... - 환경 변수 (
AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY) - 공유 자격 증명 파일 (
~/.aws/credentials또는 AWS_SHARED_CREDENTIALS_FILE이 지정한 경로) - ECS 태스크 역할 메타데이터 (컨테이너 특정).
- EC2 인스턴스 역할 메타데이터. 유일하게 필요한 IAM 권한은
ec2:DescribeInstances이며, 자동 조인에만 사용되는 전용 키를 만드는 것을 권장해요. 리전을 생략하면 로컬 인스턴스의 EC2 메타데이터 엔드포인트를 통해 발견돼요.
Microsoft Azure
이것은 주어진 테넌트와 구독에서 주어진 tag_key와 tag_value를 가진 모든 서버의 첫 번째 개인 IP 주소를 반환하거나, Virtual Machine Scale Sets의 vm_scale_set의 주어진 resource_group에서 그렇게 해요. 태그를 사용한다면 tag_key와 tag_value는 가상 머신 리소스 자체가 아니라 서버에 연결된 네트워크 인터페이스 리소스에 설정되어야 해요.
{
"retry_join": [
"provider=azure tag_name=... tag_value=... tenant_id=... client_id=... subscription_id=... secret_access_key=..."
]
}
provider(필수) — 제공자의 이름 (여기서는 "azure").tenant_id(필수) — 머신을 조인할 테넌트.client_id(필수) — 인증할 클라이언트.subscription_id(필수) — Azure 구독 ID.secret_access_key(필수) — 시크릿 클라이언트 키.
태그를 사용할 때 다음 구성 매개변수를 사용해요:
tag_name— 자동 조인할 태그의 이름.tag_value— 자동 조인할 태그의 값.
Virtual Machine Scale Sets을 사용할 때 다음 구성 매개변수를 사용해요 (Consul 1.0.3 이상):
resource_group— 필터링할 리소스 그룹의 이름.vm_scale_set— 필터링할 가상 머신 스케일 세트의 이름.
태그를 사용할 때 유일하게 필요한 권한은 NetworkInterfaces의 ListAll 메서드예요. Virtual Machine Scale Sets을 사용할 때 유일하게 필요한 역할 동작은 Microsoft.Compute/virtualMachineScaleSets/*/read예요.
참고 — Nomad 클러스터가 Azure에서 호스팅되는 경우 Nomad는 환경 변수, 공유 클라이언트 ID·시크릿 대신 Managed Service Identities (MSI)를 사용해 Azure에 접근할 수 있어요. MSI는 Nomad를 호스팅하는 VM 또는 Virtual Machine Scale Sets에서 활성화되어야 해요. MSI는 Azure 자격 증명이 Nomad 구성에 저장되지 않도록 하므로 선호되는 구성이에요. MSI를 사용할 때는 Virtual machines에 대해 tag_name, tag_value, subscription_id를 제공해야 해요. VM이 MSI 권한을 감지하는 데 Azure가 걸리는 시간은 1분에서 1시간 사이일 수 있다는 점을 유의하세요.
Google Compute Engine
이것은 주어진 프로젝트에서 주어진 tag_value를 가진 모든 서버의 첫 번째 개인 IP 주소를 반환해요.
{
"retry_join": ["provider=gce project_name=... tag_value=..."]
}
provider(필수) — 제공자의 이름 (여기서는 "gce").tag_value(필수) — 자동 조인할 태그의 값.project_name(선택) — 자동 조인할 프로젝트의 이름. 설정하지 않으면 발견돼요.zone_pattern(선택) — RE2 호환 정규 표현식으로 존 목록을 제한할 수 있어요. 생략하면 모든 존의 서버가 반환돼요.credentials_file(선택) — 인증용 자격 증명 파일. 자세한 내용은 아래의 Authentication and Precedence 섹션을 참고해요.
인증 및 우선순위 (Authentication and Precedence)
- 제공되면 credentials_file의 자격 증명을 사용해요.
- GOOGLE_APPLICATION_CREDENTIALS 환경 변수의 JSON 파일을 사용해요.
- gcloud 커맨드라인 도구가 알 수 있는 위치의 JSON 파일을 사용해요.
- Windows에서는
%APPDATA%/gcloud/application_default_credentials.json. - 다른 시스템에서는
$HOME/.config/gcloud/application_default_credentials.json.
- Windows에서는
- Google Compute Engine에서는 메타데이터 서버의 자격 증명을 사용해요. 이 마지막 경우에는 제공된 범위가 모두 무시돼요.
발견(discovery)에는 GCE 서비스 계정이 필요해요. 자격 증명은 우선순위에 따라 다음 경로로 검색돼요.
go-netaddrs 구성 (go-netaddrs Configurations)
go-netaddrs 구성은 exec= 접두사로 시작해요.
exec= 접두사 뒤에는 실행 가능한 프로그램과 그 인자가 올 수 있어요. go-netaddrs가 실행하는 명령은 공백으로 구분된 IPv4 또는 IPv6 주소 목록을 반환하고, 성공 시 코드 0으로, 실패 시 0이 아닌 코드로 종료해야 해요.
실행 파일을 절대 파일시스템 경로로 참조하거나, 실행 파일의 이름이 Nomad 에이전트의 PATH에서 찾을 수 있다면 그 이름으로 참조할 수 있어요. 조회 동작에 대한 자세한 내용은 "Refer to executables in the current directory"를 참고해요.
go-netaddrs 구성 예시:
server_join {
retry_join = [ "exec=hcloud server list -o noheader -o columns=ipv4 -l nomad-server=true | tr '\n' ' '" ]
}
여기서 hcloud의 줄바꿈으로 구분된 출력이 출력을 tr로 파이프하여 공백으로 구분된 형태로 재포맷됐어요.
go-netaddrs 실행 파일 예시의 출력:
"1.1.1.1 2.2.2.2"
go-netaddrs 구성에 대한 자세한 내용은 go-netaddrs를 방문해요.