| 1 | <?xml version='1.0' encoding='UTF-8'?> |
| 2 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720"> |
| 3 | <defs> |
| 4 | <pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid"> |
| 5 | <rect width="40" height="40" fill="#0E2A47" /> |
| 6 | <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" /> |
| 7 | </pattern> |
| 8 | <pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid"> |
| 9 | <rect width="8" height="8" fill="#0E2A47" /> |
| 10 | <path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" /> |
| 11 | </pattern> |
| 12 | <radialGradient id="endVignette" cx="50%" cy="50%" r="75%"> |
| 13 | <stop offset="50%" stop-color="#0E2A47" stop-opacity="0" /> |
| 14 | <stop offset="100%" stop-color="#000000" stop-opacity="0.5" /> |
| 15 | </radialGradient> |
| 16 | </defs> |
| 17 | |
| 18 | <g id="bg"> |
| 19 | <rect width="1280" height="720" fill="#0E2A47" /> |
| 20 | <rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.3" /> |
| 21 | <rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.45" /> |
| 22 | <rect width="1280" height="720" fill="url(#endVignette)" /> |
| 23 | </g> |
| 24 | |
| 25 | <g id="header"> |
| 26 | <text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Three Things to Remember</text> |
| 27 | <text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P10 / 10</text> |
| 28 | <line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" /> |
| 29 | </g> |
| 30 | |
| 31 | <g id="takeaway-1"> |
| 32 | <text x="120" y="200" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" letter-spacing="3">01 / ONE SPINE</text> |
| 33 | <line x1="120" y1="215" x2="160" y2="215" stroke="#FFB627" stroke-width="2" /> |
| 34 | <text x="120" y="270" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8"><tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627">kube-apiserver</tspan> mediates</text> |
| 35 | <text x="120" y="312" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">every state change.</text> |
| 36 | <text x="120" y="345" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="16" fill="#A0B8D0"><tspan x="120" dy="0">No component talks to another directly.</tspan><tspan x="120" dy="22">That constraint is what makes the system pluggable.</tspan></text> |
| 37 | </g> |
| 38 | |
| 39 | <g id="takeaway-2"> |
| 40 | <text x="120" y="408" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" letter-spacing="3">02 / ONE TRUTH</text> |
| 41 | <line x1="120" y1="423" x2="160" y2="423" stroke="#5BA3E0" stroke-width="2" /> |
| 42 | <text x="120" y="478" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8"><tspan font-family="Consolas, 'Courier New', monospace" fill="#5BA3E0">etcd</tspan> is the only</text> |
| 43 | <text x="120" y="520" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">persistent store.</text> |
| 44 | <text x="120" y="553" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="16" fill="#A0B8D0"><tspan x="120" dy="0">Lose etcd, lose the cluster. Back it up.</tspan><tspan x="120" dy="22">Run an odd number. Raft does the rest.</tspan></text> |
| 45 | </g> |
| 46 | |
| 47 | <g id="takeaway-3"> |
| 48 | <text x="700" y="200" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#7FD99F" letter-spacing="3">03 / ONE LOOP</text> |
| 49 | <line x1="700" y1="215" x2="740" y2="215" stroke="#7FD99F" stroke-width="2" /> |
| 50 | <text x="700" y="270" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">Every controller is the</text> |
| 51 | <text x="700" y="312" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">same loop, different scope.</text> |
| 52 | <text x="700" y="345" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="16" fill="#A0B8D0"><tspan x="700" dy="0"><tspan font-family="Consolas, 'Courier New', monospace" fill="#7FD99F">watch → diff → act</tspan>.</tspan><tspan x="700" dy="22">Once you see that, you can read the source of any controller.</tspan></text> |
| 53 | </g> |
| 54 | |
| 55 | <g id="reconcile-diagram"> |
| 56 | <text x="700" y="408" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" letter-spacing="2">THE LOOP, DRAWN</text> |
| 57 | <line x1="700" y1="420" x2="1180" y2="420" stroke="#2D4A6B" stroke-width="0.5" /> |
| 58 | |
| 59 | <g id="loop-watch"> |
| 60 | <circle cx="780" cy="500" r="40" fill="none" stroke="#5BA3E0" stroke-width="1.5" /> |
| 61 | <text x="780" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#5BA3E0" text-anchor="middle" font-weight="bold">watch</text> |
| 62 | <text x="780" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">desired</text> |
| 63 | </g> |
| 64 | <g id="loop-diff"> |
| 65 | <circle cx="940" cy="500" r="40" fill="none" stroke="#FFB627" stroke-width="1.5" /> |
| 66 | <text x="940" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">diff</text> |
| 67 | <text x="940" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">vs actual</text> |
| 68 | </g> |
| 69 | <g id="loop-act"> |
| 70 | <circle cx="1100" cy="500" r="40" fill="none" stroke="#7FD99F" stroke-width="1.5" /> |
| 71 | <text x="1100" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F" text-anchor="middle" font-weight="bold">act</text> |
| 72 | <text x="1100" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">converge</text> |
| 73 | </g> |
| 74 | |
| 75 | <line x1="820" y1="500" x2="900" y2="500" stroke="#5BA3E0" stroke-width="1" /> |
| 76 | <polygon points="900,500 893,496 893,504" fill="#5BA3E0" /> |
| 77 | <line x1="980" y1="500" x2="1060" y2="500" stroke="#FFB627" stroke-width="1" /> |
| 78 | <polygon points="1060,500 1053,496 1053,504" fill="#FFB627" /> |
| 79 | |
| 80 | <path d="M 1100,540 Q 1100,610 940,610 Q 780,610 780,540" fill="none" stroke="#7FD99F" stroke-width="1" stroke-dasharray="3 4" /> |
| 81 | <polygon points="780,540 776,548 784,548" fill="#7FD99F" /> |
| 82 | <text x="940" y="630" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#7FD99F" text-anchor="middle">repeat forever</text> |
| 83 | </g> |
| 84 | |
| 85 | <g id="divider"> |
| 86 | <line x1="660" y1="160" x2="660" y2="595" stroke="#2D4A6B" stroke-width="0.5" /> |
| 87 | </g> |
| 88 | |
| 89 | <g id="closing-mark"> |
| 90 | <line x1="120" y1="620" x2="180" y2="620" stroke="#FFB627" stroke-width="1.5" /> |
| 91 | <text x="120" y="643" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" letter-spacing="2">— END OF DRAWING SET —</text> |
| 92 | </g> |
| 93 | |
| 94 | <g id="footer"> |
| 95 | <line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" /> |
| 96 | <text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 10 OF 10 · TAKEAWAYS</text> |
| 97 | <text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">REV 1.0 · 2026-05-21</text> |
| 98 | </g> |
| 99 | </svg> |