여러 데이터 센터에 걸쳐 있는 Docker Swarm을 사용하고 있습니다. Swarm은 "가상 사설 클라우드"에서 실행됩니다.
설정에 참여하는 데이터 센터 중 하나는 다른 센터보다 링크 속도가 다소 느립니다. 해당 데이터 센터에서 특히 대기 시간에 민감한 서비스를 예약하는 것을 피하고 싶습니다.
- 배치 제약 조건을 사용할 수 있지만 이는 가용성에 영향을 미칩니다. 어떤 이유로 "느린" 데이터 센터가 유일하게 실행되는 경우 제약 조건은 제한된 서비스가 해당 데이터 센터에서 예약되지 않도록 보장합니다. 가용성에 영향을 미칩니다.
- 배치 기본 설정을 사용할 수 있지만 이는 단지 기본 설정일 뿐입니다. "느린" 데이터 센터에 있는 노드를 제외한 모든 노드에 레이블을 추가하면
lowlatency
서비스가 계속 예약될 수 있습니다. 그것은 결국 단지 선호일 뿐이다.
서비스를 특정 노드로 제한하지만 기본 노드를 사용할 수 없는 경우 Docker가 다른 노드에서 서비스를 예약하도록 허용하는 방법이 있습니까?
답변1
아니요, 이는 Swarm 모드에 내장된 기능이 아닙니다.
현재 사용 가능한 유일한 배치 기본 설정은 레이블 값 전체에 작업 부하를 분산시키는 것입니다. 이는 단일 가용성 영역(예: 동일한 랙, 데이터 센터 등에 있는 모든 작업 부하)에서 모든 복제본이 예약되는 것을 방지하는 데 사용됩니다. 소프트 제약 조건처럼 작동하는 배치 기본 설정은 없습니다.
스웜 스케줄링에서 사용 가능한 또 다른 옵션은 제약이며 엄격한 제한입니다. 제약 조건과 일치하지 않는 노드에서는 워크로드가 예약되지 않습니다. 이는 어디에서나 예약할 수 없고 서비스가 계속 중단되는 경우에도 마찬가지입니다.
원하는 목표에 가장 근접하게 도달할 수 있는 방법은 추가 프로세스를 실행하여 다른 모든 데이터 센터의 중단을 감지하고 서비스에 대한 제약 조건을 조정하는 것이지만 여기에는 두 가지 해당 문제가 있을 것으로 생각됩니다. 첫째, 다른 데이터 센터가 작동 중지되면 관리자와의 정족수가 손실되고 예약 활동이 발생하지 않으며 리더 손실로 인해 실행 중인 관리자에 대한 명령이 실패할 수 있습니다. 둘째, 쿼럼이 있는 경우 나머지 데이터 센터의 노드는 다시 예약되는 다른 워크로드로 인해 과도하게 프로비저닝될 가능성이 높습니다. 이는 컨테이너에 CPU 및 메모리 요구 사항을 설정해야 하는 천둥 떼 문제로 알려져 있습니다. 이러한 요구 사항은 추가 중단을 방지하고 변경된 서비스가 용량이 있는 노드를 찾지 못하도록 노드에서 새 작업이 예약되는 것을 차단합니다.