특정 노드에서 실행되는 작업을 제한하지만 제한하지 않는 방법이 있습니까?

특정 노드에서 실행되는 작업을 제한하지만 제한하지 않는 방법이 있습니까?

여러 데이터 센터에 걸쳐 있는 Docker Swarm을 사용하고 있습니다. Swarm은 "가상 사설 클라우드"에서 실행됩니다.

설정에 참여하는 데이터 센터 중 하나는 다른 센터보다 링크 속도가 다소 느립니다. 해당 데이터 센터에서 특히 대기 시간에 민감한 서비스를 예약하는 것을 피하고 싶습니다.

  • 배치 제약 조건을 사용할 수 있지만 이는 가용성에 영향을 미칩니다. 어떤 이유로 "느린" 데이터 센터가 유일하게 실행되는 경우 제약 조건은 제한된 서비스가 해당 데이터 센터에서 예약되지 않도록 보장합니다. 가용성에 영향을 미칩니다.
  • 배치 기본 설정을 사용할 수 있지만 이는 단지 기본 설정일 뿐입니다. "느린" 데이터 센터에 있는 노드를 제외한 모든 노드에 레이블을 추가하면 lowlatency서비스가 계속 예약될 수 있습니다. 그것은 결국 단지 선호일 뿐이다.

서비스를 특정 노드로 제한하지만 기본 노드를 사용할 수 없는 경우 Docker가 다른 노드에서 서비스를 예약하도록 허용하는 방법이 있습니까?

답변1

아니요, 이는 Swarm 모드에 내장된 기능이 아닙니다.

현재 사용 가능한 유일한 배치 기본 설정은 레이블 값 전체에 작업 부하를 분산시키는 것입니다. 이는 단일 가용성 영역(예: 동일한 랙, 데이터 센터 등에 있는 모든 작업 부하)에서 모든 복제본이 예약되는 것을 방지하는 데 사용됩니다. 소프트 제약 조건처럼 작동하는 배치 기본 설정은 없습니다.

스웜 스케줄링에서 사용 가능한 또 다른 옵션은 제약이며 엄격한 제한입니다. 제약 조건과 일치하지 않는 노드에서는 워크로드가 예약되지 않습니다. 이는 어디에서나 예약할 수 없고 서비스가 계속 중단되는 경우에도 마찬가지입니다.

원하는 목표에 가장 근접하게 도달할 수 있는 방법은 추가 프로세스를 실행하여 다른 모든 데이터 센터의 중단을 감지하고 서비스에 대한 제약 조건을 조정하는 것이지만 여기에는 두 가지 해당 문제가 있을 것으로 생각됩니다. 첫째, 다른 데이터 센터가 작동 중지되면 관리자와의 정족수가 손실되고 예약 활동이 발생하지 않으며 리더 손실로 인해 실행 중인 관리자에 대한 명령이 실패할 수 있습니다. 둘째, 쿼럼이 있는 경우 나머지 데이터 센터의 노드는 다시 예약되는 다른 워크로드로 인해 과도하게 프로비저닝될 가능성이 높습니다. 이는 컨테이너에 CPU 및 메모리 요구 사항을 설정해야 하는 천둥 떼 문제로 알려져 있습니다. 이러한 요구 사항은 추가 중단을 방지하고 변경된 서비스가 용량이 있는 노드를 찾지 못하도록 노드에서 새 작업이 예약되는 것을 차단합니다.

관련 정보