| 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720"> |
| 2 | <defs> |
| 3 | <pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid"> |
| 4 | <rect width="40" height="40" fill="#0E2A47"/> |
| 5 | <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/> |
| 6 | </pattern> |
| 7 | <pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid"> |
| 8 | <rect width="8" height="8" fill="#0E2A47"/> |
| 9 | <path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/> |
| 10 | </pattern> |
| 11 | </defs> |
| 12 | |
| 13 | <g id="bg"> |
| 14 | <rect width="1280" height="720" fill="#0E2A47"/> |
| 15 | <rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/> |
| 16 | <rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/> |
| 17 | </g> |
| 18 | |
| 19 | <g id="header"> |
| 20 | <text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">HA Topology: Stacked or External</text> |
| 21 | <text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P08 / 10</text> |
| 22 | <line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/> |
| 23 | <text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">PRODUCTION CLUSTERS NEED ≥3 CONTROL-PLANE HOSTS · ODD-NUMBERED ETCD MEMBERS</text> |
| 24 | </g> |
| 25 | |
| 26 | <g id="stacked-topology"> |
| 27 | <rect x="80" y="110" width="560" height="500" fill="#1A3A5C" fill-opacity="0.3" stroke="#5BA3E0" stroke-width="0.8" stroke-dasharray="4 4"/> |
| 28 | <text x="100" y="135" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#5BA3E0" font-weight="bold">[ TOPOLOGY A ] STACKED</text> |
| 29 | <text x="100" y="155" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#A0B8D0">etcd co-located with control-plane host</text> |
| 30 | <line x1="80" y1="170" x2="640" y2="170" stroke="#5BA3E0" stroke-width="0.5"/> |
| 31 | |
| 32 | <g id="stacked-host-1"> |
| 33 | <polygon points="200,210 280,250 280,330 200,370 120,330 120,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/> |
| 34 | <line x1="200" y1="210" x2="200" y2="290" stroke="#5BA3E0" stroke-width="0.8"/> |
| 35 | <line x1="200" y1="290" x2="120" y2="250" stroke="#5BA3E0" stroke-width="0.8"/> |
| 36 | <line x1="200" y1="290" x2="280" y2="250" stroke="#5BA3E0" stroke-width="0.8"/> |
| 37 | <rect x="155" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/> |
| 38 | <text x="200" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text> |
| 39 | <rect x="155" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/> |
| 40 | <text x="200" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text> |
| 41 | <text x="200" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-01</text> |
| 42 | </g> |
| 43 | |
| 44 | <g id="stacked-host-2"> |
| 45 | <polygon points="360,210 440,250 440,330 360,370 280,330 280,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/> |
| 46 | <line x1="360" y1="210" x2="360" y2="290" stroke="#5BA3E0" stroke-width="0.8"/> |
| 47 | <line x1="360" y1="290" x2="280" y2="250" stroke="#5BA3E0" stroke-width="0.8"/> |
| 48 | <line x1="360" y1="290" x2="440" y2="250" stroke="#5BA3E0" stroke-width="0.8"/> |
| 49 | <rect x="315" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/> |
| 50 | <text x="360" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text> |
| 51 | <rect x="315" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/> |
| 52 | <text x="360" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text> |
| 53 | <text x="360" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-02</text> |
| 54 | </g> |
| 55 | |
| 56 | <g id="stacked-host-3"> |
| 57 | <polygon points="520,210 600,250 600,330 520,370 440,330 440,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/> |
| 58 | <line x1="520" y1="210" x2="520" y2="290" stroke="#5BA3E0" stroke-width="0.8"/> |
| 59 | <line x1="520" y1="290" x2="440" y2="250" stroke="#5BA3E0" stroke-width="0.8"/> |
| 60 | <line x1="520" y1="290" x2="600" y2="250" stroke="#5BA3E0" stroke-width="0.8"/> |
| 61 | <rect x="475" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/> |
| 62 | <text x="520" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text> |
| 63 | <rect x="475" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/> |
| 64 | <text x="520" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text> |
| 65 | <text x="520" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-03</text> |
| 66 | </g> |
| 67 | |
| 68 | <path d="M 200,330 Q 360,355 360,330" fill="none" stroke="#FFB627" stroke-width="0.8" stroke-dasharray="2 2"/> |
| 69 | <path d="M 360,330 Q 520,355 520,330" fill="none" stroke="#FFB627" stroke-width="0.8" stroke-dasharray="2 2"/> |
| 70 | |
| 71 | <g id="stacked-tradeoffs"> |
| 72 | <line x1="100" y1="430" x2="620" y2="430" stroke="#5BA3E0" stroke-width="0.5"/> |
| 73 | <text x="100" y="455" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F">▲ TRADE-OFFS</text> |
| 74 | <text x="100" y="478" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Fewer hosts to maintain</text> |
| 75 | <text x="100" y="497" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Lower infrastructure cost</text> |
| 76 | <text x="100" y="516" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Simpler kubeadm setup</text> |
| 77 | <text x="100" y="544" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− Host loss kills 1 apiserver AND 1 etcd</text> |
| 78 | <text x="100" y="563" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− Less failure isolation</text> |
| 79 | <text x="100" y="582" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− etcd I/O shares disk with apiserver</text> |
| 80 | </g> |
| 81 | </g> |
| 82 | |
| 83 | <g id="external-topology"> |
| 84 | <rect x="680" y="110" width="560" height="500" fill="#1A3A5C" fill-opacity="0.3" stroke="#FFB627" stroke-width="0.8" stroke-dasharray="4 4"/> |
| 85 | <text x="700" y="135" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">[ TOPOLOGY B ] EXTERNAL ETCD ★</text> |
| 86 | <text x="700" y="155" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#A0B8D0">etcd cluster on dedicated hosts</text> |
| 87 | <line x1="680" y1="170" x2="1240" y2="170" stroke="#FFB627" stroke-width="0.5"/> |
| 88 | |
| 89 | <text x="700" y="195" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#5BA3E0">CONTROL PLANE TIER</text> |
| 90 | |
| 91 | <g id="ext-cp-1"> |
| 92 | <polygon points="780,225 850,260 850,330 780,365 710,330 710,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/> |
| 93 | <rect x="740" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/> |
| 94 | <text x="780" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text> |
| 95 | <text x="780" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-01</text> |
| 96 | </g> |
| 97 | <g id="ext-cp-2"> |
| 98 | <polygon points="940,225 1010,260 1010,330 940,365 870,330 870,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/> |
| 99 | <rect x="900" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/> |
| 100 | <text x="940" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text> |
| 101 | <text x="940" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-02</text> |
| 102 | </g> |
| 103 | <g id="ext-cp-3"> |
| 104 | <polygon points="1100,225 1170,260 1170,330 1100,365 1030,330 1030,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/> |
| 105 | <rect x="1060" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/> |
| 106 | <text x="1100" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text> |
| 107 | <text x="1100" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-03</text> |
| 108 | </g> |
| 109 | |
| 110 | <line x1="780" y1="365" x2="780" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/> |
| 111 | <line x1="940" y1="365" x2="940" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/> |
| 112 | <line x1="1100" y1="365" x2="1100" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/> |
| 113 | |
| 114 | <text x="700" y="402" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">ETCD TIER (dedicated)</text> |
| 115 | |
| 116 | <rect x="710" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/> |
| 117 | <text x="760" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text> |
| 118 | <text x="760" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-01</text> |
| 119 | |
| 120 | <rect x="890" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/> |
| 121 | <text x="940" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text> |
| 122 | <text x="940" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-02</text> |
| 123 | |
| 124 | <rect x="1050" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/> |
| 125 | <text x="1100" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text> |
| 126 | <text x="1100" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-03</text> |
| 127 | |
| 128 | <path d="M 760,440 Q 850,475 940,440" fill="none" stroke="#FFB627" stroke-width="0.7" stroke-dasharray="2 2"/> |
| 129 | <path d="M 940,440 Q 1020,475 1100,440" fill="none" stroke="#FFB627" stroke-width="0.7" stroke-dasharray="2 2"/> |
| 130 | |
| 131 | <g id="ext-tradeoffs"> |
| 132 | <line x1="700" y1="490" x2="1220" y2="490" stroke="#FFB627" stroke-width="0.5"/> |
| 133 | <text x="700" y="515" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F">▲ TRADE-OFFS</text> |
| 134 | <text x="700" y="538" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Failure isolation across tiers</text> |
| 135 | <text x="700" y="557" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ etcd survives apiserver disk pressure</text> |
| 136 | <text x="700" y="576" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Independent scaling / upgrade paths</text> |
| 137 | <text x="700" y="595" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− Double the hosts to operate</text> |
| 138 | </g> |
| 139 | </g> |
| 140 | |
| 141 | <g id="ha-rules"> |
| 142 | <rect x="80" y="625" width="1160" height="38" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="0.8"/> |
| 143 | <text x="100" y="649" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#F0F4F8">Universal HA rules — <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627" font-weight="bold">≥3 control-plane hosts</tspan> · <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627" font-weight="bold">odd-numbered etcd members (3 or 5)</tspan> · scheduler & controller-manager are <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627" font-weight="bold">leader-elected</tspan> · spread across availability zones</text> |
| 144 | </g> |
| 145 | |
| 146 | <g id="footer"> |
| 147 | <line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/> |
| 148 | <text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 08 OF 10 · HA TOPOLOGY</text> |
| 149 | <text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 08 OF 10</text> |
| 150 | </g> |
| 151 | </svg> |
| 152 |