有沒有辦法限制任務在某些節點上運行,但不限於?

有沒有辦法限制任務在某些節點上運行,但不限於?

我正在使用跨多個資料中心的 Docker Swarm。 Swarm 在「虛擬私有雲」中運作。

參與設定的資料中心之一的連結速度比其他資料中心稍慢。我希望避免在該資料中心安排對延遲特別敏感的服務。

  • 我可以使用放置約束,但這會影響可用性。如果由於某種原因「慢速」資料中心是唯一正在運行的資料中心,則約束將確保受約束的服務永遠不會在該資料中心中調度。影響可用性。
  • 我可以使用放置首選項,但這只是一個首選項。如果我將標籤新增lowlatency至除「慢速」資料中心中的節點之外的所有節點,則服務可能仍會安排在那裡。畢竟這只是一種偏好。

有沒有辦法以某種方式將服務限制在某些節點上,但如果首選節點不可用,則允許 Docker 在其他節點上調度服務?

答案1

不,這不是 Swarm 模式的內建功能。

目前唯一可用的放置首選項是將工作負載分散到標籤的值上。這用於避免在單一可用區域中調度所有副本,例如同一機架、資料中心等中的所有工作負載。

群調度中的另一個可用選項是約束,而且是硬限制。工作負載不會被調度到與約束不匹配的節點上,即使這意味著它們無法調度到任何地方並且服務保持關閉。

最接近您期望的目標的是運行一個額外的過程來檢測所有其他資料中心的中斷並調整對您的服務的限制,但是我懷疑這會存在兩個相應的問題。首先,當其他資料中心關閉時,您可能會失去管理器的仲裁,不會發生任何調度活動,並且由於失去領導者,對任何正在運行的管理器的命令都會失敗。其次,如果您確實有仲裁,則剩餘資料中心中的節點可能會因重新安排的其他工作負載而過度配置。這稱為驚群問題,需要在容器上設定 CPU 和記憶體需求。這些要求將阻止在節點上安排新作業,以避免進一步中斷並阻止變更後的服務找到具有容量的節點。

相關內容