노마드(Nomad) 설치하기

노마드(Nomad) 설치하기

노마드는 여러 운영 체제용 미리 컴파일된 바이너리 또는 패키지로 제공돼요. 소스 코드에서 직접 노마드를 빌드할 수도 있어요. 로컬에 설치하지 않고 노마드를 시험해 보고 싶다면, Quickstart에서 노마드를 시작하는 다양한 옵션을 확인해 주세요.

출처: 문서

본문

Linux (우분투/데비안)

필요한 패키지를 설치해요.

$ sudo apt-get update && \
  sudo apt-get install wget gpg coreutils

HashiCorp GPG 키를 추가해요.

$ wget -O- https://apt.releases.hashicorp.com/gpg | \
  sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg

공식 HashiCorp Linux 저장소를 추가해요.

$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/hashicorp.list

업데이트하고 설치해요.

$ sudo apt-get update && sudo apt-get install nomad

Linux (RHEL/CentOS)

yum-config-manager를 설치해 저장소를 관리해요.

$ sudo yum install -y yum-utils

yum-config-manager로 공식 HashiCorp Linux 저장소를 추가해요.

$ sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

설치해요.

$ sudo yum -y install nomad

Linux (Fedora)

저장소를 관리하려면 dnf config-manager를 설치해요.

$ sudo dnf install -y dnf-plugins-core

dnf config-manager로 공식 HashiCorp Linux 저장소를 추가해요.

$ sudo dnf config-manager addrepo --from-repofile=https://rpm.releases.hashicorp.com/fedora/hashicorp.repo

설치해요.

$ sudo dnf -y install nomad

Linux (Amazon Linux)

yum-config-manager를 설치해 저장소를 관리해요.

$ sudo yum install -y yum-utils

yum-config-manager로 공식 HashiCorp Linux 저장소를 추가해요.

$ sudo yum-config-manager \
  --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo

설치해요.

$ sudo yum -y install nomad

수동 설치 (Linux)

미리 컴파일된 바이너리를 다운로드하고, 제공되는 SHA-256 체크섬으로 바이너리를 검증한 뒤, 패키지를 압축 해제해 컴퓨터의 원하는 위치에 넣어요. 다른 가이드를 계속 진행하기 전에 nomad 바이너리가 PATH에 등록되어 있는지 확인해 주세요.

Mac (Homebrew)

Homebrew는 Mac OS X용 무료 오픈소스 패키지 관리 시스템이에요. 터미널에서 공식 노마드 포뮬러를 설치해요.

먼저 모든 HashiCorp Homebrew 패키지가 담긴 저장소인 hashicorp tap을 설치해요.

$ brew tap hashicorp/tap

이제 hashicorp/tap/nomad로 노마드를 설치해요.

$ brew install hashicorp/tap/nomad

이렇게 하면 서명된 바이너리가 설치되며, 새로운 공식 릴리스가 나올 때마다 자동으로 업데이트돼요. 최신 버전으로 업데이트하려면 다음을 실행해요.

$ brew upgrade hashicorp/tap/nomad

Mac 수동 설치

미리 컴파일된 바이너리를 다운로드하고, 제공되는 SHA-256 체크섬으로 바이너리를 검증한 뒤, 패키지를 압축 해제해 컴퓨터의 원하는 위치에 넣어요. 다른 가이드를 계속 진행하기 전에 nomad 바이너리가 PATH에 등록되어 있는지 확인해 주세요.

Windows (Chocolatey)

Chocolatey는 Windows용 무료 오픈소스 패키지 관리 시스템이에요. 명령줄에서 노마드 패키지를 설치해요.

$ choco install nomad

Chocolatey와 노마드 패키지는 HashiCorp가 직접 관리하지 않아요. 노마드의 최신 버전은 항상 수동 설치로도 받을 수 있어요.

Windows 수동 설치

미리 컴파일된 바이너리를 다운로드하고, 제공되는 SHA-256 체크섬으로 바이너리를 검증한 뒤, 패키지를 압축 해제해 컴퓨터의 원하는 위치에 넣어요. 다른 가이드를 계속 진행하기 전에 nomad 바이너리가 PATH에 등록되어 있는지 확인해 주세요.

Linux 설치 후 단계

이 단계들은 선택 사항이지만, 노마드를 실행하고 추가 노마드 기능을 활용하는 데 도움이 돼요.

cpuset 회계와 네트워크 네임스페이스가 올바르게 동작하도록 클라이언트 에이전트를 root(또는 sudo)로 실행해야 해요.

CNI 참조 플러그인 설치

