Kubernetes Pod ่ฐๅบฆๆต็จๅพ๏ผScheduler ๆง่ก้กบๅบ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
API Server ๆฅๆถ Pod
(Pod ๅคไบ Pending ็ถๆ)
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
Scheduler Watch ๅฐๆฐ Pod
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ้ข้้ถๆฎต
(Filter / Predicate)
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
่ฟๆปคๆไธๆปก่ถณๆกไปถ็่็น
- ่ตๆบไธ่ถณ๏ผCPU/Mem๏ผ ๆ
้ใไธๅฏ่ฐๅบฆ่็นๅ้ค
- ไธ็ฌฆๅ NodeSelector - Node notReady
- ไธ็ฌฆๅ NodeAffinity - Taint ไธๅฏๅฎนๅฟ
- ็ซฏๅฃๅฒ็ช / ่ฎพๅคไธๅฏ็จ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โก ่ฏๅ้ถๆฎต๏ผScore๏ผ
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
ๅฏนๆฏไธชๅฏ่ฐๅบฆ่็น่ฏๅ๏ผ
- Least Loaded๏ผ่ด่ฝฝๆๅฐ๏ผ
- Selector Spread๏ผๅๆฃๅบฆ๏ผ
- Affinity ไผๅ
็บง
- Node ่ตๆบๅฉ็จ็็ญ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โข ้ๅบๅพๅๆ้ซ็่็น
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โฃ ่ฐๅบฆ็ปๅฎ๏ผBind๏ผ
Scheduler -> API Server
{pod: nodeName}
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Kubelet Watch ๅฐ Pod
-> ๆ้ๅใๅๅปบๅฎนๅจ
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Pod ่ฟๅ
ฅ Running ็ถๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Scheduler ไผๆไธๆปก่ถณ่ฆๆฑ็่็นๆ้ค๏ผ
- Node ๆ ๆณ่ฐๅบฆ๏ผNotReady / Unschedulable๏ผ
- NodeSelector ไธๅน้
- NodeAffinity ไธๅน้
- Taint ไธๅฏๅฎนๅฟ
- CPU/Memory request ไธๆปก่ถณ
- Volume ไธๆปก่ถณ๏ผlocal/pvc ไธๅฏ็จ๏ผ
- PID/Device ไธๆปก่ถณ
- HostPort ๅฒ็ช
- PodAffinity / AntiAffinity ไธๆปก่ถณ
- RuntimeClass ไธๅ ผๅฎน
้ข้้ถๆฎต็็ปๆ๏ผๅฉไธๅฏ่ฐๅบฆ่็นๅ่กจ
Scheduler ไผๅฏนๆๆๅฏ่ฐๅบฆ่็นๆๅ๏ผ
ๅธธ่ง scoring ็ญ็ฅ๏ผ
- LeastAllocated๏ผไผๅ ้ๆฉๅฉ็จ็ไฝ็่็น
- BalancedAllocation๏ผ้ๆฉ CPU/Mem ่ถๅ่กก็่็น
- SelectorSpread๏ผไผๅ Pod ๅๆฃๅบฆ
- ImageLocality๏ผ้ๅๆฌๅฐๅทฒ็ผๅญ -> ๅๆด้ซ
- NodeAffinityPriority๏ผๅๅฅฝ่็นๆๅ
ๆ็ปๅพๅฐ๏ผ
ๆฏไธช่็นไธไธช 0~100 ็ scoreใ
ๅฆๅพๅ็ธๅ๏ผ
- Round Robin
- ้ๆบๆฐ seed ๅบๅฎ
- ๅ่ฐๅบฆๅจ้ ็ฝฎๅฝฑๅ
Scheduler ๅฐ็ปๆๅๅ API Server๏ผ
Pod.Spec.NodeName = target-node
่ณๆญค๏ผ่ฐๅบฆๆต็จๅฎๆใ
Pod ็ถๆ -> ๅไธบ โScheduledโใ
่ฐๅบฆ็ปๆๅ๏ผKubelet ๅผๅงๆง่ก๏ผ
- ๅๅปบ Pause ๅฎนๅจ๏ผPod Sandbox๏ผ
- ๅๅปบ็ฝ็ปๅฝๅ็ฉบ้ด๏ผCNI๏ผ
- ๆๅ้ๅ
- ไพๅบๅฏๅจ initContainers
- ๅฏๅจ containers
- ๆง่ก liveness/readiness/startup probes
- Pod -> Running
-
Pod ไผไฟๆ Pending
-
Event ไธญไผๅบ็ฐๅ ทไฝๅๅ ๏ผ
kubectl describe pod xxx | grep -A10 "Events"
ๅธธ่ง้่ฏฏ๏ผ
- insufficient cpu/memory
- node(s) didn’t match node selector
- pod didn’t tolerate node taint
- pod has unbound ImmediatePersistentVolumeClaims
Kubernetes ่ฐๅบฆๅจๆง่กๆต็จไธบ๏ผ
Watch Pod -> Filter ้ข้่็น -> Score ๆๅ -> ้ๆ้ซๅ่็น -> Bind -> Kubelet ๆง่กใ
ๆฏไธๆญฅ้ฝ็ฑๅฏๆๆ่ฐๅบฆๆไปถๅฎ็ฐใ