잡 스펙의 `sidecar_task` 블록

잡 스펙의 sidecar_task 블록

sidecar_task 블록은 Consul 서비스 메시 통합을 위해 Nomad가 관리하는 프록시 사이드카 또는 Connect 게이트웨이의 다양한 옵션을 구성할 수 있게 해요. 예를 들어 리소스 요구 사항, kill 타임아웃 등이 아래에 정의되어 있어요. connect 블록 안에서만 유효해요.

출처: 문서

본문

배치 job -> group -> service -> connect -> **sidecar_task**
job "countdash" {
  datacenters = ["dc1"]

  group "api" {
    network {
      mode = "bridge"
    }

    service {
      name = "count-api"
      port = "9001"

      connect {
        sidecar_service {}

        sidecar_task {
          resources {
            cpu    = 500
            memory = 1024
          }
        }
      }
    }

    task "web" {
      driver = "docker"

      config {
        image = "hashicorpdev/counter-api:v3"
      }
    }
  }
}

기본 Envoy 구성 (Default Envoy configuration)

Nomad는 sidecar_service 또는 gateway가 구성되면 프록시 사이드카 또는 connect 게이트웨이로 사용할 Envoy 태스크를 자동으로 시작하고 관리해요.

기본 Envoy 태스크는 다음과 같아요:

sidecar_task {
  name = "connect-proxy-<service>"
  #      "connect-gateway-<service>" when used as a gateway

  lifecycle { # absent when used as a gateway
    hook    = "prestart"
    sidecar = true
  }

  driver = "docker"

  config {
    image = "${meta.connect.sidecar_image}"
    #       "${meta.connect.gateway_image}" when used as a gateway

    args = [
      "-c",
      "${NOMAD_SECRETS_DIR}/envoy_bootstrap.json",
      "-l",
      "${meta.connect.log_level}",
      "--concurrency",
      "${meta.connect.proxy_concurrency}",
      "--disable-hot-restart"
    ]
  }

  logs {
    max_files     = 2
    max_file_size = 2 # MB
  }

  resources {
    cpu    = 250 # MHz
    memory = 128 # MB
  }

  shutdown_delay = "5s"
}

meta.connect.sidecar_image, meta.connect.gateway_image, meta.connect.log_level, meta.connect.proxy_concurrency 변수는 다음 기본값을 가진 클라이언트 구성 가능 변수예요:

  • sidecar_image - (string: "docker.io/envoyproxy/envoy:v${NOMAD_envoy_version}") - 공식 상류 Envoy Docker 이미지. ${NOMAD_envoy_version}은 Consul에 대한 쿼리로 자동 해석돼요.
  • gateway_image - (string: "docker.io/envoyproxy/envoy:v${NOMAD_envoy_version}") - 공식 상류 Envoy Docker 이미지. ${NOMAD_envoy_version}은 Consul에 대한 쿼리로 자동 해석돼요.
  • log_level - (string: "info") - Envoy 사이드카 로그 레벨. "debug"는 Connect 관련 문제를 디버깅하는 데 유용해요.
  • proxy_concurrency - (string: "1") - Envoy 사이드카가 실행할 worker 스레드 수.

커스텀 이미지는 Nomad의 버전 보간을 사용해 Consul이 선호하는 Envoy 버전을 활용할 수 있어요. 예:

meta.connect.sidecar_image = custom/envoy-${NOMAD_envoy_version}:latest

매개변수 (Parameters)

  • name (string: "connect-[proxy|gateway]-<service>") - 태스크 이름. 기본값은 프록시 또는 게이트웨이가 제공하는 서비스 이름을 포함해요.

  • driver (string: "docker") - 사이드카 태스크에 사용되는 드라이버.

  • user (string: nil) - 태스크를 실행하는 데 사용할 사용자를 결정. 기본값은 Nomad 클라이언트가 실행 중인 것과 같은 사용자.

  • config (map: nil) - 초기화를 위해 드라이버에 제공되는 구성. 키와 값은 런타임 변수 보간을 지원해요.

  • env (map: nil) - 드라이버가 사용하는 환경 변수 맵.

  • resources ([Resources]) - 사이드카 태스크가 필요로 하는 리소스.

  • meta (map: nil) - 이 태스크와 연관된 Nomad에 불투명한 임의의 메타데이터.

  • logs ([Logs]: nil) - 태스크의 stdout과 stderr에 대한 로깅 구성을 지정.

  • kill_timeout (string: "5s") - 종료될 태스크에 신호를 보내고 그것을 종료하는 사이의 시간.

  • shutdown_delay (string: "5s") - 태스크를 Consul에서 등록 해제하고 종료 신호를 보내는 사이의 지연.

  • kill_signal (string:SIGINT) - 태스크에 사용할 kill 신호. 기본값은 SIGINT.

  • volume_mount ([VolumeMount]: nil) - 그룹 볼륨을 어디에 마운트할지 지정.

  • identity ([Identity]: nil) - 태스크에 추가 Workload Identity를 노출. Nomad는 Consul과 통신하는 데 필요한 아이덴티티로 Consul Service Mesh 사이드카를 자동으로 구성해요. 이 블록을 지정하면 서드파티 서비스가 사용할 수 있는 추가 아이덴티티를 더할 수 있어요.

예시 (Examples)

다음 예시는 사이드카 태스크의 리소스와 다른 구성을 구성해요.

   sidecar_task {
     resources {
       cpu = 500
       memory = 1024
     }

     env {
       FOO = "abc"
     }

     shutdown_delay = "5s"
   }

더 알아보기 (Learn more)