노마드는 브리지(bridge) 네트워크 모드를 사용할 때 네트워크 네임스페이스를 구성하기 위해 CNI 플러그인을 사용해요. 네트워크 네임스페이스를 사용하는 모든 Linux 노마드 클라이언트 노드에 CNI 플러그인을 설치해야 해요. 개별 플러그인에 대한 자세한 내용은 외부 가이드인 CNI Plugins를 참고해 주세요.

다음 명령 시리즈는 운영 체제 아키텍처를 확인하고, CNI 1.6.2 릴리스를 다운로드한 뒤, CNI 플러그인 바이너리를 /opt/cni/bin 디렉터리에 압축 해제해요. 다른 릴리스 버전을 사용하려면 CNI_PLUGIN_VERSION 값을 바꿔 주세요.

$ export ARCH_CNI=$( [ $(uname -m) = aarch64 ] && echo arm64 || echo amd64)
$ export CNI_PLUGIN_VERSION=v1.6.2
$ curl -L -o cni-plugins.tgz "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGIN_VERSION}/cni-plugins-linux-${ARCH_CNI}-${CNI_PLUGIN_VERSION}".tgz && \
  sudo mkdir -p /opt/cni/bin && \
  sudo tar -C /opt/cni/bin -xzf cni-plugins.tgz

리눅스 배포판의 패키지 관리자가 CNI 참조 플러그인을 제공할 수도 있지만, 해당 버전에 포함된 알려진 버그 수정을 확실히 반영하려면 가장 최근의 안정 버전을 설치하는 것을 권장해요.

노마드는 기본적으로 /opt/cni/bin 디렉터리에서 CNI 플러그인 바이너리를 찾아요. 하지만 다른 디렉터리에 바이너리를 설치한 뒤 cni_path 속성으로 구성할 수도 있어요.

consul-cni 플러그인 설치

Consul 서비스 메시에 transparent_proxy 블록을 사용하면, Consul이 서비스의 인바운드·아웃바운드 트래픽을 Envoy 프록시로 올바르게 리디렉션하도록 각 클라이언트 노드에도 consul-cni 플러그인을 설치해야 해요. 자세한 내용은 Consul 문서의 Enable the Consul CNI plugin을 참고해 주세요.

CNI 플러그인을 설치한 뒤에야 Consul CNI 플러그인을 설치할 수 있어요. 다음 명령은 CNI 플러그인을 이미 설치했다고 가정해요.

각 클라이언트 노드에 consul-cni 플러그인을 설치해요.

Ubuntu/Debian

$ sudo apt-get install -y consul-cni

RHEL/CentOS

$ sudo yum -y install consul-cni

Fedora

$ sudo dnf -y install consul-cni

Amazon Linux

$ sudo yum -y install consul-cni

수동 설치

$ export ARCH_CNI=$( [ $(uname -m) = aarch64 ] && echo arm64 || echo amd64)
$ curl -L -o consul-cni.zip "https://releases.hashicorp.com/consul-cni/1.5.1/consul-cni_1.5.1_linux_${ARCH_CNI}".zip && \
  sudo unzip consul-cni.zip -d /opt/cni/bin -x LICENSE.txt

dmidecode 설치

Amazon EC2 같은 가상화 호스트에서 실행할 때 노마드는 CPU 성능 데이터를 감지하기 위해 dmidecode 도구를 사용해요. 일부 Linux 배포판에서는 dmidecode 패키지를 수동으로 설치해야 해요.

iptables를 통한 트래픽 라우팅을 위한 브리지 네트워크 구성

노마드의 태스크 그룹 네트워크는 브리지 네트워킹과 iptables를 사용해 컨테이너 간 트래픽을 보내면서 Consul의 서비스 메시와 통합돼요.

⚠️ Ubuntu 24.04 같은 새로운 Linux 버전은 기본적으로 브리지 네트워킹을 활성화하지 않을 수 있어요. 브리지 모듈이 없으면 sudo modprobe bridge를 사용해 로드해 주세요.

Linux 커널 브리지 모듈에는 iptables가 브리지를 통과하는 트래픽을 처리하는지 제어하는 세 가지 튜너블 파라미터가 있어요. RedHat, CentOS, Fedora 같은 일부 운영 체제는 이 튜너블 파라미터가 VM 워크로드에 최적화되어 있어 게스트 트래픽용 iptables 규칙이 올바르게 구성되지 않을 수 있어요.

Linux 배포판이 브리지 네트워크를 통해 컨테이너 트래픽을 iptables로 라우팅하도록 구성되어 있는지 확인해 주세요. 브리지 네트워크에서 iptables 처리를 허용하도록 튜너블 파라미터를 설정하려면 다음 명령을 실행해요.

$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-arptables
$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

