An audit against the standard the series set — concepts, procedure, commands, architecture diagram, evidence table, terminal output — found the three new experiments met it while twelve of the original ones had no diagram at all: A-0, A-1, A-3, A-4, A-5, A-6, A-8, B-0, B-2, B-7, C-2, D-2. Each now has one drawn from what that experiment actually found, not filler: A-0 shows sharing going through PostgreSQL rather than between the caches; A-3 the gap between the 200 and the WAL flush, with both failed injections; A-5 the three silent injection failures; A-6 the two places latency is multiplied; B-0 the repository keyed by principal with no session id; B-2 the primary key that causes the overwrite; D-2 why the rolling update stopped the accident halfway. Also corrected the index's stale claim of 11 experiments without a screenshot — it is 14, and the reason is recorded: those experiments were measured from terminals, the database and logs, and the observability stack does not scrape Redis, the BFF or PostgreSQL, so there is no console to photograph. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
53 lines
3.9 KiB
XML
53 lines
3.9 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 860 420" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,sans-serif">
|
|
<style>
|
|
.box{fill:#fff;stroke:#8c959f;stroke-width:1.4;rx:6}
|
|
.dead{fill:#fff5f5;stroke:#cf222e;stroke-width:1.6;stroke-dasharray:5 3;rx:6}
|
|
.ok{fill:#f6fdf6;stroke:#1a7f37;stroke-width:1.6;rx:6}
|
|
.warn{fill:#fff8f0;stroke:#bf8700;stroke-width:1.5;rx:6}
|
|
.t{font-size:12px;fill:#1f2328}
|
|
.tb{font-size:12.5px;fill:#1f2328;font-weight:600}
|
|
.s{font-size:10.5px;fill:#656d76}
|
|
.ttl{font-size:14px;fill:#1f2328;font-weight:600}
|
|
.r{stroke:#cf222e;stroke-width:1.6;fill:none}
|
|
.g{stroke:#1a7f37;stroke-width:1.6;fill:none}
|
|
.k{stroke:#8c959f;stroke-width:1.3;fill:none}
|
|
</style>
|
|
<defs>
|
|
<marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 z" fill="#8c959f"/></marker>
|
|
<marker id="ar" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 z" fill="#cf222e"/></marker>
|
|
<marker id="ag" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 z" fill="#1a7f37"/></marker>
|
|
</defs>
|
|
<text x="20" y="26" class="ttl">A-4 — 둘 다 전면 장애지만 이유가 다르다</text>
|
|
<text x="20" y="44" class="s">그리고 죽은 파드가 산 파드보다 건강해 보인다</text>
|
|
<rect x="30" y="70" width="390" height="150" class="box"/>
|
|
<text x="46" y="92" class="tb">4a — 워커(kc-lab-2) 상실</text>
|
|
<rect x="46" y="104" width="170" height="46" class="dead"/>
|
|
<text x="58" y="124" class="t">keycloak-0</text>
|
|
<text x="58" y="142" class="s">PostgreSQL 도 여기 있었다</text>
|
|
<rect x="236" y="104" width="170" height="46" class="warn"/>
|
|
<text x="248" y="124" class="t">keycloak-1 살아있음</text>
|
|
<text x="248" y="142" class="s">그러나 DB 가 없다</text>
|
|
<text x="46" y="172" class="t">외부 응답 <tspan fill="#cf222e" font-weight="600">503</tspan> · kubectl 정상</text>
|
|
<text x="46" y="194" class="s">DB 가 같이 죽어서 장애다. 남은 파드는 돌지만 아무것도 못 한다</text>
|
|
<text x="46" y="212" class="s">PVC 가 local-path 라 다른 노드로 재배치되지 않는다</text>
|
|
<rect x="440" y="70" width="390" height="150" class="box"/>
|
|
<text x="456" y="92" class="tb">4b — 컨트롤 플레인(kc-lab-1) 상실</text>
|
|
<rect x="456" y="104" width="170" height="46" class="ok"/>
|
|
<text x="468" y="124" class="t">keycloak-0</text>
|
|
<text x="468" y="142" class="s">★ 계속 돌고 있다</text>
|
|
<rect x="646" y="104" width="170" height="46" class="dead"/>
|
|
<text x="658" y="124" class="t">API 서버 · traefik</text>
|
|
<text x="658" y="142" class="s">들어갈 길이 없다</text>
|
|
<text x="456" y="172" class="t">외부 응답 <tspan fill="#cf222e" font-weight="600">000</tspan> · kubectl <tspan fill="#cf222e">불통</tspan></text>
|
|
<text x="456" y="194" class="s">워크로드는 멀쩡한데 도달할 수 없어 장애다</text>
|
|
<text x="456" y="212" class="s">진입점이 단일 노드에 있으면 워크로드 이중화는 의미가 없다</text>
|
|
<rect x="30" y="242" width="800" height="86" class="warn"/>
|
|
<text x="46" y="264" class="tb">★ 예상하지 못한 것 셋</text>
|
|
<text x="46" y="286" class="s">1. 죽은 파드가 산 파드보다 건강해 보인다 — kubelet 이 사라져 상태가 갱신되지 않으니 Running 으로 남는다</text>
|
|
<text x="46" y="304" class="s">2. StatefulSet 은 Terminating 파드의 대체를 만들지 않는다 — 이름이 같아야 하므로 지워지기를 기다린다</text>
|
|
<text x="46" y="322" class="s">3. node-monitor-grace-period 40초 + tolerationSeconds 300초 = 축출까지 5분 40초</text>
|
|
<rect x="30" y="348" width="800" height="46" class="ok"/>
|
|
<text x="46" y="370" class="tb">복구는 둘 다 virsh start 이후 60초</text>
|
|
<text x="46" y="388" class="s">장애 시간의 대부분은 복구가 아니라 "누가 죽은 것을 알아채는 데" 걸린 시간이다</text>
|
|
</svg>
|