使用Nomad构建弹性基础架构:计划和自我修复
這是 使用Nomad構建彈性基礎架構?系列文章的第二篇。在本系列中,我們將探討Nomad如何處理意外故障、停機和集群基礎設施的常規維護,通常不需要操作員干預。
在這篇文章中,我們將會看到Nomad客戶端如何通過驅動健康檢查和心跳來實現快速、準確的調度以及自我修復。
Nomad 客戶端代理
Nomad代理是一個長期運行的進程,運行在屬于Nomad集群的每臺機器上。代理的行為取決于它是在client模式還是server模式下運行。客戶端負責運行任務,而服務端負責管理集群。每個集群通常有3或5個服務端代理節點,可能有數千個客戶端。
client模式代理的主要目的是運行docker容器等用戶工作負載。為了實現這一點,客戶端將對其環境進行采集,以確定主機的功能和資源,并確定可用的驅動程序。完成后,客戶端將向服務端注冊,并定期與服務器進行通信,以便提供節點信息、心跳活性,并運行分配給它們的任何任務。
調度
調度是Nomad服務端的核心功能之一。它是將job的任務分配給客戶端的過程。此過程必須遵守job文件中聲明的約束,并優化資源利用率。
您將從本系列的第1部分中回憶到,job是任務的聲明性描述,包括任務的約束和所需的資源。job由用戶提交,并表示所期望的狀態。job中任務組到客戶端的映射是使用分配(allocation)完成的。分配聲明了job中的一組任務應該在特定節點上運行。調度是確定適當分配的過程,是評估(evaluation)的一部分。
當job創建、更新或節點失敗時,將創建評估。
作為Nomad服務端的一部分,調度器負責處理評估和生成分配計劃。Nomad中有三種調度器類型,每一種都針對特定的工作負載類型進行了優化:service、batch和system。
首先,調度器將所需的狀態(由job文件指定)與集群的實際狀態進行協調,以確定必須執行的操作。可能需要進行新的分配。現有的分配可能需要更新、遷移或停止。
分配被分成兩個不同的階段:可行性檢查和排名。在第一階段,調度器通過過濾不健康的節點、缺少必要的驅動程序和沒有達到指定的作業約束的節點來找到可行的節點。這就是Nomad使用Nomad客戶端提供的節點指紋和驅動信息的地方。
第二階段是排名,調度器對可用節點進行打分,以找到最合適的節點。打分是基于裝箱(bin packing)和反親和性(anti-affinity)(不鼓勵任務組的多個實例共存)的組合,它優化了密度,同時減少了相關故障的可能性。在Nomad 0.9.0,下一個主要版本中,打分還將考慮用戶指定的親和性和反親和性。
在傳統的數據中心環境中,在哪里以及如何放置工作負載通常是需要操作員進行決策和干預的手工操作。而使用Nomad,調度決策是自動的,并針對所需的工作負載、集群的當前狀態和功能進行了優化。
限制基于驅動健康狀況的工作安排
Nomad客戶端使用任務驅動來執行任務并提供資源隔離。Nomad提供了一組可擴展的任務驅動程序,以支持跨所有主要操作系統的大量工作負載。任務驅動程序的配置選項、可用于的環境以及可用的資源隔離機制各不相同。
Nomad中的任務驅動類型有:Docker、獨立的fork/exec、Java、LXC、Qemu、raw fork/exec、Rkt以及用Go編寫的自定義驅動(Nomad 0.9.0中即將出現的可插拔驅動系統)。
在Nomad 0.8中引入的驅動程序健康檢查功能,使Nomad能夠根據驅動程序健康狀態和將驅動程序健康狀態顯示給操作員來限制分配。對于支持健康檢查的任務驅動程序,Nomad將排除將任務分配給那些報告為不健康的驅動程序的節點。
從丟失的客戶端節點中恢復
當Nomad客戶端運行時,它與服務端一起執行心跳以保持活力。如果心跳失敗,Nomad服務端假定客戶端節點已經失敗,并且停止分配新任務并開始創建替代分配。要區分網絡故障和Nomad代理崩潰是不可能的,因此這兩種情況的處理是相同的。一旦網絡恢復或崩潰的代理重啟,節點狀態將被更新,正常操作將恢復。
限制基于驅動程序健康狀況的job放置、自動檢測失敗的客戶節點和相應的重新定位job是Nomad的兩個自修復特性,無需額外的監視、腳本編寫或其他操作員干預。
總結
在關于使用Nomad構建彈性基礎架構的系列文章(第1部分)的第二篇文章中,我們介紹了Nomad客戶端-服務端代理如何通過驅動健康檢查和活力心跳實現快速、準確的調度以及自愈。
Nomad客戶端代理負責確定主機的資源和功能,包括哪些驅動程序可用,以及運行任務。Nomad服務端代理負責維護集群狀態和調度任務。客戶端和服務端代理協同工作,以支持快速、準確的調度以及自修復操作,例如自動重新調度失敗節點上的任務,并將失敗驅動程序的節點標記為不適合接收需要這些驅動程序的任務。
在下一篇文章中,我們將了解Nomad如何幫助操作人員管理job生命周期:更新、滾動部署(包括金絲雀和藍綠部署),以及遷移任務(作為客戶端節點退役的一部分)。
總結
以上是生活随笔為你收集整理的使用Nomad构建弹性基础架构:计划和自我修复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Nomad构建弹性基础架构:重新启动
- 下一篇: 使用Nomad构建弹性基础架构: 作业生