클라이언트 노드 시작 시 이 설정을 유지하려면 /etc/sysctl.d/에 파일을 추가하거나, Linux 배포판이 그 디렉터리에 넣어둔 파일을 제거해 주세요. 다음 예시는 클라이언트 노드의 튜너블 파라미터를 구성해요.

/etc/sysctl.d/bridge.conf

net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

cgroup 컨트롤러 검증

Linux에서 노마드는 CPU, 메모리 같은 리소스에 대한 접근을 제어하기 위해 cgroup을 사용해요. 노마드는 cgroups v2와 레거시 cgroups v1을 모두 지원해요. 노마드 클라이언트가 시작되면 사용 가능한 cgroup 컨트롤러를 확인하고 os.cgroups.version 속성을 fingerprint에 포함해요.

노마드는 필요한 컨트롤러가 모두 사용 가능할 때만 cgroup으로 리소스를 제어할 수 있어요. 필요한 cgroup이 하나라도 없으면 노마드는 cgroup이 필요한 리소스 제어를 비활성화해요. 데이터센터 밖에서 쓰는 플랫폼(예: Raspberry Pi 같은 취미용 컴퓨터)에서 컨트롤러가 없는 경우가 가장 흔해요.

cgroups v2에서는 다음 명령으로 필요한 컨트롤러가 모두 있는지 확인할 수 있어요.

$ cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory pids

레거시 cgroups v1에서는 이와 동일한 필수 컨트롤러 목록이 /sys/fs/cgroup 디렉터리의 일련의 하위 디렉터리로 나타나요.

누락된 cgroup을 활성화하려면 적절한 부팅 커널 명령줄 인자를 추가해요. 예를 들어 Raspberry Pi 커널 패치셋에서 cpuset cgroup을 활성화하려면 cgroup_cpuset=1 cgroup_enable=cpuset을 추가해요. 이 인자는 부트로더가 지정하는 위치에 추가하면 돼요.

cgroup에 대한 자세한 내용은 Hardening Nomad를 참고해 주세요.

설치 검증

노마드가 올바르게 설치되었는지 확인하려면 nomad 명령을 실행해 봐요.

$ nomad

다음과 비슷한 도움말 출력이 나올 거예요.

Usage: nomad [-version] [-help] [-autocomplete-(un)install] <command> [args]

Common commands:
    run         Run a new job or update an existing job
    stop        Stop a running job
    status      Display the status output for a resource
    alloc       Interact with allocations
    job         Interact with jobs
    node        Interact with nodes
    agent       Runs a Nomad agent

Other commands:
    acl                 Interact with ACL policies and tokens
    agent-info          Display status information about the local agent
    config              Interact with configurations
    deployment          Interact with deployments
    eval                Interact with evaluations
    exec                Execute commands in task
    fmt                 Rewrites Nomad config and job files to canonical format
    license             Interact with Nomad Enterprise License
    login               Login to Nomad using an auth method
    monitor             Stream logs from a Nomad agent
    namespace           Interact with namespaces
    operator            Provides cluster-level tools for Nomad operators
    plugin              Inspect plugins
    quota               Interact with quotas
    recommendation      Interact with the Nomad recommendation endpoint
    scaling             Interact with the Nomad scaling endpoint
    sentinel            Interact with Sentinel policies
    server              Interact with servers
    service             Interact with registered services
    system              Interact with the system API
    tls                 Generate Self Signed TLS Certificates for Nomad
    ui                  Open the Nomad Web UI
    var                 Interact with variables
    version             Prints the Nomad version
    volume              Interact with volumes

소스에서 컴파일하기

소스에서 컴파일하려면 .go-version 파일이 명시하는 버전의 Go가 설치되어 있어야 해요. GOPATH 환경 변수를 설정하고 GOPATH/bin이 PATH에 포함되도록 Go 환경을 제대로 구성해야 해요. PATH에 git도 필요해요.

GitHub에서 GOPATH로 노마드 저장소를 클론해요:

$ mkdir -p $GOPATH/src/github.com/hashicorp && cd $_
$ git clone https://github.com/hashicorp/nomad.git
$ cd nomad

프로젝트를 부트스트랩해요. 이 과정은 노마드 컴파일에 필요한 라이브러리와 도구를 다운로드하고 컴파일해요:

$ make bootstrap

현재 시스템용 노마드를 빌드해 바이너리를 ./bin/(git 체크아웃 기준 상대 경로)에 넣어요. make dev 타깃은 로컬 빌드 환경용 노마드만 빌드하는 단축 명령이에요(크로스 컴파일 타깃 없음).

$ make dev

더 알아보기 (Learn more)