Files
kandev/docs/screenshots/k8s.svg
T
2026-09-03 23:12:45 +00:00

100 lines
11 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1200 680" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="k8s-title k8s-desc" width="1200" height="680">
<title id="k8s-title">One control plane, optional task Pods</title>
<desc id="k8s-desc">A Kubernetes deployment view places a browser behind a ClusterIP service, one persistent Kandev control-plane Pod backed by a ReadWriteOnce PVC, optional task-session Pods with workload identity, and external provider APIs.</desc>
<defs><style>@import url('https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&amp;family=Geist:wght@400;500;600&amp;family=Geist+Mono:wght@400;500;600&amp;display=swap');</style>
<marker id="k8s-arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#a1a1a1"/></marker>
<marker id="k8s-arrow-link" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#53eafd"/></marker>
<marker id="k8s-arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#6468f0"/></marker>
</defs>
<rect width="1200" height="680" fill="#0d0d10"/>
<!-- Physical zones. -->
<rect x="40" y="88" width="220" height="472" rx="8" fill="#111114" stroke="rgba(255,255,255,0.12)" stroke-width="1" stroke-dasharray="4,4"/>
<rect x="280" y="88" width="620" height="472" rx="8" fill="#111114" stroke="rgba(255,255,255,0.12)" stroke-width="1" stroke-dasharray="4,4"/>
<rect x="920" y="88" width="240" height="472" rx="8" fill="#111114" stroke="rgba(255,255,255,0.12)" stroke-width="1" stroke-dasharray="4,4"/>
<rect x="56" y="92" width="64" height="14" rx="2" fill="#0d0d10"/>
<text x="88" y="102" text-anchor="middle" fill="#737373" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.14em">EDGE</text>
<rect x="296" y="92" width="128" height="14" rx="2" fill="#0d0d10"/>
<text x="360" y="102" text-anchor="middle" fill="#737373" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.14em">K8S CLUSTER</text>
<rect x="936" y="92" width="160" height="14" rx="2" fill="#0d0d10"/>
<text x="1016" y="102" text-anchor="middle" fill="#737373" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.14em">EXTERNAL SYSTEMS</text>
<!-- Arrows are behind infrastructure nodes. -->
<line x1="232" y1="196" x2="320" y2="196" stroke="#53eafd" stroke-width="1.2" marker-end="url(#k8s-arrow-link)"/>
<path d="M410 220 V272" fill="none" stroke="#a1a1a1" stroke-width="1.2" marker-end="url(#k8s-arrow)"/>
<path d="M440 400 V456" fill="none" stroke="#a1a1a1" stroke-width="1.2" marker-end="url(#k8s-arrow)"/>
<line x1="560" y1="336" x2="640" y2="336" stroke="#6468f0" stroke-width="1.4" marker-end="url(#k8s-arrow-accent)"/>
<line x1="860" y1="336" x2="952" y2="336" stroke="#53eafd" stroke-width="1.2" marker-end="url(#k8s-arrow-link)"/>
<rect x="240" y="178" width="72" height="12" rx="2" fill="#0d0d10"/>
<text x="276" y="187" text-anchor="middle" fill="#53eafd" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.06em">HTTPS:38429</text>
<rect x="420" y="232" width="64" height="12" rx="2" fill="#0d0d10"/>
<text x="452" y="241" fill="#a1a1a1" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.06em">PERSIST</text>
<rect x="448" y="418" width="64" height="12" rx="2" fill="#0d0d10"/>
<text x="480" y="427" fill="#a1a1a1" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.06em">SQLITE / DATA</text>
<rect x="568" y="318" width="64" height="12" rx="2" fill="#0d0d10"/>
<text x="600" y="327" text-anchor="middle" fill="#6468f0" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.06em">K8S API</text>
<rect x="868" y="318" width="80" height="12" rx="2" fill="#0d0d10"/>
<text x="908" y="327" text-anchor="middle" fill="#53eafd" font-size="8" font-family="'Geist Mono',monospace" letter-spacing="0.06em">HTTPS / GIT</text>
<g role="group" aria-label="Browser or CLI client">
<rect x="72" y="160" width="160" height="72" rx="6" fill="#111114" stroke="#404040" stroke-width="1"/>
<rect x="80" y="168" width="56" height="12" rx="2" fill="transparent" stroke="rgba(255,255,255,0.28)" stroke-width="0.8"/>
<text x="108" y="177" text-anchor="middle" fill="#a1a1a1" font-size="7" font-family="'Geist Mono',monospace" letter-spacing="0.08em">CLIENT</text>
<text x="152" y="198" text-anchor="middle" fill="#ffffff" font-size="14" font-weight="600" font-family="'Figtree','Geist',sans-serif">Browser / CLI</text>
<text x="152" y="218" text-anchor="middle" fill="#737373" font-size="9" font-family="'Geist Mono',monospace">HTTPS · WebSocket</text>
</g>
<g role="group" aria-label="Kubernetes ClusterIP service">
<rect x="320" y="160" width="180" height="60" rx="6" fill="#111114" stroke="#404040" stroke-width="1"/>
<rect x="328" y="168" width="64" height="12" rx="2" fill="transparent" stroke="rgba(255,255,255,0.28)" stroke-width="0.8"/>
<text x="360" y="177" text-anchor="middle" fill="#a1a1a1" font-size="7" font-family="'Geist Mono',monospace" letter-spacing="0.08em">SERVICE</text>
<text x="410" y="196" text-anchor="middle" fill="#ffffff" font-size="14" font-weight="600" font-family="'Figtree','Geist',sans-serif">ClusterIP</text>
</g>
<g role="group" aria-label="Persistent Kandev control plane Pod">
<rect x="320" y="272" width="240" height="128" rx="6" fill="rgba(100,104,240,0.16)" stroke="#6468f0" stroke-width="1.2"/>
<rect x="328" y="280" width="32" height="12" rx="2" fill="transparent" stroke="rgba(100,104,240,0.60)" stroke-width="0.8"/>
<text x="344" y="289" text-anchor="middle" fill="#6468f0" font-size="7" font-family="'Geist Mono',monospace" letter-spacing="0.08em">POD</text>
<rect x="512" y="280" width="32" height="12" rx="2" fill="transparent" stroke="rgba(100,104,240,0.60)" stroke-width="0.8"/>
<text x="528" y="289" text-anchor="middle" fill="#6468f0" font-size="8" font-family="'Geist Mono',monospace">x1</text>
<text x="440" y="314" text-anchor="middle" fill="#ffffff" font-size="16" font-weight="600" font-family="'Figtree','Geist',sans-serif">Kandev control plane</text>
<rect x="328" y="328" width="224" height="24" rx="4" fill="rgba(255,255,255,0.05)" stroke="#404040" stroke-width="0.8"/>
<text x="340" y="344" fill="#ffffff" font-size="12" font-family="'Figtree','Geist',sans-serif">kandev</text>
<text x="540" y="344" text-anchor="end" fill="#a1a1a1" font-size="9" font-family="'Geist Mono',monospace">vX.Y.Z</text>
<text x="440" y="376" text-anchor="middle" fill="#a1a1a1" font-size="9" font-family="'Geist Mono',monospace">API identity · persistent home</text>
</g>
<g role="group" aria-label="Kandev persistent data PVC">
<rect x="320" y="456" width="240" height="72" rx="6" fill="#111114" stroke="#404040" stroke-width="1"/>
<rect x="328" y="464" width="32" height="12" rx="2" fill="transparent" stroke="rgba(255,255,255,0.28)" stroke-width="0.8"/>
<text x="344" y="473" text-anchor="middle" fill="#a1a1a1" font-size="7" font-family="'Geist Mono',monospace" letter-spacing="0.08em">PVC</text>
<text x="440" y="494" text-anchor="middle" fill="#ffffff" font-size="14" font-weight="600" font-family="'Figtree','Geist',sans-serif">kandev-data</text>
<text x="440" y="514" text-anchor="middle" fill="#737373" font-size="9" font-family="'Geist Mono',monospace">10 GiB · ReadWriteOnce</text>
</g>
<g role="group" aria-label="Optional task session Pods">
<rect x="640" y="272" width="220" height="128" rx="6" fill="#111114" stroke="#404040" stroke-width="1"/>
<rect x="648" y="280" width="32" height="12" rx="2" fill="transparent" stroke="rgba(255,255,255,0.28)" stroke-width="0.8"/>
<text x="664" y="289" text-anchor="middle" fill="#a1a1a1" font-size="7" font-family="'Geist Mono',monospace" letter-spacing="0.08em">POD</text>
<rect x="812" y="280" width="32" height="12" rx="2" fill="transparent" stroke="rgba(255,255,255,0.28)" stroke-width="0.8"/>
<text x="828" y="289" text-anchor="middle" fill="#a1a1a1" font-size="8" font-family="'Geist Mono',monospace">xN</text>
<text x="750" y="314" text-anchor="middle" fill="#ffffff" font-size="16" font-weight="600" font-family="'Figtree','Geist',sans-serif">Task session</text>
<rect x="648" y="328" width="204" height="24" rx="4" fill="rgba(255,255,255,0.05)" stroke="#404040" stroke-width="0.8"/>
<text x="660" y="344" fill="#ffffff" font-size="12" font-family="'Figtree','Geist',sans-serif">agentctl + agent CLI</text>
<text x="840" y="344" text-anchor="end" fill="#a1a1a1" font-size="9" font-family="'Geist Mono',monospace">vX.Y.Z</text>
<text x="750" y="376" text-anchor="middle" fill="#a1a1a1" font-size="9" font-family="'Geist Mono',monospace">workload identity · opt-in RBAC</text>
</g>
<g role="group" aria-label="External provider and repository APIs">
<rect x="952" y="296" width="176" height="80" rx="6" fill="#111114" stroke="#404040" stroke-width="1"/>
<rect x="960" y="304" width="48" height="12" rx="2" fill="transparent" stroke="rgba(255,255,255,0.28)" stroke-width="0.8"/>
<text x="984" y="313" text-anchor="middle" fill="#a1a1a1" font-size="7" font-family="'Geist Mono',monospace" letter-spacing="0.08em">API</text>
<text x="1040" y="332" text-anchor="middle" fill="#ffffff" font-size="14" font-weight="600" font-family="'Figtree','Geist',sans-serif">Repos + providers</text>
<text x="1040" y="352" text-anchor="middle" fill="#737373" font-size="9" font-family="'Geist Mono',monospace">outbound access</text>
</g>
<line x1="40" y1="600" x2="1160" y2="600" stroke="rgba(255,255,255,0.12)" stroke-width="0.8"/>
<rect x="64" y="624" width="14" height="10" rx="2" fill="rgba(100,104,240,0.16)" stroke="#6468f0" stroke-width="1"/>
<text x="88" y="632" fill="#a1a1a1" font-size="9" font-family="'Geist Mono',monospace" letter-spacing="0.06em">CONTROL PLANE</text>
<line x1="280" y1="629" x2="312" y2="629" stroke="#53eafd" stroke-width="1.2" marker-end="url(#k8s-arrow-link)"/>
<text x="328" y="632" fill="#a1a1a1" font-size="9" font-family="'Geist Mono',monospace" letter-spacing="0.06em">NETWORK BOUNDARY</text>
<text x="600" y="632" fill="#737373" font-size="9" font-family="'Geist Mono',monospace" letter-spacing="0.06em">KEEP CONTROL PLANE AT ONE REPLICA</text>
</svg>