返回 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 <!-- icon: tabler-outline/database -->
61 <g transform="translate(556.0, 166.0) scale(0.9166666666666666)" fill="none" stroke="#FFB627" stroke-width="1.5">
62 <path d="M4 6a8 3 0 1 0 16 0a8 3 0 1 0 -16 0" />
63 <path d="M4 6v6a8 3 0 0 0 16 0v-6" />
64 <path d="M4 12v6a8 3 0 0 0 16 0v-6" />
65 </g>
66 <text x="588" y="184" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#F0F4F8" font-weight="bold">etcd</text>
67 <text x="556" y="206" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Distributed K/V store</text>
68 <text x="556" y="222" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Raft · all cluster state</text>
69 <line x1="640" y1="232" x2="640" y2="280" stroke="#FFB627" stroke-width="1" stroke-dasharray="2 3" />
70 <text x="660" y="260" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">↕ only direct talker</text>
71 </g>
72
73 <g id="spoke-scheduler">
74 <rect x="800" y="248" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
75 <rect x="800" y="248" width="6" height="84" fill="#5BA3E0" />
76 <!-- icon: tabler-outline/settings -->
77 <g transform="translate(816.0, 266.0) scale(0.9166666666666666)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
78 <path d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065" />
79 <path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
80 </g>
81 <text x="848" y="284" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kube-scheduler</text>
82 <text x="816" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">filter → score → bind</text>
83 <text x="816" y="322" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">picks node per Pod</text>
84 </g>
85
86 <g id="spoke-controller">
87 <rect x="800" y="488" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
88 <rect x="800" y="488" width="6" height="84" fill="#5BA3E0" />
89 <!-- icon: tabler-outline/refresh -->
90 <g transform="translate(816.0, 506.0) scale(0.9166666666666666)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
91 <path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
92 <path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
93 </g>
94 <text x="848" y="524" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">controller-manager</text>
95 <text x="816" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">N reconcile loops</text>
96 <text x="816" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">watch · diff · act</text>
97 </g>
98
99 <g id="spoke-cloud">
100 <rect x="260" y="248" width="200" height="84" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="5 3" />
101 <rect x="260" y="248" width="6" height="84" fill="#3E7AB8" />
102 <!-- icon: tabler-outline/cloud -->
103 <g transform="translate(276.0, 266.0) scale(0.9166666666666666)" fill="none" stroke="#3E7AB8" stroke-width="1.5">
104 <path d="M6.657 18c-2.572 0 -4.657 -2.007 -4.657 -4.483c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 1.927 -1.551 3.487 -3.465 3.487h-11.878" />
105 </g>
106 <text x="308" y="284" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">cloud-ctrl-mgr</text>
107 <text x="276" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">LB · routes · nodes</text>
108 <text x="276" y="322" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">optional · cloud only</text>
109 </g>
110
111 <g id="spoke-kubectl">
112 <rect x="260" y="488" width="200" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
113 <rect x="260" y="488" width="6" height="84" fill="#5BA3E0" />
114 <!-- icon: tabler-outline/terminal -->
115 <g transform="translate(276.0, 506.0) scale(0.9166666666666666)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
116 <path d="M5 7l5 5l-5 5" />
117 <path d="M12 19l7 0" />
118 </g>
119 <text x="308" y="524" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kubectl / clients</text>
120 <text x="276" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">CLI · operators · CI</text>
121 <text x="276" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">HTTPS REST</text>
122 </g>
123
124 <g id="annotations">
125 <line x1="75" y1="148" x2="120" y2="148" stroke="#FFB627" stroke-width="0.8" />
126 <line x1="75" y1="148" x2="75" y2="232" stroke="#FFB627" stroke-width="0.8" />
127 <text x="75" y="143" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">PERSISTENCE</text>
128
129 <line x1="1080" y1="290" x2="1140" y2="290" stroke="#5BA3E0" stroke-width="0.8" />
130 <line x1="1140" y1="290" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
131 <line x1="1080" y1="530" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
132 <text x="1148" y="394" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">RECONCILE</text>
133 <text x="1148" y="410" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">LOOPS</text>
134
135 <line x1="140" y1="290" x2="200" y2="290" stroke="#3E7AB8" stroke-width="0.8" />
136 <line x1="140" y1="290" x2="140" y2="332" stroke="#3E7AB8" stroke-width="0.8" />
137 <text x="80" y="316" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8">CLOUD GLUE</text>
138 </g>
139
140 <g id="key-fact">
141 <rect x="60" y="615" width="1160" height="40" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="0.8" />
142 <!-- icon: tabler-outline/info-circle -->
143 <g transform="translate(76.0, 624.0) scale(0.9166666666666666)" fill="none" stroke="#FFB627" stroke-width="1.5">
144 <path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" />
145 <path d="M12 9h.01" />
146 <path d="M11 12h1v4h1" />
147 </g>
148 <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>
149 </g>
150
151 <g id="footer">
152 <line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
153 <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>
154 <text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 03 OF 10</text>
155 </g>
156 </svg>
156 lines Plain Text