返回 ppt-master
03_control_plane.svg
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="hubGlow" cx="50%" cy="50%" r="50%">
13 <stop offset="0%" stop-color="#FFB627" stop-opacity="0.25" />
14 <stop offset="100%" stop-color="#FFB627" stop-opacity="0" />
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.4" />
21 <rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6" />
22 </g>
23
24 <g id="header">
25 <text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">The Control Plane: Five Components</text>
26 <text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P03 / 10</text>
27 <line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
28 <text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">ONE HUB · ONE PERSISTENT STORE · THREE SATELLITE LOOPS · ONE OPTIONAL CLOUD ADAPTER</text>
29 </g>
30
31 <g id="orbit-rings">
32 <circle cx="640" cy="410" r="220" fill="none" stroke="#3E7AB8" stroke-width="0.5" stroke-dasharray="2 6" opacity="0.4" />
33 <circle cx="640" cy="410" r="160" fill="none" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4" opacity="0.5" />
34 <circle cx="640" cy="410" r="270" fill="none" stroke="#3E7AB8" stroke-width="0.4" stroke-dasharray="1 5" opacity="0.3" />
35 </g>
36
37 <g id="spokes">
38 <line x1="640" y1="410" x2="640" y2="200" stroke="#FFB627" stroke-width="1.5" />
39 <line x1="640" y1="410" x2="855" y2="290" stroke="#5BA3E0" stroke-width="1.2" />
40 <line x1="640" y1="410" x2="855" y2="530" stroke="#5BA3E0" stroke-width="1.2" />
41 <line x1="640" y1="410" x2="425" y2="530" stroke="#5BA3E0" stroke-width="1.2" />
42 <line x1="640" y1="410" x2="425" y2="290" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="4 3" />
43 </g>
44
45 <g id="hub-apiserver">
46 <circle cx="640" cy="410" r="110" fill="url(#hubGlow)" />
47 <polygon points="640,330 700,365 700,455 640,490 580,455 580,365" fill="#0E2A47" stroke="#FFB627" stroke-width="2" />
48 <line x1="640" y1="330" x2="640" y2="410" stroke="#FFB627" stroke-width="1.2" />
49 <line x1="640" y1="410" x2="580" y2="365" stroke="#FFB627" stroke-width="1.2" />
50 <line x1="640" y1="410" x2="700" y2="365" stroke="#FFB627" stroke-width="1.2" />
51 <text x="640" y="430" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" text-anchor="middle" font-weight="bold">kube-apiserver</text>
52 <text x="640" y="450" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">REST + admission</text>
53 <text x="640" y="466" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">+ validation</text>
54 <text x="640" y="484" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">HUB · scales horizontally</text>
55 </g>
56
57 <g id="spoke-etcd">
58 <rect x="540" y="148" width="200" height="84" fill="#0E2A47" stroke="#FFB627" stroke-width="1.8" />
59 <rect x="540" y="148" width="6" height="84" fill="#FFB627" />
60 <use data-icon="tabler-outline/database" x="556" y="166" width="22" height="22" fill="#FFB627" stroke-width="1.5" />
61 <text x="588" y="184" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#F0F4F8" font-weight="bold">etcd</text>
62 <text x="556" y="206" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Distributed K/V store</text>
63 <text x="556" y="222" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Raft · all cluster state</text>
64 <line x1="640" y1="232" x2="640" y2="280" stroke="#FFB627" stroke-width="1" stroke-dasharray="2 3" />
65 <text x="660" y="260" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">↕ only direct talker</text>
66 </g>
67
68 <g id="spoke-scheduler">
69 <rect x="800" y="248" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
70 <rect x="800" y="248" width="6" height="84" fill="#5BA3E0" />
71 <use data-icon="tabler-outline/settings" x="816" y="266" width="22" height="22" fill="#5BA3E0" stroke-width="1.5" />
72 <text x="848" y="284" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kube-scheduler</text>
73 <text x="816" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">filter → score → bind</text>
74 <text x="816" y="322" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">picks node per Pod</text>
75 </g>
76
77 <g id="spoke-controller">
78 <rect x="800" y="488" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
79 <rect x="800" y="488" width="6" height="84" fill="#5BA3E0" />
80 <use data-icon="tabler-outline/refresh" x="816" y="506" width="22" height="22" fill="#5BA3E0" stroke-width="1.5" />
81 <text x="848" y="524" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">controller-manager</text>
82 <text x="816" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">N reconcile loops</text>
83 <text x="816" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">watch · diff · act</text>
84 </g>
85
86 <g id="spoke-cloud">
87 <rect x="260" y="248" width="200" height="84" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="5 3" />
88 <rect x="260" y="248" width="6" height="84" fill="#3E7AB8" />
89 <use data-icon="tabler-outline/cloud" x="276" y="266" width="22" height="22" fill="#3E7AB8" stroke-width="1.5" />
90 <text x="308" y="284" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">cloud-ctrl-mgr</text>
91 <text x="276" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">LB · routes · nodes</text>
92 <text x="276" y="322" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">optional · cloud only</text>
93 </g>
94
95 <g id="spoke-kubectl">
96 <rect x="260" y="488" width="200" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
97 <rect x="260" y="488" width="6" height="84" fill="#5BA3E0" />
98 <use data-icon="tabler-outline/terminal" x="276" y="506" width="22" height="22" fill="#5BA3E0" stroke-width="1.5" />
99 <text x="308" y="524" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kubectl / clients</text>
100 <text x="276" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">CLI · operators · CI</text>
101 <text x="276" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">HTTPS REST</text>
102 </g>
103
104 <g id="annotations">
105 <line x1="75" y1="148" x2="120" y2="148" stroke="#FFB627" stroke-width="0.8" />
106 <line x1="75" y1="148" x2="75" y2="232" stroke="#FFB627" stroke-width="0.8" />
107 <text x="75" y="143" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">PERSISTENCE</text>
108
109 <line x1="1080" y1="290" x2="1140" y2="290" stroke="#5BA3E0" stroke-width="0.8" />
110 <line x1="1140" y1="290" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
111 <line x1="1080" y1="530" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
112 <text x="1148" y="394" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">RECONCILE</text>
113 <text x="1148" y="410" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">LOOPS</text>
114
115 <line x1="140" y1="290" x2="200" y2="290" stroke="#3E7AB8" stroke-width="0.8" />
116 <line x1="140" y1="290" x2="140" y2="332" stroke="#3E7AB8" stroke-width="0.8" />
117 <text x="80" y="316" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8">CLOUD GLUE</text>
118 </g>
119
120 <g id="key-fact">
121 <rect x="60" y="615" width="1160" height="40" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="0.8" />
122 <use data-icon="tabler-outline/info-circle" x="76" y="624" width="22" height="22" fill="#FFB627" stroke-width="1.5" />
123 <text x="108" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#F0F4F8">Every state transition flows through <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627" font-weight="bold">kube-apiserver</tspan>; only the apiserver talks to <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627" font-weight="bold">etcd</tspan>. Every other component is a watcher of the API surface.</text>
124 </g>
125
126 <g id="footer">
127 <line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
128 <text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 03 OF 10 · CONTROL PLANE</text>
129 <text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 03 OF 10</text>
130 </g>
131 </svg>
131 lines Plain Text