HPA 제로 스케일

HPA scale to zero

외부 대기열 지표로 유휴 워크로드를 0개 파드까지 줄였다가 다시 늘립니다.

···
html
<div class="stage" data-phase="0"><div class="title">EXTERNAL QUEUE → HPA</div><div class="row scale"><div class="queue panel">QUEUE<strong>0</strong><i></i><i></i><i></i></div><span class="arrow">→</span><div class="pods panel">PODS<div class="boxes"><i></i><i></i><i></i></div></div></div><div class="sub">external metric remains when replicas = 0</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)}.scale{flex:1;justify-content:space-around}.scale .panel{width:40%;height:85%;display:flex;flex-direction:column;justify-content:space-around;text-align:center}.queue strong{color:var(--accent);font-size:clamp(18px,5vmin,28px)}.queue>i{display:none}.arrow{font-size:clamp(20px,5vmin,30px);color:var(--accent)}.boxes{display:flex;justify-content:center;gap:5px}.boxes i{width:24%;height:clamp(20px,6vmin,38px);border:1px dashed var(--line);border-radius:5px}.stage[data-phase="1"] .queue strong{font-size:0}.stage[data-phase="1"] .queue strong:after{content:'3';font-size:clamp(18px,5vmin,28px)}.stage[data-phase="2"] .queue strong{font-size:0}.stage[data-phase="2"] .queue strong:after{content:'6';font-size:clamp(18px,5vmin,28px)}.stage[data-phase="1"] .boxes i:first-child,.stage[data-phase="2"] .boxes i{background:var(--accent);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()})

일반적인 수평 파드 자동 확장은 파드 자체의 CPU·메모리 지표에 의존하므로 마지막 파드를 없애면 신호도 사라집니다. 외부 대기열 같은 지표를 쓰면 0개 상태에서도 새 작업을 감지해 다시 확장할 수 있습니다.

데모에서는 대기열이 비었다가 작업이 들어올 때 파드 수가 0에서 늘어납니다. 쿠버네티스 1.36의 HPAScaleToZero는 기본 비활성화된 알파 기능이며 Object 또는 External 지표에 한정됩니다.

언제 쓰나

작업이 드문 배치 서비스를 유휴 시 완전히 멈추는 방식을 실험할 때 참고합니다.

페이지로 열기 ↗