워크로드 인식 스케줄링

Workload-aware scheduling

서로 의존하는 파드를 그룹으로 보고 필요한 자리를 함께 확보합니다.

···
html
<div class="stage" data-phase="0"><div class="title">GROUP SCHEDULING · NEED 2 SLOTS</div><div class="row workers"><div class="panel worker">worker A</div><div class="panel worker">worker B</div></div><div class="row nodes"><div class="panel node">node 1<br><span>free</span></div><div class="panel node">node 2<br><span>busy</span></div></div><div class="sub">wait for the whole group</div></div>
css
.stage{width:min(94vw,760px);height:min(88vh,330px);padding:clamp(9px,2.6vmin,20px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,2.5vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;display:flex;flex-direction:column;gap:clamp(6px,1.7vmin,12px);overflow:hidden;position:relative}.stage *{min-width:0}.stage .title{color:var(--accent);font-weight:800}.stage .sub{color:var(--muted)}.stage .row{display:flex;align-items:center;gap:clamp(5px,1.6vmin,12px)}.stage .panel{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px)}.stage .mono{font-family:ui-monospace,SFMono-Regular,monospace;font-size:clamp(12px,2.5vmin,15px)}.stage .grow{flex:1}.stage .on{color:var(--accent)}.workers{justify-content:center}.workers .panel{width:35%;text-align:center;border-color:var(--accent-3)}.nodes{flex:1;justify-content:center}.nodes .panel{width:35%;text-align:center}.nodes span{color:var(--muted)}.stage[data-phase="1"] .nodes .node:last-child{border-color:var(--accent)}.stage[data-phase="1"] .nodes .node:last-child span{font-size:0}.stage[data-phase="1"] .nodes .node:last-child span:after{content:'free';font-size:clamp(12px,2.5vmin,16px);color:var(--accent)}.stage[data-phase="2"] .workers .panel{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,var(--surface));transform:translateY(7px)}.stage[data-phase="2"] .nodes .panel{border-color:var(--accent)}
js
const stage=document.querySelector('.stage');let phase=0;function advance(){phase=(phase+1)%3;stage.dataset.phase=String(phase)}const timer=setInterval(advance,1200);stage.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})

분산 작업은 일부 파드만 배치되면 나머지를 기다리며 자원을 낭비할 수 있습니다. 쿠버네티스 1.36의 워크로드와 PodGroup API는 그룹의 실행 상태와 배치 조건을 표현합니다.

데모는 노드 자리가 충분하지 않을 때 두 작업자를 함께 대기시키고, 자리가 확보되면 동시에 배치합니다. 이 기능의 API는 1.36에서 알파 단계이므로 운영 채택 전에 변경 가능성을 고려해야 합니다.

언제 쓰나

여러 작업자가 함께 시작해야 하는 배치·학습 작업을 계획할 때 참고합니다.

페이지로 열기 ↗