feat: 导出 SproutClaw .sproutclaw 配置
包含 extensions、skills、prompts、settings、auth、models、mcp 等配置。 排除 node_modules、npm 缓存、sessions 等运行时数据。
@@ -0,0 +1,15 @@
|
||||
# ppt169_kubernetes_blueprint
|
||||
|
||||
- Canvas format: ppt169
|
||||
- Created: 20260521
|
||||
|
||||
## Directories
|
||||
|
||||
- `svg_output/`: raw SVG output
|
||||
- `svg_final/`: finalized SVG output
|
||||
- `images/`: presentation assets
|
||||
- `notes/`: speaker notes
|
||||
- `templates/`: project templates
|
||||
- `sources/`: source materials and normalized markdown
|
||||
- `exports/`: main native pptx (timestamped); `_svg.pptx` sibling added when exported with `--svg-snapshot`
|
||||
- `backup/<timestamp>/`: svg_output/ archive (always written in default-flow mode; safe to delete old timestamps)
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"version": 1,
|
||||
"defaults": {
|
||||
"transition": { "effect": "fade", "duration": 0.3 },
|
||||
"animation": { "effect": "fade", "duration": 0.4, "stagger": 0.18, "trigger": "after-previous" }
|
||||
},
|
||||
"slides": {
|
||||
"01_cover": {
|
||||
"animation": { "duration": 0.55, "stagger": 0.22 },
|
||||
"groups": {
|
||||
"title-block": { "effect": "fade", "order": 1, "duration": 0.6 },
|
||||
"metadata-block": { "effect": "fade", "order": 2, "duration": 0.45 },
|
||||
"cp-node": { "effect": "zoom", "order": 3, "duration": 0.7, "delay": 0.15 },
|
||||
"worker-1": { "effect": "wipe", "order": 4 },
|
||||
"worker-2": { "effect": "wipe", "order": 5 },
|
||||
"worker-3": { "effect": "wipe", "order": 6 }
|
||||
}
|
||||
},
|
||||
"02_two_planes": {
|
||||
"animation": { "duration": 0.4, "stagger": 0.14 },
|
||||
"groups": {
|
||||
"cp-apiserver": { "effect": "zoom", "order": 1, "duration": 0.55 },
|
||||
"cp-etcd": { "effect": "fade", "order": 2 },
|
||||
"cp-sched": { "effect": "fade", "order": 3 },
|
||||
"cp-ctrl": { "effect": "fade", "order": 4 },
|
||||
"cp-cloud": { "effect": "fade", "order": 5 },
|
||||
"spine": { "effect": "wipe", "order": 6, "duration": 0.55, "delay": 0.1 },
|
||||
"dp-node-1": { "effect": "wipe", "order": 7 },
|
||||
"dp-node-2": { "effect": "wipe", "order": 8 },
|
||||
"dp-node-3": { "effect": "wipe", "order": 9 }
|
||||
}
|
||||
},
|
||||
"03_control_plane": {
|
||||
"animation": { "duration": 0.4, "stagger": 0.15 },
|
||||
"groups": {
|
||||
"orbit-rings": { "effect": "fade", "order": 1, "duration": 0.5 },
|
||||
"hub-apiserver": { "effect": "zoom", "order": 2, "duration": 0.6, "delay": 0.1 },
|
||||
"spokes": { "effect": "wipe", "order": 3, "duration": 0.6 },
|
||||
"spoke-etcd": { "effect": "fade", "order": 4 },
|
||||
"spoke-scheduler": { "effect": "fade", "order": 5 },
|
||||
"spoke-controller": { "effect": "fade", "order": 6 },
|
||||
"spoke-cloud": { "effect": "fade", "order": 7 },
|
||||
"spoke-kubectl": { "effect": "fade", "order": 8 },
|
||||
"annotations": { "effect": "fade", "order": 9 },
|
||||
"key-fact": { "effect": "fade", "order": 10, "delay": 0.15 }
|
||||
}
|
||||
},
|
||||
"04_worker_node": {
|
||||
"animation": { "duration": 0.45, "stagger": 0.2 },
|
||||
"groups": {
|
||||
"isometric-node": { "effect": "wipe", "order": 1, "duration": 0.65 },
|
||||
"leader-kubelet": { "effect": "fade", "order": 2 },
|
||||
"leader-proxy": { "effect": "fade", "order": 3 },
|
||||
"leader-runtime": { "effect": "fade", "order": 4 }
|
||||
}
|
||||
},
|
||||
"05_pod_lifecycle": {
|
||||
"transition": { "effect": "wipe", "duration": 0.4 },
|
||||
"animation": { "duration": 0.5, "stagger": 0.22 },
|
||||
"groups": {
|
||||
"phase-track": { "effect": "wipe", "order": 1, "duration": 0.7 },
|
||||
"container-states": { "effect": "wipe", "order": 2, "duration": 0.6 },
|
||||
"probes-strip": { "effect": "fade", "order": 3 }
|
||||
}
|
||||
},
|
||||
"06_service_types": {
|
||||
"animation": { "duration": 0.4, "stagger": 0.16 },
|
||||
"groups": {
|
||||
"ruler-axis": { "effect": "wipe", "order": 1, "duration": 0.5 },
|
||||
"pillar-clusterip": { "effect": "wipe", "order": 2 },
|
||||
"pillar-nodeport": { "effect": "wipe", "order": 3 },
|
||||
"pillar-loadbalancer": { "effect": "zoom", "order": 4, "duration": 0.55, "delay": 0.1 },
|
||||
"pillar-externalname": { "effect": "wipe", "order": 5 }
|
||||
}
|
||||
},
|
||||
"07_storage": {
|
||||
"animation": { "duration": 0.4, "stagger": 0.15 },
|
||||
"groups": {
|
||||
"stack-diagram": { "effect": "wipe", "order": 1, "duration": 0.6 },
|
||||
"provisioner-spine": { "effect": "fade", "order": 2 },
|
||||
"provisioning-mode": { "effect": "fade", "order": 3 }
|
||||
}
|
||||
},
|
||||
"08_ha_topology": {
|
||||
"transition": { "effect": "wipe", "duration": 0.4 },
|
||||
"animation": { "duration": 0.5, "stagger": 0.22 },
|
||||
"groups": {
|
||||
"stacked-topology": { "effect": "wipe", "order": 1, "duration": 0.7 },
|
||||
"external-topology": { "effect": "wipe", "order": 2, "duration": 0.7, "delay": 0.15 },
|
||||
"ha-rules": { "effect": "fade", "order": 3 }
|
||||
}
|
||||
},
|
||||
"09_api_spine": {
|
||||
"transition": { "effect": "wipe", "duration": 0.4 },
|
||||
"animation": { "duration": 0.35, "stagger": 0.12 },
|
||||
"groups": {
|
||||
"lane-labels": { "effect": "fade", "order": 1 },
|
||||
"cli-kubectl": { "effect": "fade", "order": 2 },
|
||||
"cli-sched": { "effect": "fade", "order": 3 },
|
||||
"cli-ctrl": { "effect": "fade", "order": 4 },
|
||||
"cli-kubelet": { "effect": "fade", "order": 5 },
|
||||
"cli-proxy": { "effect": "fade", "order": 6 },
|
||||
"cli-cloud": { "effect": "fade", "order": 7 },
|
||||
"api-spine": { "effect": "zoom", "order": 8, "duration": 0.6, "delay": 0.15 },
|
||||
"persistence-column": { "effect": "fade", "order": 9 },
|
||||
"watch-arrows": { "effect": "wipe", "order": 10, "duration": 0.6 },
|
||||
"bottom-takeaway": { "effect": "fade", "order": 11, "delay": 0.15 }
|
||||
}
|
||||
},
|
||||
"10_takeaways": {
|
||||
"animation": { "duration": 0.5, "stagger": 0.28 },
|
||||
"groups": {
|
||||
"takeaway-1": { "effect": "fade", "order": 1, "duration": 0.6 },
|
||||
"takeaway-2": { "effect": "fade", "order": 2, "duration": 0.6 },
|
||||
"takeaway-3": { "effect": "fade", "order": 3, "duration": 0.6 },
|
||||
"reconcile-diagram": { "effect": "wipe", "order": 4, "duration": 0.7, "delay": 0.15 },
|
||||
"closing-mark": { "effect": "fade", "order": 5, "delay": 0.2 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,306 @@
|
||||
# ppt169_kubernetes_blueprint - Design Spec
|
||||
|
||||
> Capability-showcase deck for the Blueprint / Isometric Technical Drawing direction (P0 in `docs/roadmap.md`). Stress-tests geometric shape generalization and chart-structure extensibility through a Kubernetes cluster architecture walkthrough.
|
||||
|
||||
## I. Project Information
|
||||
|
||||
| Item | Value |
|
||||
| ---- | ----- |
|
||||
| **Project Name** | ppt169_kubernetes_blueprint |
|
||||
| **Canvas Format** | PPT 16:9 (1280×720) |
|
||||
| **Page Count** | 10 |
|
||||
| **Design Style** | B) General Consulting + Blueprint / Isometric Technical Drawing |
|
||||
| **Target Audience** | Engineers / DevOps / SRE / technical decision-makers |
|
||||
| **Use Case** | Internal technical briefing, training material, engineering whitepaper hero chapter |
|
||||
| **Created Date** | 2026-05-21 |
|
||||
|
||||
---
|
||||
|
||||
## II. Canvas Specification
|
||||
|
||||
| Property | Value |
|
||||
| -------- | ----- |
|
||||
| **Format** | PPT 16:9 |
|
||||
| **Dimensions** | 1280×720 |
|
||||
| **viewBox** | `0 0 1280 720` |
|
||||
| **Margins** | 60px left/right, 50px top/bottom |
|
||||
| **Content Area** | 1160×620 (header 60px, body 510px, footer 50px) |
|
||||
|
||||
---
|
||||
|
||||
## III. Visual Theme
|
||||
|
||||
### Theme Style
|
||||
|
||||
- **Style**: Blueprint / Isometric Technical Drawing — engineering schematic on dark blueprint paper, thin cyan line work, isometric 3D projection of components, technical annotation language (dimension lines, arrows, component codes, coordinate grids)
|
||||
- **Theme**: Dark theme
|
||||
- **Tone**: Engineering, technical, precise, schematic — speaks the language of an industrial blueprint hung on a wall, not a marketing slide
|
||||
|
||||
### Color Scheme
|
||||
|
||||
| Role | HEX | Purpose |
|
||||
| ---- | --- | ------- |
|
||||
| **Background** | `#0E2A47` | Deep navy blueprint paper |
|
||||
| **Secondary bg** | `#1A3A5C` | Region / panel backing |
|
||||
| **Primary** | `#5BA3E0` | Blueprint line color — component frames, connectors, isometric edges |
|
||||
| **Accent** | `#FFB627` | Single-spot amber — callouts, current state, key path highlight (classic engineering drawing convention) |
|
||||
| **Secondary accent** | `#3E7AB8` | Line darker tone, secondary borders |
|
||||
| **Body text** | `#F0F4F8` | Chalk-on-blueprint off-white |
|
||||
| **Secondary text** | `#A0B8D0` | Sub-annotation, captions |
|
||||
| **Tertiary text** | `#6B85A3` | Footer / page-number / coordinate labels |
|
||||
| **Border / grid** | `#2D4A6B` | Blueprint grid (thin gridlines under everything) |
|
||||
| **Success** | `#7FD99F` | Healthy / Running state |
|
||||
| **Warning** | `#FF6B6B` | Failed / NotReady / error state |
|
||||
|
||||
60-30-10: deep navy background ~60%, cyan line work ~30%, amber accent <10%
|
||||
|
||||
### Gradient Scheme
|
||||
|
||||
```xml
|
||||
<!-- Subtle blueprint paper vignette (corner darkening, like an old technical drawing) -->
|
||||
<radialGradient id="bgVignette" cx="50%" cy="50%" r="75%">
|
||||
<stop offset="60%" stop-color="#0E2A47" stop-opacity="0"/>
|
||||
<stop offset="100%" stop-color="#000000" stop-opacity="0.35"/>
|
||||
</radialGradient>
|
||||
|
||||
<!-- Amber callout glow -->
|
||||
<radialGradient id="amberGlow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#FFB627" stop-opacity="0.4"/>
|
||||
<stop offset="100%" stop-color="#FFB627" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## IV. Typography System
|
||||
|
||||
### Font Plan
|
||||
|
||||
**Typography direction**: Tech / developer — sans-serif body for readability + monospace for every K8s component name (`kube-apiserver` / `etcd` / `PVC` / `ClusterIP`), mirroring engineering documentation conventions.
|
||||
|
||||
| Role | Chinese | English | Fallback tail |
|
||||
| ---- | ------- | ------- | ------------- |
|
||||
| **Title** | `"Microsoft YaHei"` | `Arial` | `sans-serif` |
|
||||
| **Body** | `"Microsoft YaHei"` | `Arial` | `sans-serif` |
|
||||
| **Emphasis** | same as Body | — | — |
|
||||
| **Code** | — | `Consolas, "Courier New"` | `monospace` |
|
||||
|
||||
**Per-role font stacks**:
|
||||
|
||||
- Title: `Arial, "Microsoft YaHei", sans-serif`
|
||||
- Body: `Arial, "Microsoft YaHei", sans-serif`
|
||||
- Emphasis: same as Body
|
||||
- Code: `Consolas, "Courier New", monospace`
|
||||
|
||||
### Font Size Hierarchy
|
||||
|
||||
**Baseline**: Body font size = **18px** (dense — many components / labels per page)
|
||||
|
||||
| Purpose | Ratio to body | This deck (body=18) | Weight |
|
||||
| ------- | ------------- | ------------------- | ------ |
|
||||
| Cover title (hero) | 3.5x | 64px | Bold |
|
||||
| Chapter / section opener | 2.5x | 45px | Bold |
|
||||
| Page title | 1.7x | 30px | Bold |
|
||||
| Hero number | 1.7-2x | 32-36px | Bold |
|
||||
| Subtitle | 1.3x | 24px | SemiBold |
|
||||
| **Body** | **1x** | **18px** | Regular |
|
||||
| Annotation / caption | 0.75x | 13-14px | Regular |
|
||||
| Coordinate label / footer | 0.6x | 11px | Regular (mono) |
|
||||
|
||||
---
|
||||
|
||||
## V. Layout Principles
|
||||
|
||||
### Page Structure
|
||||
|
||||
- **Header area**: 60px — page title + small page-code (`P03 / 10`) in monospace right-aligned
|
||||
- **Content area**: 510px — central drawing region, often an isometric/blueprint diagram
|
||||
- **Footer area**: 50px — coordinate-grid origin marker, project code (`K8S-ARCH-2026`), page number
|
||||
|
||||
### Layout Pattern Library (this deck uses)
|
||||
|
||||
| Pattern | Pages |
|
||||
| ------- | ----- |
|
||||
| Single-element isometric centered | P01 (cover), P05 (lifecycle), P08 (HA topology), P09 (comm flow), P10 (closing) |
|
||||
| Two-plane vertical split (control/data) | P02 |
|
||||
| Hub-and-spoke (centered apiserver) | P03 |
|
||||
| Module composition (isometric node anatomy) | P04 |
|
||||
| Vertical pillars (4 parallel columns) | P06 |
|
||||
| Layered stack (PV / PVC / StorageClass) | P07 |
|
||||
|
||||
### Spacing Specification
|
||||
|
||||
| Element | This Project |
|
||||
| ------- | ------------ |
|
||||
| Safe margin from canvas edge | 60px (L/R), 50px (T/B) |
|
||||
| Content block gap | 30px |
|
||||
| Icon-text gap | 10px |
|
||||
| Isometric tile depth (3D z-offset) | 12px |
|
||||
| Grid spacing (background) | 40px (major) / 8px (minor) |
|
||||
| Annotation leader-line length | 60-120px |
|
||||
| Component-frame border-radius | 4px (engineering-precise, not soft cards) |
|
||||
|
||||
---
|
||||
|
||||
## VI. Icon Usage Specification
|
||||
|
||||
### Source
|
||||
|
||||
- **Library**: `tabler-outline` (line-art, matches blueprint line work)
|
||||
- **Stroke width**: `1.5` (deck-wide)
|
||||
- **Usage method**: SVG placeholder `<use data-icon="tabler-outline/icon-name" .../>`
|
||||
|
||||
### Recommended Icon List
|
||||
|
||||
| Purpose | Icon Path | Page |
|
||||
| ------- | --------- | ---- |
|
||||
| Network / cluster | `tabler-outline/network` | P02, P09 |
|
||||
| Server / API | `tabler-outline/server` | P03 |
|
||||
| Database / store | `tabler-outline/database` | P03 (etcd) |
|
||||
| Cog / scheduler | `tabler-outline/settings` | P03 (scheduler) |
|
||||
| Refresh / controller loop | `tabler-outline/refresh` | P03 (controller-manager) |
|
||||
| Cloud | `tabler-outline/cloud` | P03 (cloud-controller-manager) |
|
||||
| Cube / pod | `tabler-outline/cube` | P04, P05 |
|
||||
| Box / container | `tabler-outline/box` | P04 |
|
||||
| Route / proxy | `tabler-outline/route` | P04, P06 |
|
||||
| Heartbeat / lifecycle | `tabler-outline/heartbeat` | P05 |
|
||||
| Plug / service | `tabler-outline/plug` | P06 |
|
||||
| Disk / storage | `tabler-outline/device-floppy` | P07 |
|
||||
| Stack / layered | `tabler-outline/stack` | P02, P07 |
|
||||
| Shield / health | `tabler-outline/shield-check` | P08 |
|
||||
| Send / arrow | `tabler-outline/arrow-right` | universal |
|
||||
|
||||
---
|
||||
|
||||
## VII. Visualization Reference List
|
||||
|
||||
Catalog read: 71 templates
|
||||
|
||||
| Page | Template | Path | Summary-quote (verbatim) | Usage |
|
||||
| ---- | -------- | ---- | ------------------------ | ----- |
|
||||
| P03 | hub_spoke | `templates/charts/hub_spoke.svg` | "Pick for 1 core capability + 4-8 surrounding capabilities (platform/ecosystem); each spoke = title or title + 1-2 line description. Skip if" | kube-apiserver as central hub + 4 other control-plane components as spokes — captures the architectural truth that "everything goes through apiserver" |
|
||||
| P05 | process_flow | `templates/charts/process_flow.svg` | "Pick for 3-8 sequential steps connected by simple arrows — approval workflows, customer onboarding, request handling, lifecycle stages. Skip" | Pod lifecycle phases Pending → Running → Succeeded / Failed (with Unknown branch) |
|
||||
| P06 | vertical_pillars | `templates/charts/vertical_pillars.svg` | "Pick for 1×3 / 1×4 / 1×5 vertical column layout where each pillar = one independent category with title + bullets — PEST (Political/Economic" | 4 Service types as parallel pillars: ClusterIP / NodePort / LoadBalancer / ExternalName |
|
||||
| P09 | client_server_flow | `templates/charts/client_server_flow.svg` | "Pick for left-side clients + right-side servers with labeled bidirectional arrows for key interactions (request/response/push). Each module" | Components on the left + kube-apiserver center + etcd right, with labeled watch/write arrows |
|
||||
|
||||
**Runners-up considered**:
|
||||
|
||||
- `hub_inward_arrows` | rejected for P03: that template is for "forces pointing inward" (Porter's Five Forces). Apiserver is a hub all roads pass *through*, not a target of inward pressure — `hub_spoke` reads truer.
|
||||
- `numbered_steps` | rejected for P05: pod lifecycle is not a fixed sequence; it has a fork (Succeeded vs Failed) and a re-entry path (restart). `process_flow` handles branching arrows; `numbered_steps` forces a single chain.
|
||||
- `comparison_table` | rejected for P06: Service types vary along too many independent axes (scope / port range / external requirement / use case). A pillars layout lets each type carry its own structure without forcing parallel rows.
|
||||
- `layered_architecture` | rejected for P02 (P02 is free design): the catalog template is too card-heavy for the blueprint aesthetic — re-implementing the two-plane split as a custom isometric diagram is exactly the capability this deck demonstrates.
|
||||
|
||||
---
|
||||
|
||||
## VIII. Image Resource List
|
||||
|
||||
**No images.** This deck is intentionally all-SVG / all-vector — every architectural diagram is a hand-drawn isometric blueprint. Mixing raster AI images would dilute the stress-test of geometric shape generalization that the Blueprint direction is meant to demonstrate.
|
||||
|
||||
---
|
||||
|
||||
## IX. Content Outline
|
||||
|
||||
### Part 1: Setting the frame
|
||||
|
||||
#### Slide 01 — Cover
|
||||
|
||||
- **Layout**: Single isometric hero — a stylized cluster of cube-stacks rendered in cyan line art, centered, with title overlay
|
||||
- **Title**: `Kubernetes Cluster Architecture`
|
||||
- **Subtitle**: `A Blueprint of the Modern Container Orchestrator`
|
||||
- **Meta**: `K8S-ARCH-2026 · DRAWING 01 OF 10 · ENGINEERING REFERENCE`
|
||||
|
||||
#### Slide 02 — Two planes: control vs data
|
||||
|
||||
- **Layout**: Vertical split — top half = control plane (5 component glyphs in a row), bottom half = data plane (3 worker-node isometric blocks), connected by a single labeled spine
|
||||
- **Title**: `Two Planes, One Spine`
|
||||
- **Content**:
|
||||
- Control plane → global decisions, desired-state holder
|
||||
- Data plane → workload execution (Pods)
|
||||
- `kube-apiserver` is the only link — every line crosses through it
|
||||
|
||||
### Part 2: Component anatomy
|
||||
|
||||
#### Slide 03 — Control plane components
|
||||
|
||||
- **Layout**: Hub-and-spoke; `kube-apiserver` at the hub with `etcd` adjacent (the only direct talker); `kube-scheduler` / `kube-controller-manager` / `cloud-controller-manager` as spokes
|
||||
- **Visualization**: hub_spoke (adapted)
|
||||
- **Title**: `The Control Plane: 5 Components`
|
||||
- **Content**: one-line role for each component, mono code label per component
|
||||
|
||||
#### Slide 04 — Worker node anatomy
|
||||
|
||||
- **Layout**: Isometric exploded-view of a single worker node — outer shell labeled, kubelet/kube-proxy/runtime as inner modules, Pods stacked as cubes inside the runtime
|
||||
- **Title**: `Worker Node: Three Layers`
|
||||
- **Content**:
|
||||
- `kubelet` — agent reconciling PodSpecs against the local node
|
||||
- `kube-proxy` — Service rules via iptables / IPVS / nftables
|
||||
- Container runtime — `containerd` / `CRI-O` over the CRI contract
|
||||
|
||||
### Part 3: Lifecycle and networking
|
||||
|
||||
#### Slide 05 — Pod lifecycle phases
|
||||
|
||||
- **Layout**: Horizontal process flow; 4 phase nodes + 1 Unknown branch; restart loop callout
|
||||
- **Visualization**: process_flow (adapted)
|
||||
- **Title**: `Pod Lifecycle: One Schedule, Many States`
|
||||
- **Content**: `Pending → Running → {Succeeded | Failed}`; Unknown branch when node unreachable; restart policy `Always` / `OnFailure` / `Never`
|
||||
|
||||
#### Slide 06 — Service networking: 4 types
|
||||
|
||||
- **Layout**: 4 parallel pillars, each pillar an isometric tower showing what gets exposed where
|
||||
- **Visualization**: vertical_pillars (adapted)
|
||||
- **Title**: `Services: Four Ways to Be Reachable`
|
||||
- **Content**: ClusterIP (internal) / NodePort (30000-32767 on every node) / LoadBalancer (cloud LB) / ExternalName (DNS CNAME)
|
||||
|
||||
### Part 4: Persistence and topology
|
||||
|
||||
#### Slide 07 — Storage: three resources
|
||||
|
||||
- **Layout**: Layered stack — top: Pod, mid: PVC, bottom: PV; right side: StorageClass + CSI driver as the provisioner spine
|
||||
- **Title**: `Storage: PV / PVC / StorageClass`
|
||||
- **Content**: Static vs dynamic provisioning; access modes `RWO` / `ROX` / `RWX` / `RWOP`; reclaim `Retain` / `Delete`
|
||||
|
||||
#### Slide 08 — HA topology: stacked vs external etcd
|
||||
|
||||
- **Layout**: Two isometric diagrams side by side — left: stacked (etcd co-located with control-plane host); right: external (etcd on dedicated hosts) — each annotated with trade-offs
|
||||
- **Title**: `HA Topology: Stacked or External`
|
||||
- **Content**: ≥3 hosts; odd-numbered etcd members (3 or 5); leader-elected scheduler / controller-manager
|
||||
|
||||
### Part 5: The spine + closing
|
||||
|
||||
#### Slide 09 — Everything-through-apiserver
|
||||
|
||||
- **Layout**: client_server_flow — clients (kubectl / kubelet / scheduler / controller-manager) on the left, kube-apiserver center, etcd on the right; labeled arrows
|
||||
- **Visualization**: client_server_flow (adapted)
|
||||
- **Title**: `Every Line Crosses the API Server`
|
||||
- **Content**: API-mediated state transitions enable plug-ability, observability, audit
|
||||
|
||||
#### Slide 10 — Takeaways
|
||||
|
||||
- **Layout**: Negative-space-driven, three condensed lines centered against the blueprint grid
|
||||
- **Title**: `Three Things to Remember`
|
||||
- **Content**:
|
||||
- One spine — `kube-apiserver` mediates every state change
|
||||
- One truth — `etcd` is the only persistent store
|
||||
- One reconcile loop — controllers watch, diff, act; everything else is a variation
|
||||
|
||||
---
|
||||
|
||||
## X. Speaker Notes Requirements
|
||||
|
||||
- **Filename**: match SVG name (`01_cover.svg` → `notes/01_cover.md`)
|
||||
- **Total duration target**: ~12 minutes (1-1.5 min per content page; cover/closing shorter)
|
||||
- **Notes style**: Technical / informative — speaker is a senior engineer walking a peer audience through architecture; avoid marketing tone
|
||||
|
||||
---
|
||||
|
||||
## XI. Technical Constraints Reminder
|
||||
|
||||
Standard PPT Master SVG constraints (see `references/shared-standards.md`). Key reminders for this deck:
|
||||
|
||||
1. Every isometric line drawing is hand-authored SVG — `<polygon>` / `<line>` / `<path>` primitives; no raster fallback
|
||||
2. The blueprint grid background is a `<pattern>` ref'd by `<rect>` (allowed) — not `class` / `<style>`
|
||||
3. `<g opacity>` forbidden; set opacity per child
|
||||
4. All transparency via `stop-opacity` / `fill-opacity`; no `rgba()`
|
||||
5. Component codes (`kube-apiserver`, `etcd`, `PVC`, etc.) MUST use `font-family="Consolas, 'Courier New', monospace"` for the mono visual contract
|
||||
6. Coordinate labels in footer use the same mono family — engineering-document texture
|
||||
@@ -0,0 +1 @@
|
||||
Welcome to this engineering walkthrough of Kubernetes cluster architecture. Over the next ten drawings, we will read the system the way an engineer reads a blueprint: starting from the topology overview, going inside each component, then watching the whole thing operate. Every diagram is drawn as an isometric schematic rather than a marketing illustration, because the point is to see the structure, not the brand.
|
||||
@@ -0,0 +1 @@
|
||||
The first thing to internalize about Kubernetes is that it has two planes, not one. The control plane makes global decisions and holds the desired state of every API object. The data plane runs the actual workloads, one or more worker nodes carrying the Pods. The spine connecting them is the API server, and every line that crosses from one plane to the other must pass through it. Hold that picture in your head — every later drawing is a zoom into one part of it.
|
||||
@@ -0,0 +1 @@
|
||||
The control plane is five components arranged around one hub. At the center sits kube-apiserver, the only component allowed to talk to etcd, the persistent key-value store on its left. Around the apiserver three reconciliation loops listen and act: the scheduler picks a node for every unscheduled Pod, the controller-manager runs the workload controllers, and the optional cloud-controller-manager translates cluster intent into cloud-provider primitives like load balancers and routes. Notice that every spoke watches the apiserver — none of them call each other directly.
|
||||
@@ -0,0 +1 @@
|
||||
Now we drop into a single worker node. Three layers stack inside it. At the top, the kubelet acts as the node-level agent — it watches the apiserver for Pods scheduled to this node and instructs the runtime to make those Pods real. Below it, kube-proxy programs the network rules so that Service virtual IPs route to the correct backing Pods, using iptables, IPVS, or nftables depending on configuration. At the base, the container runtime — containerd or CRI-O — actually starts the containers through the CRI interface. The green cubes inside are the Pods, the smallest unit you can schedule.
|
||||
@@ -0,0 +1 @@
|
||||
A Pod is scheduled exactly once in its lifetime. It begins in the Pending phase while the scheduler binds it to a node and the runtime pulls images. Once at least one container is live, the phase becomes Running, the highlighted middle box of this diagram. From Running there are two terminal exits: Succeeded if every container exited cleanly, Failed if any exited with a non-zero status. A third branch, Unknown, appears when the apiserver loses contact with the node. Below the phases, the container-state track shows the per-container view: Waiting, Running, Terminated, with the restart policy controlling how kubelet handles failures, backed by exponential backoff up to five minutes.
|
||||
@@ -0,0 +1 @@
|
||||
A Service gives you a stable virtual endpoint in front of an ever-changing set of Pods. Four pillars, ordered from internal to external reach. ClusterIP is the default and the most common — internal only, virtual IP only, kube-proxy translates it. NodePort opens a static port on every node in the thirty-thousand range, useful when there is no cloud load balancer available. LoadBalancer, the highlighted production pattern, asks the cloud-controller-manager to provision a real external load balancer with a public IP. ExternalName is the edge case — no proxying, just a DNS CNAME alias pointing at something outside the cluster, typically used as a migration shim or to model an external database as a Kubernetes Service.
|
||||
@@ -0,0 +1 @@
|
||||
Persistent storage in Kubernetes is a three-resource contract. On the left stack, the Pod claims storage by naming a PersistentVolumeClaim, the PVC requests size and access mode, and the PersistentVolume represents a concrete backing disk — a cloud volume, an NFS share, or any storage backend. On the right side, the admin defines a StorageClass — a recipe — and a CSI driver implements it. When dynamic provisioning is enabled, a PVC request triggers the StorageClass to create a fresh PV on demand. The access modes ReadWriteOnce, ReadOnlyMany, ReadWriteMany, and ReadWriteOncePod control how many nodes or Pods can mount the volume, and the reclaim policy decides what happens to the data when the PVC is deleted.
|
||||
@@ -0,0 +1 @@
|
||||
Production clusters need at least three control-plane hosts and an odd number of etcd members for Raft quorum. Two topologies are common. On the left, stacked: etcd runs on the same host as the apiserver, simpler to operate and cheaper, at the cost of weaker failure isolation — losing one host loses one apiserver and one etcd member at the same time. On the right, the recommended external topology: etcd runs on dedicated hosts in its own tier, so the storage layer can survive apiserver pressure independently. Scheduler and controller-manager are leader-elected in either topology, which is why running three replicas is safe.
|
||||
@@ -0,0 +1 @@
|
||||
This is the punchline drawing. Every component on the left — kubectl clients, the scheduler, the controller-manager, every kubelet on every node, kube-proxy, and the cloud-controller-manager — talks to one component in the middle, kube-apiserver. On the right, the apiserver is the only thing that writes to etcd, the cluster's sole persistent store. The arrows in green going back left are status reports and decisions; the arrows in cyan going right are watches and patches. This pattern — everything is API-mediated — is what makes Kubernetes pluggable, observable, and auditable. You can join the cluster by writing a controller that watches the API, and everything else falls into place.
|
||||
@@ -0,0 +1 @@
|
||||
If you remember three things from this walkthrough, take these. First, one spine — kube-apiserver mediates every state change; no component talks to another directly, and that constraint is the architecture. Second, one truth — etcd is the only persistent store; back it up, run an odd number, and Raft handles the rest. Third, one loop — every controller in Kubernetes is the same shape: watch the API for desired state, diff it against actual state, act to converge. Once you see that loop, you can read the source of any controller in the ecosystem, because they are all variations on it.
|
||||
@@ -0,0 +1,57 @@
|
||||
# 01_cover
|
||||
|
||||
Welcome to this engineering walkthrough of Kubernetes cluster architecture. Over the next ten drawings, we will read the system the way an engineer reads a blueprint: starting from the topology overview, going inside each component, then watching the whole thing operate. Every diagram is drawn as an isometric schematic rather than a marketing illustration, because the point is to see the structure, not the brand.
|
||||
|
||||
---
|
||||
|
||||
# 02_two_planes
|
||||
|
||||
The first thing to internalize about Kubernetes is that it has two planes, not one. The control plane makes global decisions and holds the desired state of every API object. The data plane runs the actual workloads, one or more worker nodes carrying the Pods. The spine connecting them is the API server, and every line that crosses from one plane to the other must pass through it. Hold that picture in your head — every later drawing is a zoom into one part of it.
|
||||
|
||||
---
|
||||
|
||||
# 03_control_plane
|
||||
|
||||
The control plane is five components arranged around one hub. At the center sits kube-apiserver, the only component allowed to talk to etcd, the persistent key-value store on its left. Around the apiserver three reconciliation loops listen and act: the scheduler picks a node for every unscheduled Pod, the controller-manager runs the workload controllers, and the optional cloud-controller-manager translates cluster intent into cloud-provider primitives like load balancers and routes. Notice that every spoke watches the apiserver — none of them call each other directly.
|
||||
|
||||
---
|
||||
|
||||
# 04_worker_node
|
||||
|
||||
Now we drop into a single worker node. Three layers stack inside it. At the top, the kubelet acts as the node-level agent — it watches the apiserver for Pods scheduled to this node and instructs the runtime to make those Pods real. Below it, kube-proxy programs the network rules so that Service virtual IPs route to the correct backing Pods, using iptables, IPVS, or nftables depending on configuration. At the base, the container runtime — containerd or CRI-O — actually starts the containers through the CRI interface. The green cubes inside are the Pods, the smallest unit you can schedule.
|
||||
|
||||
---
|
||||
|
||||
# 05_pod_lifecycle
|
||||
|
||||
A Pod is scheduled exactly once in its lifetime. It begins in the Pending phase while the scheduler binds it to a node and the runtime pulls images. Once at least one container is live, the phase becomes Running, the highlighted middle box of this diagram. From Running there are two terminal exits: Succeeded if every container exited cleanly, Failed if any exited with a non-zero status. A third branch, Unknown, appears when the apiserver loses contact with the node. Below the phases, the container-state track shows the per-container view: Waiting, Running, Terminated, with the restart policy controlling how kubelet handles failures, backed by exponential backoff up to five minutes.
|
||||
|
||||
---
|
||||
|
||||
# 06_service_types
|
||||
|
||||
A Service gives you a stable virtual endpoint in front of an ever-changing set of Pods. Four pillars, ordered from internal to external reach. ClusterIP is the default and the most common — internal only, virtual IP only, kube-proxy translates it. NodePort opens a static port on every node in the thirty-thousand range, useful when there is no cloud load balancer available. LoadBalancer, the highlighted production pattern, asks the cloud-controller-manager to provision a real external load balancer with a public IP. ExternalName is the edge case — no proxying, just a DNS CNAME alias pointing at something outside the cluster, typically used as a migration shim or to model an external database as a Kubernetes Service.
|
||||
|
||||
---
|
||||
|
||||
# 07_storage
|
||||
|
||||
Persistent storage in Kubernetes is a three-resource contract. On the left stack, the Pod claims storage by naming a PersistentVolumeClaim, the PVC requests size and access mode, and the PersistentVolume represents a concrete backing disk — a cloud volume, an NFS share, or any storage backend. On the right side, the admin defines a StorageClass — a recipe — and a CSI driver implements it. When dynamic provisioning is enabled, a PVC request triggers the StorageClass to create a fresh PV on demand. The access modes ReadWriteOnce, ReadOnlyMany, ReadWriteMany, and ReadWriteOncePod control how many nodes or Pods can mount the volume, and the reclaim policy decides what happens to the data when the PVC is deleted.
|
||||
|
||||
---
|
||||
|
||||
# 08_ha_topology
|
||||
|
||||
Production clusters need at least three control-plane hosts and an odd number of etcd members for Raft quorum. Two topologies are common. On the left, stacked: etcd runs on the same host as the apiserver, simpler to operate and cheaper, at the cost of weaker failure isolation — losing one host loses one apiserver and one etcd member at the same time. On the right, the recommended external topology: etcd runs on dedicated hosts in its own tier, so the storage layer can survive apiserver pressure independently. Scheduler and controller-manager are leader-elected in either topology, which is why running three replicas is safe.
|
||||
|
||||
---
|
||||
|
||||
# 09_api_spine
|
||||
|
||||
This is the punchline drawing. Every component on the left — kubectl clients, the scheduler, the controller-manager, every kubelet on every node, kube-proxy, and the cloud-controller-manager — talks to one component in the middle, kube-apiserver. On the right, the apiserver is the only thing that writes to etcd, the cluster's sole persistent store. The arrows in green going back left are status reports and decisions; the arrows in cyan going right are watches and patches. This pattern — everything is API-mediated — is what makes Kubernetes pluggable, observable, and auditable. You can join the cluster by writing a controller that watches the API, and everything else falls into place.
|
||||
|
||||
---
|
||||
|
||||
# 10_takeaways
|
||||
|
||||
If you remember three things from this walkthrough, take these. First, one spine — kube-apiserver mediates every state change; no component talks to another directly, and that constraint is the architecture. Second, one truth — etcd is the only persistent store; back it up, run an odd number, and Raft handles the rest. Third, one loop — every controller in Kubernetes is the same shape: watch the API for desired state, diff it against actual state, act to converge. Once you see that loop, you can read the source of any controller in the ecosystem, because they are all variations on it.
|
||||
@@ -0,0 +1,225 @@
|
||||
# Kubernetes Cluster Architecture
|
||||
|
||||
> Research document for the Blueprint / Isometric capability-showcase deck. Source material gathered from `kubernetes.io` official documentation (2026-05). Concrete facts only; the Strategist composes the final slide copy.
|
||||
|
||||
## 1. Cluster topology overview
|
||||
|
||||
A Kubernetes cluster is a two-plane system:
|
||||
|
||||
- **Control plane** — global decision-making. Schedules workloads, reacts to events, holds the desired-state of every API object.
|
||||
- **Data plane (worker nodes)** — runs the actual application Pods. One or more nodes; production HA clusters spread the control plane and etcd across ≥3 nodes and across availability zones.
|
||||
|
||||
Minimum cluster = 1 control-plane host + 1 worker node. Production = ≥3 control-plane hosts, ≥3 etcd members (odd numbers for quorum), worker pool sized by workload.
|
||||
|
||||
All components communicate through **kube-apiserver** — the only component that talks to etcd. Every read/write of cluster state goes through the API server. This is the architectural spine.
|
||||
|
||||
## 2. Control plane components
|
||||
|
||||
Five components run the control plane:
|
||||
|
||||
### 2.1 kube-apiserver
|
||||
- Front-end of the cluster; exposes the Kubernetes HTTP API
|
||||
- The **only** component that talks to etcd directly
|
||||
- Horizontally scalable — multiple `kube-apiserver` instances behind a load balancer
|
||||
- Validates and admits requests, runs admission controllers, then persists to etcd
|
||||
|
||||
### 2.2 etcd
|
||||
- Distributed, consistent, highly-available key-value store
|
||||
- Holds **all** cluster state (API objects, config, secrets)
|
||||
- Raft consensus protocol; needs an odd number of members (typically 3 or 5)
|
||||
- Backup is operationally critical — losing etcd loses the cluster
|
||||
- HA topologies: stacked (etcd co-located with control-plane host) vs. external etcd
|
||||
|
||||
### 2.3 kube-scheduler
|
||||
- Watches the API server for Pods with no `nodeName` assigned
|
||||
- Picks a node for each unscheduled Pod based on:
|
||||
- Resource requests (CPU / memory / GPU)
|
||||
- Hardware / software / policy constraints
|
||||
- Affinity & anti-affinity rules
|
||||
- Taints & tolerations
|
||||
- Topology spread, data locality, inter-workload interference
|
||||
- Two-phase pipeline: **filtering** (which nodes are feasible?) → **scoring** (which feasible node is best?)
|
||||
- Writes the binding decision back to the API server — does not directly talk to the node
|
||||
|
||||
### 2.4 kube-controller-manager
|
||||
- One binary, many logically separate controllers; each runs a `watch → diff desired-vs-actual → act` reconcile loop
|
||||
- Core controllers:
|
||||
- **Node controller** — detects and responds to node failures
|
||||
- **Job controller** — creates Pods to drive Job objects to completion
|
||||
- **EndpointSlice controller** — maps Services to Pod IPs
|
||||
- **ServiceAccount controller** — creates default ServiceAccounts in new namespaces
|
||||
- **ReplicaSet / Deployment / StatefulSet / DaemonSet controllers** — workload primitives
|
||||
- Leader-elected for HA: only one replica is active at a time
|
||||
|
||||
### 2.5 cloud-controller-manager (optional)
|
||||
- Only on cloud-hosted clusters; absent in on-premises / bare-metal / local environments
|
||||
- Embeds cloud-vendor-specific control logic so the core Kubernetes binary stays vendor-neutral
|
||||
- Sub-controllers:
|
||||
- **Node controller** — confirms whether deleted nodes really were deleted at the cloud provider
|
||||
- **Route controller** — sets up cloud routes between nodes
|
||||
- **Service controller** — creates / updates / deletes cloud load balancers for Services of type `LoadBalancer`
|
||||
|
||||
## 3. Worker node components
|
||||
|
||||
Three components run on every worker node:
|
||||
|
||||
### 3.1 kubelet
|
||||
- The node-level agent
|
||||
- Watches the API server for Pods scheduled to its node
|
||||
- Takes PodSpecs, instructs the container runtime to start the containers, supervises health via probes
|
||||
- Reports node and Pod status back through the API server
|
||||
- Reconciles continuously — if a container dies, kubelet restarts per `restartPolicy` (`Always` / `OnFailure` / `Never`)
|
||||
- Heartbeats via Lease objects in the `kube-node-lease` namespace
|
||||
|
||||
### 3.2 kube-proxy (optional)
|
||||
- Implements the Kubernetes **Service** abstraction at the node level
|
||||
- Maintains network rules that translate the Service virtual IP into a backing Pod IP
|
||||
- Implementation backends:
|
||||
- `iptables` (default) — netfilter rules, lower CPU overhead
|
||||
- `IPVS` — kernel L4 load balancer, better at very large Service counts
|
||||
- `nftables` — modern netfilter framework (newer clusters)
|
||||
- `userspace` — legacy, slower, deprecated
|
||||
- Optional: a CNI plugin (Cilium, Calico-eBPF) can replace kube-proxy entirely
|
||||
|
||||
### 3.3 Container runtime
|
||||
- Actually runs the containers
|
||||
- CRI (Container Runtime Interface) standardizes the contract between kubelet and the runtime
|
||||
- Supported runtimes: **containerd**, **CRI-O**, any CRI-conformant implementation
|
||||
- Docker Engine removed as a built-in runtime (since v1.24)
|
||||
|
||||
## 4. Pod lifecycle
|
||||
|
||||
A Pod is the smallest deployable unit — one or more containers sharing a network namespace and storage volumes.
|
||||
|
||||
**Phases** (set by the control plane):
|
||||
|
||||
| Phase | Meaning |
|
||||
|---|---|
|
||||
| `Pending` | Accepted; not all containers running yet (waiting on scheduling, image pull, etc.) |
|
||||
| `Running` | Bound to a node; ≥1 container is starting / running / restarting |
|
||||
| `Succeeded` | All containers exited 0; will not restart |
|
||||
| `Failed` | All containers exited; ≥1 with non-zero status |
|
||||
| `Unknown` | API server cannot reach the node holding the Pod |
|
||||
|
||||
**Container states**: `Waiting` / `Running` / `Terminated` (each container in the Pod is tracked independently)
|
||||
|
||||
**Probes** (kubelet runs them):
|
||||
- `livenessProbe` — fail ⇒ kubelet restarts the container
|
||||
- `readinessProbe` — fail ⇒ kubelet removes Pod from Service endpoints (no restart)
|
||||
- `startupProbe` — gates the other two until the application has finished initializing
|
||||
- Probe methods: `exec` (run command) / `httpGet` / `tcpSocket` / `grpc`
|
||||
|
||||
**Termination flow** (graceful, default 30s):
|
||||
1. API server marks the Pod for deletion
|
||||
2. `preStop` hook (if defined) runs in the container
|
||||
3. `SIGTERM` to the container main process
|
||||
4. Up to `terminationGracePeriodSeconds` to exit cleanly
|
||||
5. `SIGKILL` if still alive
|
||||
|
||||
A Pod is scheduled **once** in its lifetime. Failed Pods are replaced (by their controller — Deployment / StatefulSet / Job — with a new UID), not rescheduled.
|
||||
|
||||
## 5. Service networking
|
||||
|
||||
A Service gives a stable virtual IP and DNS name in front of an ever-changing set of Pods.
|
||||
|
||||
**Service types**:
|
||||
|
||||
| Type | Where reachable | How |
|
||||
|---|---|---|
|
||||
| `ClusterIP` (default) | Inside the cluster only | Virtual IP in the Service CIDR; kube-proxy programs the iptables/IPVS rules |
|
||||
| `NodePort` | Any node's IP at a static port (30000–32767) | NodePort opens on every node; routes to the ClusterIP |
|
||||
| `LoadBalancer` | External cloud LB | cloud-controller-manager provisions the LB; targets the NodePort |
|
||||
| `ExternalName` | DNS CNAME | API server returns a CNAME record; no proxying |
|
||||
|
||||
**EndpointSlices** (replaced the older `Endpoints` resource in v1.21): track the Pod IPs backing a Service. Controller continuously rebuilds the slice as Pods come and go.
|
||||
|
||||
**DNS**: every Service is resolvable at `<svc>.<namespace>.svc.cluster.local`. Cluster DNS (CoreDNS) is a mandatory addon.
|
||||
|
||||
**Headless Service** (`clusterIP: None`): returns Pod IPs directly via DNS A records, no virtual IP — used by StatefulSets so each replica gets its own resolvable name.
|
||||
|
||||
## 6. Storage
|
||||
|
||||
Persistent storage in Kubernetes is split across three resources:
|
||||
|
||||
- **PersistentVolume (PV)** — a piece of provisioned storage; cluster-scoped resource with its own lifecycle
|
||||
- **PersistentVolumeClaim (PVC)** — a Pod's request for storage; namespaced
|
||||
- **StorageClass** — an admin-defined recipe for dynamically provisioning PVs on demand
|
||||
|
||||
**Access modes**:
|
||||
|
||||
| Mode | Meaning |
|
||||
|---|---|
|
||||
| `ReadWriteOnce` (RWO) | Mountable read-write on a single node |
|
||||
| `ReadOnlyMany` (ROX) | Mountable read-only on many nodes |
|
||||
| `ReadWriteMany` (RWX) | Mountable read-write on many nodes |
|
||||
| `ReadWriteOncePod` (RWOP) | Mountable read-write by a single Pod |
|
||||
|
||||
**Reclaim policies** (what happens when the PVC is deleted): `Retain` / `Delete` / `Recycle` (deprecated).
|
||||
|
||||
**CSI (Container Storage Interface)** is the modern plugin contract — every storage backend (cloud block storage, NFS, Ceph, etc.) ships a CSI driver, the in-tree plugins are deprecated.
|
||||
|
||||
**Volume modes**: `Filesystem` (default — mounted as a directory) vs. `Block` (raw block device).
|
||||
|
||||
## 7. High availability and topology
|
||||
|
||||
For production:
|
||||
|
||||
- **Control plane** — ≥3 control-plane hosts, kube-apiserver load-balanced, kube-scheduler and kube-controller-manager leader-elected
|
||||
- **etcd** — ≥3 members across hosts; **odd number** for quorum (3 or 5)
|
||||
- **Multi-zone** — spread control-plane hosts and worker nodes across availability zones; lose one zone, the cluster keeps going
|
||||
- **Two topologies** for control plane:
|
||||
- **Stacked** — each control-plane host runs an etcd member alongside kube-apiserver (simpler, less HW)
|
||||
- **External etcd** — etcd cluster on dedicated hosts (better failure isolation, more HW)
|
||||
|
||||
## 8. Self-healing and observability
|
||||
|
||||
What Kubernetes recovers from automatically:
|
||||
|
||||
- Container crash → kubelet restarts per `restartPolicy` with exponential backoff (100ms → 5min cap, resets after 10min healthy)
|
||||
- Pod failure → controller (Deployment / ReplicaSet / StatefulSet) creates a new Pod
|
||||
- Node failure → node controller marks the node `NotReady`; after `pod-eviction-timeout` (default 5min) Pods on it are marked for deletion, controllers replace them on other nodes
|
||||
- Workload imbalance → kube-scheduler places the new Pods on under-loaded nodes
|
||||
|
||||
What it does **not** recover from:
|
||||
|
||||
- Lost etcd quorum — cluster state is gone, manual restore from backup required
|
||||
- Lost API server — no new decisions possible, existing workloads keep running on their nodes until kubelet hits its watch timeout
|
||||
|
||||
**Observability addons** (universal in production):
|
||||
|
||||
- **DNS** (CoreDNS) — required; cluster DNS resolution
|
||||
- **Metrics** — metrics-server + Prometheus
|
||||
- **Logs** — Fluent Bit / Fluentd → central store (Loki, Elasticsearch, cloud log services)
|
||||
- **Dashboard** — optional web UI
|
||||
|
||||
## 9. Component communication summary
|
||||
|
||||
The traffic pattern is simple:
|
||||
|
||||
```
|
||||
kubectl / clients ──HTTPS──► kube-apiserver ◄──gRPC──► etcd
|
||||
▲
|
||||
│ watch / report
|
||||
┌───────────────────────────┼───────────────────────────┐
|
||||
│ │ │
|
||||
kube-scheduler kube-controller-manager cloud-controller-manager
|
||||
│
|
||||
│ watch
|
||||
┌───────────────────────────┼───────────────────────────┐
|
||||
│ │ │
|
||||
kubelet (node 1) kubelet (node 2) kubelet (node N)
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
container runtime container runtime container runtime
|
||||
+ kube-proxy + kube-proxy + kube-proxy
|
||||
```
|
||||
|
||||
Every line is API-server-mediated. No component talks directly to another except via the API server (and only the API server talks to etcd). This is what makes Kubernetes pluggable and observable — every state transition is an API event.
|
||||
|
||||
## Sources
|
||||
|
||||
- [Cluster Architecture | Kubernetes](https://kubernetes.io/docs/concepts/architecture/)
|
||||
- [Kubernetes Components | Kubernetes](https://kubernetes.io/docs/concepts/overview/components/)
|
||||
- [Service | Kubernetes](https://kubernetes.io/docs/concepts/services-networking/service/)
|
||||
- [Pod Lifecycle | Kubernetes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/)
|
||||
- [Persistent Volumes | Kubernetes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)
|
||||
@@ -0,0 +1,60 @@
|
||||
# Execution Lock
|
||||
|
||||
## canvas
|
||||
- viewBox: 0 0 1280 720
|
||||
- format: PPT 16:9
|
||||
|
||||
## colors
|
||||
- bg: #0E2A47
|
||||
- bg_secondary: #1A3A5C
|
||||
- primary: #5BA3E0
|
||||
- accent: #FFB627
|
||||
- secondary_accent: #3E7AB8
|
||||
- text: #F0F4F8
|
||||
- text_secondary: #A0B8D0
|
||||
- text_tertiary: #6B85A3
|
||||
- border: #2D4A6B
|
||||
- success: #7FD99F
|
||||
- warning: #FF6B6B
|
||||
|
||||
## typography
|
||||
- font_family: Arial, "Microsoft YaHei", sans-serif
|
||||
- code_family: Consolas, "Courier New", monospace
|
||||
- body: 18
|
||||
- cover_title: 64
|
||||
- chapter: 45
|
||||
- title: 30
|
||||
- hero_number: 36
|
||||
- subtitle: 24
|
||||
- annotation: 13
|
||||
- footer_label: 11
|
||||
|
||||
## icons
|
||||
- library: tabler-outline
|
||||
- stroke_width: 1.5
|
||||
- inventory: network, server, database, settings, refresh, cloud, cube, box, route, heartbeat, plug, device-floppy, stack, shield-check, arrow-right
|
||||
|
||||
## page_rhythm
|
||||
- P01: anchor
|
||||
- P02: dense
|
||||
- P03: dense
|
||||
- P04: dense
|
||||
- P05: anchor
|
||||
- P06: dense
|
||||
- P07: dense
|
||||
- P08: anchor
|
||||
- P09: anchor
|
||||
- P10: breathing
|
||||
|
||||
## page_charts
|
||||
- P03: hub_spoke
|
||||
- P05: process_flow
|
||||
- P06: vertical_pillars
|
||||
- P09: client_server_flow
|
||||
|
||||
## forbidden
|
||||
- Mixing icon libraries
|
||||
- rgba()
|
||||
- `<style>`, `class`, `<foreignObject>`, `textPath`, `@font-face`, `<animate*>`, `<script>`, `<iframe>`, `<symbol>`+`<use>`
|
||||
- `<g opacity>` (set opacity on each child element individually)
|
||||
- HTML named entities in text (` `, `—`, `©` …); raw Unicode only; XML reserved chars escaped as `& < > " '`
|
||||
@@ -0,0 +1,106 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<radialGradient id="bgVignette" cx="50%" cy="50%" r="75%">
|
||||
<stop offset="60%" stop-color="#0E2A47" stop-opacity="0" />
|
||||
<stop offset="100%" stop-color="#000000" stop-opacity="0.45" />
|
||||
</radialGradient>
|
||||
<radialGradient id="amberGlow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#FFB627" stop-opacity="0.35" />
|
||||
<stop offset="100%" stop-color="#FFB627" stop-opacity="0" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.5" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.7" />
|
||||
<rect width="1280" height="720" fill="url(#bgVignette)" />
|
||||
</g>
|
||||
|
||||
<g id="title-block">
|
||||
<line x1="60" y1="100" x2="220" y2="100" stroke="#FFB627" stroke-width="2" />
|
||||
<text x="60" y="130" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" letter-spacing="3">DRAWING NO. K8S-ARCH-2026 / 01</text>
|
||||
<text x="60" y="220" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="64" font-weight="bold" fill="#F0F4F8" letter-spacing="-1">Kubernetes</text>
|
||||
<text x="60" y="278" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="45" font-weight="bold" fill="#5BA3E0">Cluster Architecture</text>
|
||||
<text x="60" y="318" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="20" fill="#A0B8D0">A Blueprint of the Modern Container Orchestrator</text>
|
||||
</g>
|
||||
|
||||
<g id="metadata-block">
|
||||
<line x1="60" y1="610" x2="60" y2="660" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="78" y="624" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">SCALE</text>
|
||||
<text x="78" y="640" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8">1 : ∞</text>
|
||||
<text x="78" y="657" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">CLUSTER-LEVEL VIEW</text>
|
||||
|
||||
<line x1="220" y1="610" x2="220" y2="660" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="238" y="624" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">PROJECTION</text>
|
||||
<text x="238" y="640" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8">ISOMETRIC</text>
|
||||
<text x="238" y="657" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">30° / 30° / 90°</text>
|
||||
|
||||
<line x1="380" y1="610" x2="380" y2="660" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="398" y="624" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">SHEETS</text>
|
||||
<text x="398" y="640" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8">10 / 10</text>
|
||||
<text x="398" y="657" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">ENGINEERING REFERENCE</text>
|
||||
</g>
|
||||
|
||||
<g id="cluster-decor">
|
||||
<ellipse cx="900" cy="395" rx="280" ry="40" fill="#5BA3E0" fill-opacity="0.04" stroke="#3E7AB8" stroke-width="0.5" stroke-dasharray="3 5" />
|
||||
<line x1="900" y1="320" x2="730" y2="395" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 4" opacity="0.6" />
|
||||
<line x1="900" y1="320" x2="900" y2="395" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 4" opacity="0.6" />
|
||||
<line x1="900" y1="320" x2="1070" y2="395" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 4" opacity="0.6" />
|
||||
<line x1="600" y1="250" x2="640" y2="250" stroke="#FFB627" stroke-width="0.8" />
|
||||
<line x1="600" y1="250" x2="600" y2="220" stroke="#FFB627" stroke-width="0.8" />
|
||||
<text x="610" y="215" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">CONTROL PLANE</text>
|
||||
<line x1="600" y1="465" x2="640" y2="465" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<line x1="600" y1="465" x2="600" y2="555" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<text x="555" y="570" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#5BA3E0">DATA PLANE</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-node">
|
||||
<circle cx="900" cy="250" r="120" fill="url(#amberGlow)" />
|
||||
<polygon points="900,180 970,220 970,310 900,350 830,310 830,220" fill="#1A3A5C" stroke="#FFB627" stroke-width="2" />
|
||||
<line x1="900" y1="180" x2="900" y2="260" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="900" y1="260" x2="830" y2="220" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="900" y1="260" x2="970" y2="220" stroke="#FFB627" stroke-width="1.5" />
|
||||
<text x="900" y="276" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">CONTROL</text>
|
||||
<text x="900" y="290" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">PLANE</text>
|
||||
<text x="900" y="313" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#F0F4F8" text-anchor="middle" opacity="0.8">apiserver · etcd</text>
|
||||
<text x="900" y="326" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#F0F4F8" text-anchor="middle" opacity="0.8">scheduler · ctrl-mgr</text>
|
||||
</g>
|
||||
|
||||
<g id="worker-1">
|
||||
<polygon points="730,395 782,425 782,475 730,505 678,475 678,425" fill="#1A3A5C" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="730" y1="395" x2="730" y2="445" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="730" y1="445" x2="678" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="730" y1="445" x2="782" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="730" y="540" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">node-01</text>
|
||||
</g>
|
||||
<g id="worker-2">
|
||||
<polygon points="900,395 952,425 952,475 900,505 848,475 848,425" fill="#1A3A5C" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="900" y1="395" x2="900" y2="445" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="900" y1="445" x2="848" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="900" y1="445" x2="952" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="900" y="540" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">node-02</text>
|
||||
</g>
|
||||
<g id="worker-3">
|
||||
<polygon points="1070,395 1122,425 1122,475 1070,505 1018,475 1018,425" fill="#1A3A5C" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="1070" y1="395" x2="1070" y2="445" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1070" y1="445" x2="1018" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1070" y1="445" x2="1122" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="1070" y="540" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">node-03</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 01 OF 10 · COVER</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">REV 1.0 · 2026-05</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -0,0 +1,137 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Two Planes, One Spine</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P02 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">EVERY DECISION GOES THROUGH <tspan fill="#FFB627" font-family="Consolas, 'Courier New', monospace">kube-apiserver</tspan></text>
|
||||
</g>
|
||||
|
||||
<g id="cp-zone-decor">
|
||||
<rect x="80" y="105" width="1120" height="240" fill="#1A3A5C" fill-opacity="0.35" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4" />
|
||||
<text x="100" y="130" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" letter-spacing="2">[ CONTROL PLANE ]</text>
|
||||
<text x="100" y="148" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#A0B8D0">Global decision-making · desired-state holder</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-apiserver">
|
||||
<rect x="540" y="180" width="200" height="120" fill="#0E2A47" stroke="#FFB627" stroke-width="2" />
|
||||
<rect x="540" y="180" width="200" height="22" fill="#FFB627" />
|
||||
<text x="640" y="196" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">▲ HUB</text>
|
||||
<text x="640" y="234" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#FFB627" text-anchor="middle" font-weight="bold">kube-apiserver</text>
|
||||
<text x="640" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">REST + admission</text>
|
||||
<text x="640" y="276" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">+ validation gateway</text>
|
||||
<text x="640" y="294" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">↕ talks to etcd only</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-etcd">
|
||||
<rect x="120" y="195" width="160" height="90" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="200" y="220" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="200" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">key-value store</text>
|
||||
<text x="200" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">Raft · quorum</text>
|
||||
<text x="200" y="276" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#6B85A3" text-anchor="middle">3 or 5 members</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-sched">
|
||||
<rect x="320" y="195" width="180" height="90" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="410" y="220" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" text-anchor="middle" font-weight="bold">kube-scheduler</text>
|
||||
<text x="410" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">filter → score → bind</text>
|
||||
<text x="410" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">picks node per Pod</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-ctrl">
|
||||
<rect x="780" y="195" width="200" height="90" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="880" y="220" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" text-anchor="middle" font-weight="bold">controller-manager</text>
|
||||
<text x="880" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">watch · diff · act</text>
|
||||
<text x="880" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">N reconcile loops</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-cloud">
|
||||
<rect x="1020" y="195" width="160" height="90" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="4 3" />
|
||||
<text x="1100" y="220" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#3E7AB8" text-anchor="middle" font-weight="bold">cloud-ctrl-mgr</text>
|
||||
<text x="1100" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">cloud only</text>
|
||||
<text x="1100" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">LB · routes · nodes</text>
|
||||
<text x="1100" y="277" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#6B85A3" text-anchor="middle">optional</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-zone-decor-arrows">
|
||||
<path d="M 260,285 Q 260,318 420,318 Q 580,318 580,290" fill="none" stroke="#FFB627" stroke-width="1.2"/>
|
||||
<polygon points="580,290 575,300 585,300" fill="#FFB627"/>
|
||||
<line x1="740" y1="240" x2="780" y2="240" stroke="#FFB627" stroke-width="1.2" />
|
||||
<line x1="980" y1="240" x2="1020" y2="240" stroke="#3E7AB8" stroke-width="1" stroke-dasharray="3 3" />
|
||||
</g>
|
||||
|
||||
<g id="spine">
|
||||
<line x1="640" y1="345" x2="640" y2="415" stroke="#FFB627" stroke-width="2" />
|
||||
<polygon points="640,415 634,405 646,405" fill="#FFB627" />
|
||||
<polygon points="640,345 634,355 646,355" fill="#FFB627" />
|
||||
<rect x="555" y="368" width="170" height="22" fill="#0E2A47" />
|
||||
<text x="640" y="384" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" text-anchor="middle">API-MEDIATED</text>
|
||||
</g>
|
||||
|
||||
<g id="dp-zone-decor">
|
||||
<rect x="80" y="415" width="1120" height="220" fill="#1A3A5C" fill-opacity="0.35" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4" />
|
||||
<text x="100" y="440" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" letter-spacing="2">[ DATA PLANE ]</text>
|
||||
<text x="100" y="458" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#A0B8D0">Pod execution · workload runtime</text>
|
||||
<line x1="640" y1="415" x2="640" y2="445" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="270" y1="445" x2="640" y2="445" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="640" y1="445" x2="1010" y2="445" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="270" y1="445" x2="270" y2="490" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="640" y1="445" x2="640" y2="490" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="1010" y1="445" x2="1010" y2="490" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
</g>
|
||||
|
||||
<g id="dp-node-1">
|
||||
<polygon points="270,490 360,535 360,605 270,650 180,605 180,535" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="270" y1="490" x2="270" y2="570" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="270" y1="570" x2="180" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="270" y1="570" x2="360" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<rect x="230" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="259" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="288" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="270" y="675" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#A0B8D0" text-anchor="middle">worker-node-01</text>
|
||||
</g>
|
||||
|
||||
<g id="dp-node-2">
|
||||
<polygon points="640,490 730,535 730,605 640,650 550,605 550,535" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="640" y1="490" x2="640" y2="570" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="640" y1="570" x2="550" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="640" y1="570" x2="730" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<rect x="600" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="629" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="658" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="640" y="675" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#A0B8D0" text-anchor="middle">worker-node-02</text>
|
||||
</g>
|
||||
|
||||
<g id="dp-node-3">
|
||||
<polygon points="1010,490 1100,535 1100,605 1010,650 920,605 920,535" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="1010" y1="490" x2="1010" y2="570" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1010" y1="570" x2="920" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1010" y1="570" x2="1100" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<rect x="970" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="999" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="1010" y="675" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#A0B8D0" text-anchor="middle">worker-node-03</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 02 OF 10 · TOPOLOGY OVERVIEW</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 02 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,156 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<radialGradient id="hubGlow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#FFB627" stop-opacity="0.25" />
|
||||
<stop offset="100%" stop-color="#FFB627" stop-opacity="0" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<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>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P03 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="orbit-rings">
|
||||
<circle cx="640" cy="410" r="220" fill="none" stroke="#3E7AB8" stroke-width="0.5" stroke-dasharray="2 6" opacity="0.4" />
|
||||
<circle cx="640" cy="410" r="160" fill="none" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4" opacity="0.5" />
|
||||
<circle cx="640" cy="410" r="270" fill="none" stroke="#3E7AB8" stroke-width="0.4" stroke-dasharray="1 5" opacity="0.3" />
|
||||
</g>
|
||||
|
||||
<g id="spokes">
|
||||
<line x1="640" y1="410" x2="640" y2="200" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="640" y1="410" x2="855" y2="290" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="855" y2="530" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="425" y2="530" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="425" y2="290" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="4 3" />
|
||||
</g>
|
||||
|
||||
<g id="hub-apiserver">
|
||||
<circle cx="640" cy="410" r="110" fill="url(#hubGlow)" />
|
||||
<polygon points="640,330 700,365 700,455 640,490 580,455 580,365" fill="#0E2A47" stroke="#FFB627" stroke-width="2" />
|
||||
<line x1="640" y1="330" x2="640" y2="410" stroke="#FFB627" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="580" y2="365" stroke="#FFB627" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="700" y2="365" stroke="#FFB627" stroke-width="1.2" />
|
||||
<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>
|
||||
<text x="640" y="450" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">REST + admission</text>
|
||||
<text x="640" y="466" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">+ validation</text>
|
||||
<text x="640" y="484" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">HUB · scales horizontally</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-etcd">
|
||||
<rect x="540" y="148" width="200" height="84" fill="#0E2A47" stroke="#FFB627" stroke-width="1.8" />
|
||||
<rect x="540" y="148" width="6" height="84" fill="#FFB627" />
|
||||
<!-- icon: tabler-outline/database -->
|
||||
<g transform="translate(556.0, 166.0) scale(0.9166666666666666)" fill="none" stroke="#FFB627" stroke-width="1.5">
|
||||
<path d="M4 6a8 3 0 1 0 16 0a8 3 0 1 0 -16 0" />
|
||||
<path d="M4 6v6a8 3 0 0 0 16 0v-6" />
|
||||
<path d="M4 12v6a8 3 0 0 0 16 0v-6" />
|
||||
</g>
|
||||
<text x="588" y="184" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#F0F4F8" font-weight="bold">etcd</text>
|
||||
<text x="556" y="206" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Distributed K/V store</text>
|
||||
<text x="556" y="222" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Raft · all cluster state</text>
|
||||
<line x1="640" y1="232" x2="640" y2="280" stroke="#FFB627" stroke-width="1" stroke-dasharray="2 3" />
|
||||
<text x="660" y="260" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">↕ only direct talker</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-scheduler">
|
||||
<rect x="800" y="248" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="800" y="248" width="6" height="84" fill="#5BA3E0" />
|
||||
<!-- icon: tabler-outline/settings -->
|
||||
<g transform="translate(816.0, 266.0) scale(0.9166666666666666)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<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" />
|
||||
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
|
||||
</g>
|
||||
<text x="848" y="284" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kube-scheduler</text>
|
||||
<text x="816" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">filter → score → bind</text>
|
||||
<text x="816" y="322" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">picks node per Pod</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-controller">
|
||||
<rect x="800" y="488" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="800" y="488" width="6" height="84" fill="#5BA3E0" />
|
||||
<!-- icon: tabler-outline/refresh -->
|
||||
<g transform="translate(816.0, 506.0) scale(0.9166666666666666)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
|
||||
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
|
||||
</g>
|
||||
<text x="848" y="524" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">controller-manager</text>
|
||||
<text x="816" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">N reconcile loops</text>
|
||||
<text x="816" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">watch · diff · act</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-cloud">
|
||||
<rect x="260" y="248" width="200" height="84" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="5 3" />
|
||||
<rect x="260" y="248" width="6" height="84" fill="#3E7AB8" />
|
||||
<!-- icon: tabler-outline/cloud -->
|
||||
<g transform="translate(276.0, 266.0) scale(0.9166666666666666)" fill="none" stroke="#3E7AB8" stroke-width="1.5">
|
||||
<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" />
|
||||
</g>
|
||||
<text x="308" y="284" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">cloud-ctrl-mgr</text>
|
||||
<text x="276" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">LB · routes · nodes</text>
|
||||
<text x="276" y="322" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">optional · cloud only</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-kubectl">
|
||||
<rect x="260" y="488" width="200" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="260" y="488" width="6" height="84" fill="#5BA3E0" />
|
||||
<!-- icon: tabler-outline/terminal -->
|
||||
<g transform="translate(276.0, 506.0) scale(0.9166666666666666)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M5 7l5 5l-5 5" />
|
||||
<path d="M12 19l7 0" />
|
||||
</g>
|
||||
<text x="308" y="524" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kubectl / clients</text>
|
||||
<text x="276" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">CLI · operators · CI</text>
|
||||
<text x="276" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">HTTPS REST</text>
|
||||
</g>
|
||||
|
||||
<g id="annotations">
|
||||
<line x1="75" y1="148" x2="120" y2="148" stroke="#FFB627" stroke-width="0.8" />
|
||||
<line x1="75" y1="148" x2="75" y2="232" stroke="#FFB627" stroke-width="0.8" />
|
||||
<text x="75" y="143" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">PERSISTENCE</text>
|
||||
|
||||
<line x1="1080" y1="290" x2="1140" y2="290" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<line x1="1140" y1="290" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<line x1="1080" y1="530" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<text x="1148" y="394" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">RECONCILE</text>
|
||||
<text x="1148" y="410" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">LOOPS</text>
|
||||
|
||||
<line x1="140" y1="290" x2="200" y2="290" stroke="#3E7AB8" stroke-width="0.8" />
|
||||
<line x1="140" y1="290" x2="140" y2="332" stroke="#3E7AB8" stroke-width="0.8" />
|
||||
<text x="80" y="316" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8">CLOUD GLUE</text>
|
||||
</g>
|
||||
|
||||
<g id="key-fact">
|
||||
<rect x="60" y="615" width="1160" height="40" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="0.8" />
|
||||
<!-- icon: tabler-outline/info-circle -->
|
||||
<g transform="translate(76.0, 624.0) scale(0.9166666666666666)" fill="none" stroke="#FFB627" stroke-width="1.5">
|
||||
<path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" />
|
||||
<path d="M12 9h.01" />
|
||||
<path d="M11 12h1v4h1" />
|
||||
</g>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<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>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 03 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,110 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Worker Node: Three Layers</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P04 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">EXPLODED ISOMETRIC VIEW · KUBELET / KUBE-PROXY / CONTAINER RUNTIME</text>
|
||||
</g>
|
||||
|
||||
<g id="isometric-node">
|
||||
<polygon points="400,200 700,355 700,505 400,650 100,505 100,355" fill="#1A3A5C" fill-opacity="0.4" stroke="#5BA3E0" stroke-width="1.8"/>
|
||||
<line x1="400" y1="200" x2="400" y2="350" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<line x1="400" y1="350" x2="100" y2="355" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<line x1="400" y1="350" x2="700" y2="355" stroke="#5BA3E0" stroke-width="1"/>
|
||||
|
||||
<g id="kubelet-layer">
|
||||
<polygon points="400,275 580,368 580,398 400,305" fill="#FFB627" fill-opacity="0.15" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<polygon points="400,275 220,368 220,398 400,305" fill="#FFB627" fill-opacity="0.15" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<polygon points="220,368 400,275 580,368 400,460" fill="none" stroke="#FFB627" stroke-width="0.5" stroke-dasharray="2 3"/>
|
||||
<text x="400" y="370" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" text-anchor="middle" font-weight="bold">kubelet</text>
|
||||
<text x="400" y="390" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">node agent</text>
|
||||
</g>
|
||||
|
||||
<g id="kubeproxy-layer">
|
||||
<polygon points="400,455 580,548 580,578 400,485" fill="#5BA3E0" fill-opacity="0.12" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<polygon points="400,455 220,548 220,578 400,485" fill="#5BA3E0" fill-opacity="0.12" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<text x="400" y="540" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" text-anchor="middle" font-weight="bold">kube-proxy</text>
|
||||
<text x="400" y="560" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">service rules</text>
|
||||
</g>
|
||||
|
||||
<g id="runtime-layer">
|
||||
<polygon points="400,580 580,673 580,505 400,505" fill="#3E7AB8" fill-opacity="0.12" stroke="#3E7AB8" stroke-width="1.3"/>
|
||||
<polygon points="400,580 220,673 220,505 400,505" fill="#3E7AB8" fill-opacity="0.12" stroke="#3E7AB8" stroke-width="1.3"/>
|
||||
<text x="400" y="620" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#A0B8D0" text-anchor="middle" font-weight="bold">container runtime</text>
|
||||
<text x="400" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0" text-anchor="middle">CRI · containerd / CRI-O</text>
|
||||
</g>
|
||||
|
||||
<g id="pods-inside">
|
||||
<polygon points="335,572 365,587 365,597 335,582" fill="#7FD99F" fill-opacity="0.2" stroke="#7FD99F" stroke-width="0.8"/>
|
||||
<polygon points="380,594 410,609 410,619 380,604" fill="#7FD99F" fill-opacity="0.2" stroke="#7FD99F" stroke-width="0.8"/>
|
||||
<polygon points="425,616 455,631 455,641 425,626" fill="#7FD99F" fill-opacity="0.2" stroke="#7FD99F" stroke-width="0.8"/>
|
||||
</g>
|
||||
|
||||
<g id="dimension-lines">
|
||||
<line x1="660" y1="200" x2="720" y2="200" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<line x1="660" y1="650" x2="720" y2="650" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<line x1="710" y1="200" x2="710" y2="650" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<polygon points="710,200 706,210 714,210" fill="#5BA3E0"/>
|
||||
<polygon points="710,650 706,640 714,640" fill="#5BA3E0"/>
|
||||
<rect x="685" y="415" width="50" height="20" fill="#0E2A47"/>
|
||||
<text x="710" y="430" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#5BA3E0" text-anchor="middle">NODE</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="leader-kubelet">
|
||||
<line x1="580" y1="383" x2="780" y2="383" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<line x1="780" y1="383" x2="800" y2="383" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<circle cx="580" cy="383" r="2.5" fill="#FFB627"/>
|
||||
<rect x="800" y="335" width="380" height="90" fill="#1A3A5C" fill-opacity="0.4" stroke="#FFB627" stroke-width="1.2"/>
|
||||
<text x="816" y="358" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" font-weight="bold">kubelet</text>
|
||||
<text x="892" y="358" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— node agent</text>
|
||||
<text x="816" y="380" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Watches apiserver for Pods scheduled here</text>
|
||||
<text x="816" y="397" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Reconciles PodSpecs → instructs runtime</text>
|
||||
<text x="816" y="414" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Liveness / readiness / startup probes</text>
|
||||
</g>
|
||||
|
||||
<g id="leader-proxy">
|
||||
<line x1="580" y1="555" x2="780" y2="540" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="780" y1="540" x2="800" y2="540" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<circle cx="580" cy="555" r="2.5" fill="#5BA3E0"/>
|
||||
<rect x="800" y="450" width="380" height="80" fill="#1A3A5C" fill-opacity="0.4" stroke="#5BA3E0" stroke-width="1.2"/>
|
||||
<text x="816" y="473" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" font-weight="bold">kube-proxy</text>
|
||||
<text x="897" y="473" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— Service rules</text>
|
||||
<text x="816" y="495" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Translates virtual IP → backing Pod IPs</text>
|
||||
<text x="816" y="512" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0"><tspan font-family="Consolas, 'Courier New', monospace">iptables</tspan> · <tspan font-family="Consolas, 'Courier New', monospace">IPVS</tspan> · <tspan font-family="Consolas, 'Courier New', monospace">nftables</tspan> · optional with eBPF CNI</text>
|
||||
</g>
|
||||
|
||||
<g id="leader-runtime">
|
||||
<line x1="580" y1="625" x2="780" y2="620" stroke="#3E7AB8" stroke-width="0.8"/>
|
||||
<line x1="780" y1="620" x2="800" y2="620" stroke="#3E7AB8" stroke-width="0.8"/>
|
||||
<circle cx="580" cy="625" r="2.5" fill="#3E7AB8"/>
|
||||
<rect x="800" y="555" width="380" height="80" fill="#1A3A5C" fill-opacity="0.4" stroke="#3E7AB8" stroke-width="1.2"/>
|
||||
<text x="816" y="578" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#3E7AB8" font-weight="bold">container runtime</text>
|
||||
<text x="942" y="578" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— CRI implementer</text>
|
||||
<text x="816" y="600" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Pulls images, starts containers, manages lifecycle</text>
|
||||
<text x="816" y="617" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0"><tspan font-family="Consolas, 'Courier New', monospace">containerd</tspan> · <tspan font-family="Consolas, 'Courier New', monospace">CRI-O</tspan> · Docker removed since v1.24</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 04 OF 10 · WORKER NODE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 04 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.6 KiB |
@@ -0,0 +1,157 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<marker id="arrowCyan" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#5BA3E0" />
|
||||
</marker>
|
||||
<marker id="arrowAmber" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#FFB627" />
|
||||
</marker>
|
||||
<marker id="arrowWarn" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#FF6B6B" />
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Pod Lifecycle: One Schedule, Many States</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P05 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">A POD IS SCHEDULED ONCE · FAILED PODS ARE REPLACED, NOT RESCHEDULED</text>
|
||||
</g>
|
||||
|
||||
<g id="phase-track">
|
||||
<text x="100" y="200" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">PHASE TRACK</text>
|
||||
<line x1="60" y1="215" x2="1220" y2="215" stroke="#2D4A6B" stroke-width="0.5" stroke-dasharray="2 4" />
|
||||
|
||||
<g id="phase-pending">
|
||||
<rect x="100" y="240" width="180" height="100" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="100" y="240" width="180" height="22" fill="#5BA3E0" />
|
||||
<text x="190" y="257" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">PHASE 01</text>
|
||||
<text x="190" y="287" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#F0F4F8" text-anchor="middle" font-weight="bold">Pending</text>
|
||||
<text x="190" y="308" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">scheduling</text>
|
||||
<text x="190" y="324" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">+ image pull</text>
|
||||
</g>
|
||||
|
||||
<line x1="280" y1="290" x2="370" y2="290" stroke="#5BA3E0" stroke-width="2" marker-end="url(#arrowCyan)" />
|
||||
<text x="325" y="278" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">bind+pull</text>
|
||||
|
||||
<g id="phase-running">
|
||||
<rect x="380" y="240" width="200" height="100" fill="#0E2A47" stroke="#FFB627" stroke-width="2" />
|
||||
<rect x="380" y="240" width="200" height="22" fill="#FFB627" />
|
||||
<text x="480" y="257" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">PHASE 02 · CURRENT</text>
|
||||
<text x="480" y="287" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#FFB627" text-anchor="middle" font-weight="bold">Running</text>
|
||||
<text x="480" y="308" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">≥1 container live</text>
|
||||
<text x="480" y="324" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">probes active</text>
|
||||
</g>
|
||||
|
||||
<line x1="580" y1="270" x2="700" y2="270" stroke="#5BA3E0" stroke-width="2" marker-end="url(#arrowCyan)" />
|
||||
<line x1="580" y1="310" x2="700" y2="310" stroke="#5BA3E0" stroke-width="2" marker-end="url(#arrowCyan)" />
|
||||
<text x="640" y="262" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#7FD99F" text-anchor="middle">exit 0</text>
|
||||
<text x="640" y="328" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FF6B6B" text-anchor="middle">exit ≠ 0</text>
|
||||
|
||||
<g id="phase-succeeded">
|
||||
<rect x="710" y="220" width="180" height="60" fill="#0E2A47" stroke="#7FD99F" stroke-width="1.5" />
|
||||
<rect x="710" y="220" width="180" height="20" fill="#7FD99F" />
|
||||
<text x="800" y="234" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#0E2A47" text-anchor="middle" font-weight="bold">TERMINAL ✓</text>
|
||||
<text x="800" y="262" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#7FD99F" text-anchor="middle" font-weight="bold">Succeeded</text>
|
||||
</g>
|
||||
|
||||
<g id="phase-failed">
|
||||
<rect x="710" y="300" width="180" height="60" fill="#0E2A47" stroke="#FF6B6B" stroke-width="1.5" />
|
||||
<rect x="710" y="300" width="180" height="20" fill="#FF6B6B" />
|
||||
<text x="800" y="314" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#0E2A47" text-anchor="middle" font-weight="bold">TERMINAL ✗</text>
|
||||
<text x="800" y="342" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#FF6B6B" text-anchor="middle" font-weight="bold">Failed</text>
|
||||
</g>
|
||||
|
||||
<line x1="480" y1="340" x2="480" y2="395" stroke="#FF6B6B" stroke-width="1.5" stroke-dasharray="4 3" marker-end="url(#arrowWarn)" />
|
||||
|
||||
<g id="phase-unknown">
|
||||
<rect x="950" y="240" width="220" height="100" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.3" stroke-dasharray="5 3" />
|
||||
<rect x="950" y="240" width="220" height="22" fill="#3E7AB8" />
|
||||
<text x="1060" y="257" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">BRANCH · NODE UNREACHABLE</text>
|
||||
<text x="1060" y="287" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#A0B8D0" text-anchor="middle" font-weight="bold">Unknown</text>
|
||||
<text x="1060" y="308" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">apiserver lost contact</text>
|
||||
<text x="1060" y="324" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">with the node</text>
|
||||
</g>
|
||||
|
||||
<path d="M 580,240 Q 765,175 950,240" fill="none" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="3 4" marker-end="url(#arrowCyan)"/>
|
||||
</g>
|
||||
|
||||
<g id="container-states">
|
||||
<text x="100" y="425" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">CONTAINER-STATE TRACK</text>
|
||||
<line x1="60" y1="440" x2="1220" y2="440" stroke="#2D4A6B" stroke-width="0.5" stroke-dasharray="2 4" />
|
||||
|
||||
<g id="state-waiting">
|
||||
<rect x="100" y="460" width="280" height="70" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="100" y1="490" x2="380" y2="490" stroke="#5BA3E0" stroke-width="0.6" />
|
||||
<text x="116" y="482" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" font-weight="bold">Waiting</text>
|
||||
<text x="116" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">pulling image · applying secrets</text>
|
||||
<text x="116" y="524" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">resolving dependencies</text>
|
||||
</g>
|
||||
|
||||
<g id="state-running">
|
||||
<rect x="400" y="460" width="280" height="70" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="400" y1="490" x2="680" y2="490" stroke="#FFB627" stroke-width="0.6" />
|
||||
<text x="416" y="482" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" font-weight="bold">Running</text>
|
||||
<text x="416" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">executing successfully</text>
|
||||
<text x="416" y="524" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">.startedAt set</text>
|
||||
</g>
|
||||
|
||||
<g id="state-terminated">
|
||||
<rect x="700" y="460" width="280" height="70" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.2" />
|
||||
<line x1="700" y1="490" x2="980" y2="490" stroke="#3E7AB8" stroke-width="0.6" />
|
||||
<text x="716" y="482" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#A0B8D0" font-weight="bold">Terminated</text>
|
||||
<text x="716" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">exit status · signal recorded</text>
|
||||
<text x="716" y="524" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">.startedAt · .finishedAt</text>
|
||||
</g>
|
||||
|
||||
<line x1="380" y1="495" x2="400" y2="495" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan)" />
|
||||
<line x1="680" y1="495" x2="700" y2="495" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan)" />
|
||||
|
||||
<g id="restart-loop">
|
||||
<rect x="1000" y="460" width="180" height="70" fill="#0E2A47" stroke="#FFB627" stroke-width="1.2" stroke-dasharray="3 3" />
|
||||
<text x="1090" y="482" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">restartPolicy</text>
|
||||
<text x="1090" y="500" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">Always · OnFailure</text>
|
||||
<text x="1090" y="514" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">Never</text>
|
||||
<text x="1090" y="528" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#FFB627" text-anchor="middle">backoff 100ms → 5min</text>
|
||||
</g>
|
||||
<path d="M 1090,460 Q 1090,415 850,415 Q 700,415 700,455" fill="none" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3" marker-end="url(#arrowAmber)"/>
|
||||
</g>
|
||||
|
||||
<g id="probes-strip">
|
||||
<text x="100" y="585" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">PROBE GATES</text>
|
||||
<line x1="60" y1="600" x2="1220" y2="600" stroke="#2D4A6B" stroke-width="0.5" stroke-dasharray="2 4" />
|
||||
|
||||
<rect x="100" y="615" width="350" height="40" fill="none" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="115" y="640" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" font-weight="bold">startupProbe</text>
|
||||
<text x="225" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">gates liveness + readiness until passing</text>
|
||||
|
||||
<rect x="465" y="615" width="350" height="40" fill="none" stroke="#FFB627" stroke-width="1" />
|
||||
<text x="480" y="640" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" font-weight="bold">livenessProbe</text>
|
||||
<text x="590" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">fail → kubelet restarts container</text>
|
||||
|
||||
<rect x="830" y="615" width="350" height="40" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="845" y="640" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#7FD99F" font-weight="bold">readinessProbe</text>
|
||||
<text x="965" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">fail → drop from Service endpoints</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 05 OF 10 · POD LIFECYCLE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 05 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,149 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Services: Four Ways to Be Reachable</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P06 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">A SERVICE EXPOSES A STABLE VIRTUAL ENDPOINT IN FRONT OF AN EVER-CHANGING SET OF PODS</text>
|
||||
</g>
|
||||
|
||||
<g id="ruler-axis">
|
||||
<line x1="80" y1="120" x2="1200" y2="120" stroke="#3E7AB8" stroke-width="0.5"/>
|
||||
<text x="100" y="113" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">REACH AXIS →</text>
|
||||
<text x="1180" y="113" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627" text-anchor="end">PUBLIC ▶</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-clusterip">
|
||||
<line x1="180" y1="125" x2="180" y2="650" stroke="#5BA3E0" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.5"/>
|
||||
<polygon points="180,125 175,135 185,135" fill="#5BA3E0"/>
|
||||
<rect x="100" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#5BA3E0" stroke-width="1.5"/>
|
||||
<rect x="100" y="150" width="160" height="32" fill="#5BA3E0"/>
|
||||
<text x="180" y="171" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 01 · DEFAULT</text>
|
||||
<text x="180" y="208" font-family="Consolas, 'Courier New', monospace" font-size="17" fill="#F0F4F8" text-anchor="middle" font-weight="bold">ClusterIP</text>
|
||||
<line x1="120" y1="222" x2="240" y2="222" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<text x="180" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">cluster-internal</text>
|
||||
<text x="180" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">virtual IP only</text>
|
||||
<line x1="120" y1="280" x2="240" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="120" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="120" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Inside cluster</text>
|
||||
<text x="120" y="336" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Pod-to-Pod only</text>
|
||||
<text x="120" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Mechanism</text>
|
||||
<text x="120" y="390" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">kube-proxy rules</text>
|
||||
<text x="120" y="406" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">in Service CIDR</text>
|
||||
<text x="120" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ DNS</text>
|
||||
<text x="120" y="460" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#F0F4F8"><svc>.<ns>.svc</text>
|
||||
<text x="120" y="475" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">.cluster.local</text>
|
||||
<text x="120" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="120" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Backend services</text>
|
||||
<text x="120" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">internal APIs</text>
|
||||
<line x1="120" y1="580" x2="240" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="180" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">DEFAULT</text>
|
||||
<text x="180" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">90% of services</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-nodeport">
|
||||
<line x1="465" y1="125" x2="465" y2="650" stroke="#5BA3E0" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.5"/>
|
||||
<polygon points="465,125 460,135 470,135" fill="#5BA3E0"/>
|
||||
<rect x="385" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#5BA3E0" stroke-width="1.5"/>
|
||||
<rect x="385" y="150" width="160" height="32" fill="#5BA3E0"/>
|
||||
<text x="465" y="171" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 02</text>
|
||||
<text x="465" y="208" font-family="Consolas, 'Courier New', monospace" font-size="17" fill="#F0F4F8" text-anchor="middle" font-weight="bold">NodePort</text>
|
||||
<line x1="405" y1="222" x2="525" y2="222" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<text x="465" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">static port on</text>
|
||||
<text x="465" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">every node IP</text>
|
||||
<line x1="405" y1="280" x2="525" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="405" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="405" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">External via</text>
|
||||
<text x="405" y="336" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">NodeIP : NodePort</text>
|
||||
<text x="405" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Port range</text>
|
||||
<text x="405" y="390" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">30000-32767</text>
|
||||
<text x="405" y="406" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">default range</text>
|
||||
<text x="405" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Stack</text>
|
||||
<text x="405" y="460" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">opens on all nodes</text>
|
||||
<text x="405" y="476" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">→ ClusterIP → Pod</text>
|
||||
<text x="405" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="405" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">No cloud LB</text>
|
||||
<text x="405" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">dev / on-prem</text>
|
||||
<line x1="405" y1="580" x2="525" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="465" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">L4 EXPOSURE</text>
|
||||
<text x="465" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">no LB needed</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-loadbalancer">
|
||||
<line x1="750" y1="125" x2="750" y2="650" stroke="#FFB627" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.6"/>
|
||||
<polygon points="750,125 745,135 755,135" fill="#FFB627"/>
|
||||
<rect x="670" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#FFB627" stroke-width="2"/>
|
||||
<rect x="670" y="150" width="160" height="32" fill="#FFB627"/>
|
||||
<text x="750" y="171" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 03 · CLOUD</text>
|
||||
<text x="750" y="208" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#FFB627" text-anchor="middle" font-weight="bold">LoadBalancer</text>
|
||||
<line x1="690" y1="222" x2="810" y2="222" stroke="#FFB627" stroke-width="0.6"/>
|
||||
<text x="750" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">cloud LB with</text>
|
||||
<text x="750" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">external IP</text>
|
||||
<line x1="690" y1="280" x2="810" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="690" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="690" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Public Internet</text>
|
||||
<text x="690" y="336" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">cloud LB DNS</text>
|
||||
<text x="690" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Provisioned by</text>
|
||||
<text x="690" y="390" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8">cloud-ctrl-mgr</text>
|
||||
<text x="690" y="406" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">AWS ELB · GCP LB</text>
|
||||
<text x="690" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Stack</text>
|
||||
<text x="690" y="460" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">LB → NodePort</text>
|
||||
<text x="690" y="476" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">→ ClusterIP → Pod</text>
|
||||
<text x="690" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="690" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Public-facing app</text>
|
||||
<text x="690" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">requires cloud</text>
|
||||
<line x1="690" y1="580" x2="810" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="750" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">▲ PRODUCTION</text>
|
||||
<text x="750" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#F0F4F8" text-anchor="middle">canonical pattern</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-externalname">
|
||||
<line x1="1035" y1="125" x2="1035" y2="650" stroke="#3E7AB8" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.5"/>
|
||||
<polygon points="1035,125 1030,135 1040,135" fill="#3E7AB8"/>
|
||||
<rect x="955" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#3E7AB8" stroke-width="1.3" stroke-dasharray="5 3"/>
|
||||
<rect x="955" y="150" width="160" height="32" fill="#3E7AB8"/>
|
||||
<text x="1035" y="171" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 04 · DNS ONLY</text>
|
||||
<text x="1035" y="208" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#F0F4F8" text-anchor="middle" font-weight="bold">ExternalName</text>
|
||||
<line x1="975" y1="222" x2="1095" y2="222" stroke="#3E7AB8" stroke-width="0.6"/>
|
||||
<text x="1035" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">CNAME alias to</text>
|
||||
<text x="1035" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">external DNS</text>
|
||||
<line x1="975" y1="280" x2="1095" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="975" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="975" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Outside cluster</text>
|
||||
<text x="975" y="336" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">via DNS resolution</text>
|
||||
<text x="975" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Mechanism</text>
|
||||
<text x="975" y="390" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">DNS CNAME record</text>
|
||||
<text x="975" y="406" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">no kube-proxy</text>
|
||||
<text x="975" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Selector</text>
|
||||
<text x="975" y="460" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">none required</text>
|
||||
<text x="975" y="476" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">no backing Pods</text>
|
||||
<text x="975" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="975" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">External DB / API</text>
|
||||
<text x="975" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">migration shim</text>
|
||||
<line x1="975" y1="580" x2="1095" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="1035" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8" text-anchor="middle">NO PROXYING</text>
|
||||
<text x="1035" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">edge case only</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 06 OF 10 · SERVICE TYPES</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 06 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,191 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
<marker id="arrowCyan2" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#5BA3E0"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Storage: PV / PVC / StorageClass</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P07 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">PERSISTENT STORAGE IS A THREE-RESOURCE CONTRACT · POD CLAIM + ADMIN PROVISIONER</text>
|
||||
</g>
|
||||
|
||||
<g id="stack-diagram">
|
||||
<text x="80" y="120" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">CONSUMER STACK · TOP → BOTTOM</text>
|
||||
|
||||
<g id="layer-pod">
|
||||
<rect x="80" y="140" width="500" height="60" fill="#0E2A47" stroke="#7FD99F" stroke-width="1.5"/>
|
||||
<rect x="80" y="140" width="6" height="60" fill="#7FD99F"/>
|
||||
<!-- icon: tabler-outline/cube -->
|
||||
<g transform="translate(100.0, 153.0) scale(1.3333333333333333)" fill="none" stroke="#7FD99F" stroke-width="1.5">
|
||||
<path d="M21 16.008v-8.018a1.98 1.98 0 0 0 -1 -1.717l-7 -4.008a2.016 2.016 0 0 0 -2 0l-7 4.008c-.619 .355 -1 1.01 -1 1.718v8.018c0 .709 .381 1.363 1 1.717l7 4.008a2.016 2.016 0 0 0 2 0l7 -4.008c.619 -.355 1 -1.01 1 -1.718" />
|
||||
<path d="M12 22v-10" />
|
||||
<path d="M12 12l8.73 -5.04" />
|
||||
<path d="M3.27 6.96l8.73 5.04" />
|
||||
</g>
|
||||
<text x="145" y="167" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#7FD99F" font-weight="bold">Pod</text>
|
||||
<text x="180" y="167" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— consumes storage via</text>
|
||||
<text x="145" y="187" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8">volumes[].persistentVolumeClaim.claimName</text>
|
||||
</g>
|
||||
|
||||
<line x1="180" y1="200" x2="180" y2="225" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan2)"/>
|
||||
<text x="195" y="218" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">claims</text>
|
||||
|
||||
<g id="layer-pvc">
|
||||
<rect x="80" y="232" width="500" height="80" fill="#0E2A47" stroke="#FFB627" stroke-width="1.8"/>
|
||||
<rect x="80" y="232" width="6" height="80" fill="#FFB627"/>
|
||||
<!-- icon: tabler-outline/contract -->
|
||||
<g transform="translate(100.0, 248.0) scale(1.25)" fill="none" stroke="#FFB627" stroke-width="1.5">
|
||||
<path d="M8 21h-2a3 3 0 0 1 -3 -3v-1h5.5" />
|
||||
<path d="M17 8.5v-3.5a2 2 0 1 1 2 2h-2" />
|
||||
<path d="M19 3h-11a3 3 0 0 0 -3 3v11" />
|
||||
<path d="M9 7h4" />
|
||||
<path d="M9 11h4" />
|
||||
<path d="M18.42 12.61a2.1 2.1 0 0 1 2.97 2.97l-6.39 6.42h-3v-3l6.42 -6.39" />
|
||||
</g>
|
||||
<text x="145" y="263" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">PersistentVolumeClaim</text>
|
||||
<text x="362" y="263" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— pvc — namespaced</text>
|
||||
<text x="145" y="284" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">request: size + accessModes + storageClassName</text>
|
||||
<text x="145" y="301" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">like a Pod requesting CPU/RAM — but for disk</text>
|
||||
</g>
|
||||
|
||||
<line x1="180" y1="312" x2="180" y2="337" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan2)"/>
|
||||
<text x="195" y="330" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">binds 1:1</text>
|
||||
|
||||
<g id="layer-pv">
|
||||
<rect x="80" y="344" width="500" height="80" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5"/>
|
||||
<rect x="80" y="344" width="6" height="80" fill="#5BA3E0"/>
|
||||
<!-- icon: tabler-outline/device-floppy -->
|
||||
<g transform="translate(100.0, 360.0) scale(1.25)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M6 4h10l4 4v10a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2" />
|
||||
<path d="M10 14a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
|
||||
<path d="M14 4l0 4l-6 0l0 -4" />
|
||||
</g>
|
||||
<text x="145" y="375" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#5BA3E0" font-weight="bold">PersistentVolume</text>
|
||||
<text x="316" y="375" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— pv — cluster-scoped</text>
|
||||
<text x="145" y="396" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">a concrete storage resource (NFS / iSCSI / cloud disk)</text>
|
||||
<text x="145" y="413" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">lifecycle independent of any Pod</text>
|
||||
</g>
|
||||
|
||||
<line x1="180" y1="424" x2="180" y2="449" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" marker-end="url(#arrowCyan2)"/>
|
||||
<text x="195" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">backing media</text>
|
||||
|
||||
<g id="layer-backend">
|
||||
<rect x="80" y="456" width="500" height="60" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="5 3"/>
|
||||
<rect x="80" y="456" width="6" height="60" fill="#3E7AB8"/>
|
||||
<!-- icon: tabler-outline/server -->
|
||||
<g transform="translate(100.0, 468.0) scale(1.25)" fill="none" stroke="#3E7AB8" stroke-width="1.5">
|
||||
<path d="M3 7a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3" />
|
||||
<path d="M3 15a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3l0 -2" />
|
||||
<path d="M7 8l0 .01" />
|
||||
<path d="M7 16l0 .01" />
|
||||
</g>
|
||||
<text x="145" y="483" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#3E7AB8" font-weight="bold">Storage backend</text>
|
||||
<text x="145" y="504" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">EBS · Persistent Disk · Ceph RBD · NFS · iSCSI · LonghornFS</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="provisioner-spine">
|
||||
<text x="640" y="120" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">PROVISIONER SPINE · ADMIN SIDE</text>
|
||||
<rect x="640" y="140" width="540" height="376" fill="#1A3A5C" fill-opacity="0.3" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4"/>
|
||||
|
||||
<g id="storage-class">
|
||||
<rect x="660" y="160" width="500" height="100" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<rect x="660" y="160" width="6" height="100" fill="#FFB627"/>
|
||||
<!-- icon: tabler-outline/template -->
|
||||
<g transform="translate(680.0, 178.0) scale(1.25)" fill="none" stroke="#FFB627" stroke-width="1.5">
|
||||
<path d="M4 5a1 1 0 0 1 1 -1h14a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-14a1 1 0 0 1 -1 -1l0 -2" />
|
||||
<path d="M4 13a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -6" />
|
||||
<path d="M14 12l6 0" />
|
||||
<path d="M14 16l6 0" />
|
||||
<path d="M14 20l6 0" />
|
||||
</g>
|
||||
<text x="722" y="193" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">StorageClass</text>
|
||||
<text x="862" y="193" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— admin recipe</text>
|
||||
<text x="722" y="214" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">defines: provisioner + parameters + reclaimPolicy</text>
|
||||
<text x="722" y="231" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">PVC requests by name → PV is created on demand</text>
|
||||
<text x="722" y="251" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">enables <tspan fill="#FFB627" font-weight="bold">dynamic provisioning</tspan> — no static PV setup</text>
|
||||
</g>
|
||||
|
||||
<g id="csi-driver">
|
||||
<rect x="660" y="280" width="500" height="80" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="660" y="280" width="6" height="80" fill="#5BA3E0"/>
|
||||
<!-- icon: tabler-outline/plug-connected -->
|
||||
<g transform="translate(680.0, 296.0) scale(1.25)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5" />
|
||||
<path d="M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5" />
|
||||
<path d="M3 21l2.5 -2.5" />
|
||||
<path d="M18.5 5.5l2.5 -2.5" />
|
||||
<path d="M10 11l-2 2" />
|
||||
<path d="M13 14l-2 2" />
|
||||
</g>
|
||||
<text x="722" y="311" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#5BA3E0" font-weight="bold">CSI Driver</text>
|
||||
<text x="832" y="311" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— Container Storage Interface</text>
|
||||
<text x="722" y="333" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">vendor plugin that creates / attaches / mounts volumes</text>
|
||||
<text x="722" y="349" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">replaces deprecated in-tree storage plugins</text>
|
||||
</g>
|
||||
|
||||
<g id="access-modes">
|
||||
<text x="660" y="392" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627">▼ ACCESS MODES</text>
|
||||
<rect x="660" y="402" width="120" height="40" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="720" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle" font-weight="bold">RWO</text>
|
||||
<text x="720" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">1 node, R/W</text>
|
||||
<rect x="785" y="402" width="120" height="40" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="845" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle" font-weight="bold">ROX</text>
|
||||
<text x="845" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">many nodes, RO</text>
|
||||
<rect x="910" y="402" width="120" height="40" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="970" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle" font-weight="bold">RWX</text>
|
||||
<text x="970" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">many nodes, R/W</text>
|
||||
<rect x="1035" y="402" width="120" height="40" fill="none" stroke="#FFB627" stroke-width="1"/>
|
||||
<text x="1095" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">RWOP</text>
|
||||
<text x="1095" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">1 pod, R/W</text>
|
||||
</g>
|
||||
|
||||
<g id="reclaim">
|
||||
<text x="660" y="476" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627">▼ RECLAIM POLICY</text>
|
||||
<rect x="660" y="486" width="160" height="22" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="740" y="501" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle">Retain</text>
|
||||
<rect x="830" y="486" width="160" height="22" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="910" y="501" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle">Delete (default)</text>
|
||||
<rect x="1000" y="486" width="160" height="22" fill="none" stroke="#3E7AB8" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
<text x="1080" y="501" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="middle">Recycle ✗ deprecated</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="provisioning-mode">
|
||||
<rect x="80" y="540" width="1100" height="100" fill="#1A3A5C" fill-opacity="0.4" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="100" y="565" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" font-weight="bold">PROVISIONING MODES</text>
|
||||
|
||||
<rect x="100" y="580" width="500" height="50" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="116" y="600" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" font-weight="bold">STATIC</text>
|
||||
<text x="180" y="600" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— admin creates PVs in advance</text>
|
||||
<text x="116" y="618" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">PVC matches → controller binds 1:1 via ClaimRef</text>
|
||||
|
||||
<rect x="620" y="580" width="540" height="50" fill="none" stroke="#FFB627" stroke-width="1"/>
|
||||
<text x="636" y="600" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" font-weight="bold">DYNAMIC</text>
|
||||
<text x="708" y="600" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— StorageClass provisions on demand</text>
|
||||
<text x="636" y="618" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">requires <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627">DefaultStorageClass</tspan> admission controller</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 07 OF 10 · STORAGE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 07 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,151 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<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>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P08 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="stacked-topology">
|
||||
<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"/>
|
||||
<text x="100" y="135" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#5BA3E0" font-weight="bold">[ TOPOLOGY A ] STACKED</text>
|
||||
<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>
|
||||
<line x1="80" y1="170" x2="640" y2="170" stroke="#5BA3E0" stroke-width="0.5"/>
|
||||
|
||||
<g id="stacked-host-1">
|
||||
<polygon points="200,210 280,250 280,330 200,370 120,330 120,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<line x1="200" y1="210" x2="200" y2="290" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="200" y1="290" x2="120" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="200" y1="290" x2="280" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<rect x="155" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="200" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text>
|
||||
<rect x="155" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="200" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text>
|
||||
<text x="200" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-01</text>
|
||||
</g>
|
||||
|
||||
<g id="stacked-host-2">
|
||||
<polygon points="360,210 440,250 440,330 360,370 280,330 280,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<line x1="360" y1="210" x2="360" y2="290" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="360" y1="290" x2="280" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="360" y1="290" x2="440" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<rect x="315" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="360" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text>
|
||||
<rect x="315" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="360" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text>
|
||||
<text x="360" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-02</text>
|
||||
</g>
|
||||
|
||||
<g id="stacked-host-3">
|
||||
<polygon points="520,210 600,250 600,330 520,370 440,330 440,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<line x1="520" y1="210" x2="520" y2="290" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="520" y1="290" x2="440" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="520" y1="290" x2="600" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<rect x="475" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="520" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text>
|
||||
<rect x="475" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="520" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text>
|
||||
<text x="520" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-03</text>
|
||||
</g>
|
||||
|
||||
<path d="M 200,330 Q 360,355 360,330" fill="none" stroke="#FFB627" stroke-width="0.8" stroke-dasharray="2 2"/>
|
||||
<path d="M 360,330 Q 520,355 520,330" fill="none" stroke="#FFB627" stroke-width="0.8" stroke-dasharray="2 2"/>
|
||||
|
||||
<g id="stacked-tradeoffs">
|
||||
<line x1="100" y1="430" x2="620" y2="430" stroke="#5BA3E0" stroke-width="0.5"/>
|
||||
<text x="100" y="455" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F">▲ TRADE-OFFS</text>
|
||||
<text x="100" y="478" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Fewer hosts to maintain</text>
|
||||
<text x="100" y="497" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Lower infrastructure cost</text>
|
||||
<text x="100" y="516" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Simpler kubeadm setup</text>
|
||||
<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>
|
||||
<text x="100" y="563" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− Less failure isolation</text>
|
||||
<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>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="external-topology">
|
||||
<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"/>
|
||||
<text x="700" y="135" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">[ TOPOLOGY B ] EXTERNAL ETCD ★</text>
|
||||
<text x="700" y="155" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#A0B8D0">etcd cluster on dedicated hosts</text>
|
||||
<line x1="680" y1="170" x2="1240" y2="170" stroke="#FFB627" stroke-width="0.5"/>
|
||||
|
||||
<text x="700" y="195" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#5BA3E0">CONTROL PLANE TIER</text>
|
||||
|
||||
<g id="ext-cp-1">
|
||||
<polygon points="780,225 850,260 850,330 780,365 710,330 710,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="740" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="780" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text>
|
||||
<text x="780" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-01</text>
|
||||
</g>
|
||||
<g id="ext-cp-2">
|
||||
<polygon points="940,225 1010,260 1010,330 940,365 870,330 870,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="900" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="940" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text>
|
||||
<text x="940" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-02</text>
|
||||
</g>
|
||||
<g id="ext-cp-3">
|
||||
<polygon points="1100,225 1170,260 1170,330 1100,365 1030,330 1030,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="1060" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="1100" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text>
|
||||
<text x="1100" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-03</text>
|
||||
</g>
|
||||
|
||||
<line x1="780" y1="365" x2="780" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
<line x1="940" y1="365" x2="940" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
<line x1="1100" y1="365" x2="1100" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
|
||||
<text x="700" y="402" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">ETCD TIER (dedicated)</text>
|
||||
|
||||
<rect x="710" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<text x="760" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="760" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-01</text>
|
||||
|
||||
<rect x="890" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<text x="940" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="940" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-02</text>
|
||||
|
||||
<rect x="1050" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<text x="1100" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="1100" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-03</text>
|
||||
|
||||
<path d="M 760,440 Q 850,475 940,440" fill="none" stroke="#FFB627" stroke-width="0.7" stroke-dasharray="2 2"/>
|
||||
<path d="M 940,440 Q 1020,475 1100,440" fill="none" stroke="#FFB627" stroke-width="0.7" stroke-dasharray="2 2"/>
|
||||
|
||||
<g id="ext-tradeoffs">
|
||||
<line x1="700" y1="490" x2="1220" y2="490" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="700" y="515" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F">▲ TRADE-OFFS</text>
|
||||
<text x="700" y="538" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Failure isolation across tiers</text>
|
||||
<text x="700" y="557" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ etcd survives apiserver disk pressure</text>
|
||||
<text x="700" y="576" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Independent scaling / upgrade paths</text>
|
||||
<text x="700" y="595" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− Double the hosts to operate</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="ha-rules">
|
||||
<rect x="80" y="625" width="1160" height="38" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<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>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 08 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,197 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
<marker id="arrow09Cyan" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#5BA3E0"/>
|
||||
</marker>
|
||||
<marker id="arrow09Amber" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#FFB627"/>
|
||||
</marker>
|
||||
<radialGradient id="apiGlow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#FFB627" stop-opacity="0.25"/>
|
||||
<stop offset="100%" stop-color="#FFB627" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Every Line Crosses the API Server</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P09 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">NO COMPONENT TALKS DIRECTLY TO ANOTHER — ALL FLOWS GO THROUGH kube-apiserver</text>
|
||||
</g>
|
||||
|
||||
<g id="lane-labels">
|
||||
<text x="180" y="115" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#5BA3E0" text-anchor="middle">CLIENTS / WATCHERS</text>
|
||||
<text x="640" y="115" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">SPINE</text>
|
||||
<text x="1100" y="115" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#5BA3E0" text-anchor="middle">PERSISTENCE</text>
|
||||
<line x1="60" y1="125" x2="1220" y2="125" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
</g>
|
||||
|
||||
<g id="cli-kubectl">
|
||||
<rect x="80" y="155" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="155" width="4" height="56" fill="#5BA3E0"/>
|
||||
<!-- icon: tabler-outline/terminal -->
|
||||
<g transform="translate(96.0, 170.0)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M5 7l5 5l-5 5" />
|
||||
<path d="M12 19l7 0" />
|
||||
</g>
|
||||
<text x="130" y="180" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kubectl</text>
|
||||
<text x="130" y="198" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">CLI · scripts · CI/CD</text>
|
||||
</g>
|
||||
<g id="cli-sched">
|
||||
<rect x="80" y="225" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="225" width="4" height="56" fill="#5BA3E0"/>
|
||||
<!-- icon: tabler-outline/settings -->
|
||||
<g transform="translate(96.0, 240.0)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<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" />
|
||||
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
|
||||
</g>
|
||||
<text x="130" y="250" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kube-scheduler</text>
|
||||
<text x="130" y="268" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">picks node for Pod</text>
|
||||
</g>
|
||||
<g id="cli-ctrl">
|
||||
<rect x="80" y="295" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="295" width="4" height="56" fill="#5BA3E0"/>
|
||||
<!-- icon: tabler-outline/refresh -->
|
||||
<g transform="translate(96.0, 310.0)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
|
||||
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
|
||||
</g>
|
||||
<text x="130" y="320" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" font-weight="bold">controller-mgr</text>
|
||||
<text x="130" y="338" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">reconcile loops</text>
|
||||
</g>
|
||||
<g id="cli-kubelet">
|
||||
<rect x="80" y="365" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="365" width="4" height="56" fill="#5BA3E0"/>
|
||||
<!-- icon: tabler-outline/cube -->
|
||||
<g transform="translate(96.0, 380.0)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M21 16.008v-8.018a1.98 1.98 0 0 0 -1 -1.717l-7 -4.008a2.016 2.016 0 0 0 -2 0l-7 4.008c-.619 .355 -1 1.01 -1 1.718v8.018c0 .709 .381 1.363 1 1.717l7 4.008a2.016 2.016 0 0 0 2 0l7 -4.008c.619 -.355 1 -1.01 1 -1.718" />
|
||||
<path d="M12 22v-10" />
|
||||
<path d="M12 12l8.73 -5.04" />
|
||||
<path d="M3.27 6.96l8.73 5.04" />
|
||||
</g>
|
||||
<text x="130" y="390" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kubelet (node)</text>
|
||||
<text x="130" y="408" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">node-side agent · ≥1 per node</text>
|
||||
</g>
|
||||
<g id="cli-proxy">
|
||||
<rect x="80" y="435" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="435" width="4" height="56" fill="#5BA3E0"/>
|
||||
<!-- icon: tabler-outline/route -->
|
||||
<g transform="translate(96.0, 450.0)" fill="none" stroke="#5BA3E0" stroke-width="1.5">
|
||||
<path d="M3 19a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path d="M19 7a2 2 0 1 0 0 -4a2 2 0 0 0 0 4" />
|
||||
<path d="M11 19h5.5a3.5 3.5 0 0 0 0 -7h-8a3.5 3.5 0 0 1 0 -7h4.5" />
|
||||
</g>
|
||||
<text x="130" y="460" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kube-proxy</text>
|
||||
<text x="130" y="478" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">Service rule programmer</text>
|
||||
</g>
|
||||
<g id="cli-cloud">
|
||||
<rect x="80" y="505" width="200" height="56" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="4 3"/>
|
||||
<rect x="80" y="505" width="4" height="56" fill="#3E7AB8"/>
|
||||
<!-- icon: tabler-outline/cloud -->
|
||||
<g transform="translate(96.0, 520.0)" fill="none" stroke="#3E7AB8" stroke-width="1.5">
|
||||
<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" />
|
||||
</g>
|
||||
<text x="130" y="530" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" font-weight="bold">cloud-ctrl-mgr</text>
|
||||
<text x="130" y="548" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#6B85A3">optional · cloud only</text>
|
||||
</g>
|
||||
|
||||
<g id="api-spine">
|
||||
<circle cx="640" cy="360" r="180" fill="url(#apiGlow)"/>
|
||||
<rect x="540" y="180" width="200" height="360" fill="#0E2A47" stroke="#FFB627" stroke-width="2"/>
|
||||
<rect x="540" y="180" width="200" height="36" fill="#FFB627"/>
|
||||
<text x="640" y="204" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">★ SPINE</text>
|
||||
<text x="640" y="245" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#FFB627" text-anchor="middle" font-weight="bold">kube-apiserver</text>
|
||||
<line x1="560" y1="263" x2="720" y2="263" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="640" y="290" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8" text-anchor="middle">REST API surface</text>
|
||||
<text x="640" y="310" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• authn / authz</text>
|
||||
<text x="640" y="328" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• admission webhooks</text>
|
||||
<text x="640" y="346" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• validation</text>
|
||||
<text x="640" y="364" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• mutation</text>
|
||||
<line x1="560" y1="380" x2="720" y2="380" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="640" y="406" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">scales horizontally</text>
|
||||
<text x="640" y="424" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">N replicas behind LB</text>
|
||||
<line x1="560" y1="445" x2="720" y2="445" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="640" y="471" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F" text-anchor="middle">watch · long-poll</text>
|
||||
<text x="640" y="489" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F" text-anchor="middle">+ list streams</text>
|
||||
<text x="640" y="513" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#6B85A3" text-anchor="middle">every component watches</text>
|
||||
<text x="640" y="528" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#6B85A3" text-anchor="middle">to drive its reconcile loop</text>
|
||||
</g>
|
||||
|
||||
<g id="persistence-column">
|
||||
<rect x="1000" y="290" width="200" height="140" fill="#0E2A47" stroke="#FFB627" stroke-width="2"/>
|
||||
<rect x="1000" y="290" width="200" height="30" fill="#FFB627"/>
|
||||
<text x="1100" y="310" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">SOLE STORAGE</text>
|
||||
<!-- icon: tabler-outline/database -->
|
||||
<g transform="translate(1018.0, 335.0) scale(1.4166666666666667)" fill="none" stroke="#FFB627" stroke-width="1.5">
|
||||
<path d="M4 6a8 3 0 1 0 16 0a8 3 0 1 0 -16 0" />
|
||||
<path d="M4 6v6a8 3 0 0 0 16 0v-6" />
|
||||
<path d="M4 12v6a8 3 0 0 0 16 0v-6" />
|
||||
</g>
|
||||
<text x="1100" y="358" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="1100" y="380" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">Raft K/V cluster</text>
|
||||
<text x="1100" y="398" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">all cluster state</text>
|
||||
<line x1="1018" y1="410" x2="1182" y2="410" stroke="#FFB627" stroke-width="0.4"/>
|
||||
<text x="1100" y="424" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">3 or 5 members · odd</text>
|
||||
</g>
|
||||
|
||||
<g id="watch-arrows">
|
||||
<line x1="280" y1="183" x2="540" y2="218" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="295" y="173" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">POST · PUT</text>
|
||||
<line x1="280" y1="253" x2="540" y2="263" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="305" y="244" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch unscheduled</text>
|
||||
<line x1="540" y1="290" x2="280" y2="270" stroke="#7FD99F" stroke-width="1.2" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="338" y="285" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#7FD99F">bind decision</text>
|
||||
|
||||
<line x1="280" y1="323" x2="540" y2="333" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="320" y="316" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch + patch</text>
|
||||
|
||||
<line x1="280" y1="393" x2="540" y2="403" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="320" y="386" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch pods/node</text>
|
||||
<line x1="540" y1="425" x2="280" y2="420" stroke="#7FD99F" stroke-width="1.2" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="380" y="418" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#7FD99F">report status</text>
|
||||
|
||||
<line x1="280" y1="463" x2="540" y2="475" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="318" y="456" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch services</text>
|
||||
|
||||
<line x1="280" y1="533" x2="540" y2="510" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="4 3" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="320" y="523" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8">cloud sync (optional)</text>
|
||||
|
||||
<line x1="740" y1="345" x2="1000" y2="345" stroke="#FFB627" stroke-width="2" marker-end="url(#arrow09Amber)"/>
|
||||
<line x1="1000" y1="375" x2="740" y2="375" stroke="#FFB627" stroke-width="2" marker-end="url(#arrow09Amber)"/>
|
||||
<text x="870" y="335" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627" text-anchor="middle" font-weight="bold">gRPC · write</text>
|
||||
<text x="870" y="395" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627" text-anchor="middle" font-weight="bold">gRPC · read</text>
|
||||
</g>
|
||||
|
||||
<g id="bottom-takeaway">
|
||||
<rect x="60" y="588" width="1160" height="74" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="1"/>
|
||||
<!-- icon: tabler-outline/route -->
|
||||
<g transform="translate(76.0, 608.0) scale(1.3333333333333333)" fill="none" stroke="#FFB627" stroke-width="1.5">
|
||||
<path d="M3 19a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path d="M19 7a2 2 0 1 0 0 -4a2 2 0 0 0 0 4" />
|
||||
<path d="M11 19h5.5a3.5 3.5 0 0 0 0 -7h-8a3.5 3.5 0 0 1 0 -7h4.5" />
|
||||
</g>
|
||||
<text x="120" y="615" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" font-weight="bold">WHY THIS MATTERS</text>
|
||||
<text x="120" y="638" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#F0F4F8">API-mediation makes Kubernetes <tspan fill="#FFB627" font-weight="bold">pluggable</tspan> (any controller can join the loop by watching the API), <tspan fill="#FFB627" font-weight="bold">observable</tspan> (every state change is an API event), and <tspan fill="#FFB627" font-weight="bold">auditable</tspan>.</text>
|
||||
<text x="120" y="656" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#A0B8D0">The constraint <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627">"all roads through apiserver"</tspan> is the architecture, not an inconvenience.</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 09 OF 10 · API SPINE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 09 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,95 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<radialGradient id="endVignette" cx="50%" cy="50%" r="75%">
|
||||
<stop offset="50%" stop-color="#0E2A47" stop-opacity="0" />
|
||||
<stop offset="100%" stop-color="#000000" stop-opacity="0.5" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.3" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.45" />
|
||||
<rect width="1280" height="720" fill="url(#endVignette)" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<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>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P10 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
</g>
|
||||
|
||||
<g id="takeaway-1">
|
||||
<text x="120" y="200" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" letter-spacing="3">01 / ONE SPINE</text>
|
||||
<line x1="120" y1="215" x2="160" y2="215" stroke="#FFB627" stroke-width="2" />
|
||||
<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>
|
||||
<text x="120" y="312" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">every state change.</text>
|
||||
<text font-family="Arial, 'Microsoft YaHei', sans-serif" fill="#A0B8D0" font-size="16" x="120" y="345">No component talks to another directly.</text><text font-family="Arial, 'Microsoft YaHei', sans-serif" fill="#A0B8D0" font-size="16" x="120" y="367">That constraint is what makes the system pluggable.</text></g>
|
||||
|
||||
<g id="takeaway-2">
|
||||
<text x="120" y="408" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" letter-spacing="3">02 / ONE TRUTH</text>
|
||||
<line x1="120" y1="423" x2="160" y2="423" stroke="#5BA3E0" stroke-width="2" />
|
||||
<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>
|
||||
<text x="120" y="520" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">persistent store.</text>
|
||||
<text font-family="Arial, 'Microsoft YaHei', sans-serif" fill="#A0B8D0" font-size="16" x="120" y="553">Lose etcd, lose the cluster. Back it up.</text><text font-family="Arial, 'Microsoft YaHei', sans-serif" fill="#A0B8D0" font-size="16" x="120" y="575">Run an odd number. Raft does the rest.</text></g>
|
||||
|
||||
<g id="takeaway-3">
|
||||
<text x="700" y="200" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#7FD99F" letter-spacing="3">03 / ONE LOOP</text>
|
||||
<line x1="700" y1="215" x2="740" y2="215" stroke="#7FD99F" stroke-width="2" />
|
||||
<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>
|
||||
<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>
|
||||
<text font-family="Arial, 'Microsoft YaHei', sans-serif" fill="#A0B8D0" font-size="16" x="700" y="345"><tspan><tspan font-family="Consolas, 'Courier New', monospace" fill="#7FD99F">watch → diff → act</tspan>.</tspan></text><text font-family="Arial, 'Microsoft YaHei', sans-serif" fill="#A0B8D0" font-size="16" x="700" y="367">Once you see that, you can read the source of any controller.</text></g>
|
||||
|
||||
<g id="reconcile-diagram">
|
||||
<text x="700" y="408" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" letter-spacing="2">THE LOOP, DRAWN</text>
|
||||
<line x1="700" y1="420" x2="1180" y2="420" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
|
||||
<g id="loop-watch">
|
||||
<circle cx="780" cy="500" r="40" fill="none" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="780" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#5BA3E0" text-anchor="middle" font-weight="bold">watch</text>
|
||||
<text x="780" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">desired</text>
|
||||
</g>
|
||||
<g id="loop-diff">
|
||||
<circle cx="940" cy="500" r="40" fill="none" stroke="#FFB627" stroke-width="1.5" />
|
||||
<text x="940" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">diff</text>
|
||||
<text x="940" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">vs actual</text>
|
||||
</g>
|
||||
<g id="loop-act">
|
||||
<circle cx="1100" cy="500" r="40" fill="none" stroke="#7FD99F" stroke-width="1.5" />
|
||||
<text x="1100" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F" text-anchor="middle" font-weight="bold">act</text>
|
||||
<text x="1100" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">converge</text>
|
||||
</g>
|
||||
|
||||
<line x1="820" y1="500" x2="900" y2="500" stroke="#5BA3E0" stroke-width="1" />
|
||||
<polygon points="900,500 893,496 893,504" fill="#5BA3E0" />
|
||||
<line x1="980" y1="500" x2="1060" y2="500" stroke="#FFB627" stroke-width="1" />
|
||||
<polygon points="1060,500 1053,496 1053,504" fill="#FFB627" />
|
||||
|
||||
<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" />
|
||||
<polygon points="780,540 776,548 784,548" fill="#7FD99F" />
|
||||
<text x="940" y="630" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#7FD99F" text-anchor="middle">repeat forever</text>
|
||||
</g>
|
||||
|
||||
<g id="divider">
|
||||
<line x1="660" y1="160" x2="660" y2="595" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
</g>
|
||||
|
||||
<g id="closing-mark">
|
||||
<line x1="120" y1="620" x2="180" y2="620" stroke="#FFB627" stroke-width="1.5" />
|
||||
<text x="120" y="643" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" letter-spacing="2">— END OF DRAWING SET —</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<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>
|
||||
<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>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.3 KiB |
@@ -0,0 +1,106 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<radialGradient id="bgVignette" cx="50%" cy="50%" r="75%">
|
||||
<stop offset="60%" stop-color="#0E2A47" stop-opacity="0" />
|
||||
<stop offset="100%" stop-color="#000000" stop-opacity="0.45" />
|
||||
</radialGradient>
|
||||
<radialGradient id="amberGlow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#FFB627" stop-opacity="0.35" />
|
||||
<stop offset="100%" stop-color="#FFB627" stop-opacity="0" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.5" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.7" />
|
||||
<rect width="1280" height="720" fill="url(#bgVignette)" />
|
||||
</g>
|
||||
|
||||
<g id="title-block">
|
||||
<line x1="60" y1="100" x2="220" y2="100" stroke="#FFB627" stroke-width="2" />
|
||||
<text x="60" y="130" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" letter-spacing="3">DRAWING NO. K8S-ARCH-2026 / 01</text>
|
||||
<text x="60" y="220" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="64" font-weight="bold" fill="#F0F4F8" letter-spacing="-1">Kubernetes</text>
|
||||
<text x="60" y="278" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="45" font-weight="bold" fill="#5BA3E0">Cluster Architecture</text>
|
||||
<text x="60" y="318" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="20" fill="#A0B8D0">A Blueprint of the Modern Container Orchestrator</text>
|
||||
</g>
|
||||
|
||||
<g id="metadata-block">
|
||||
<line x1="60" y1="610" x2="60" y2="660" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="78" y="624" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">SCALE</text>
|
||||
<text x="78" y="640" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8">1 : ∞</text>
|
||||
<text x="78" y="657" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">CLUSTER-LEVEL VIEW</text>
|
||||
|
||||
<line x1="220" y1="610" x2="220" y2="660" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="238" y="624" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">PROJECTION</text>
|
||||
<text x="238" y="640" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8">ISOMETRIC</text>
|
||||
<text x="238" y="657" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">30° / 30° / 90°</text>
|
||||
|
||||
<line x1="380" y1="610" x2="380" y2="660" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="398" y="624" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">SHEETS</text>
|
||||
<text x="398" y="640" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8">10 / 10</text>
|
||||
<text x="398" y="657" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">ENGINEERING REFERENCE</text>
|
||||
</g>
|
||||
|
||||
<g id="cluster-decor">
|
||||
<ellipse cx="900" cy="395" rx="280" ry="40" fill="#5BA3E0" fill-opacity="0.04" stroke="#3E7AB8" stroke-width="0.5" stroke-dasharray="3 5" />
|
||||
<line x1="900" y1="320" x2="730" y2="395" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 4" opacity="0.6" />
|
||||
<line x1="900" y1="320" x2="900" y2="395" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 4" opacity="0.6" />
|
||||
<line x1="900" y1="320" x2="1070" y2="395" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 4" opacity="0.6" />
|
||||
<line x1="600" y1="250" x2="640" y2="250" stroke="#FFB627" stroke-width="0.8" />
|
||||
<line x1="600" y1="250" x2="600" y2="220" stroke="#FFB627" stroke-width="0.8" />
|
||||
<text x="610" y="215" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">CONTROL PLANE</text>
|
||||
<line x1="600" y1="465" x2="640" y2="465" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<line x1="600" y1="465" x2="600" y2="555" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<text x="555" y="570" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#5BA3E0">DATA PLANE</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-node">
|
||||
<circle cx="900" cy="250" r="120" fill="url(#amberGlow)" />
|
||||
<polygon points="900,180 970,220 970,310 900,350 830,310 830,220" fill="#1A3A5C" stroke="#FFB627" stroke-width="2" />
|
||||
<line x1="900" y1="180" x2="900" y2="260" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="900" y1="260" x2="830" y2="220" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="900" y1="260" x2="970" y2="220" stroke="#FFB627" stroke-width="1.5" />
|
||||
<text x="900" y="276" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">CONTROL</text>
|
||||
<text x="900" y="290" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">PLANE</text>
|
||||
<text x="900" y="313" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#F0F4F8" text-anchor="middle" opacity="0.8">apiserver · etcd</text>
|
||||
<text x="900" y="326" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#F0F4F8" text-anchor="middle" opacity="0.8">scheduler · ctrl-mgr</text>
|
||||
</g>
|
||||
|
||||
<g id="worker-1">
|
||||
<polygon points="730,395 782,425 782,475 730,505 678,475 678,425" fill="#1A3A5C" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="730" y1="395" x2="730" y2="445" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="730" y1="445" x2="678" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="730" y1="445" x2="782" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="730" y="540" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">node-01</text>
|
||||
</g>
|
||||
<g id="worker-2">
|
||||
<polygon points="900,395 952,425 952,475 900,505 848,475 848,425" fill="#1A3A5C" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="900" y1="395" x2="900" y2="445" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="900" y1="445" x2="848" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="900" y1="445" x2="952" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="900" y="540" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">node-02</text>
|
||||
</g>
|
||||
<g id="worker-3">
|
||||
<polygon points="1070,395 1122,425 1122,475 1070,505 1018,475 1018,425" fill="#1A3A5C" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="1070" y1="395" x2="1070" y2="445" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1070" y1="445" x2="1018" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1070" y1="445" x2="1122" y2="425" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="1070" y="540" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">node-03</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 01 OF 10 · COVER</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">REV 1.0 · 2026-05</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -0,0 +1,137 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Two Planes, One Spine</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P02 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">EVERY DECISION GOES THROUGH <tspan fill="#FFB627" font-family="Consolas, 'Courier New', monospace">kube-apiserver</tspan></text>
|
||||
</g>
|
||||
|
||||
<g id="cp-zone-decor">
|
||||
<rect x="80" y="105" width="1120" height="240" fill="#1A3A5C" fill-opacity="0.35" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4" />
|
||||
<text x="100" y="130" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" letter-spacing="2">[ CONTROL PLANE ]</text>
|
||||
<text x="100" y="148" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#A0B8D0">Global decision-making · desired-state holder</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-apiserver">
|
||||
<rect x="540" y="180" width="200" height="120" fill="#0E2A47" stroke="#FFB627" stroke-width="2" />
|
||||
<rect x="540" y="180" width="200" height="22" fill="#FFB627" />
|
||||
<text x="640" y="196" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">▲ HUB</text>
|
||||
<text x="640" y="234" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#FFB627" text-anchor="middle" font-weight="bold">kube-apiserver</text>
|
||||
<text x="640" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">REST + admission</text>
|
||||
<text x="640" y="276" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">+ validation gateway</text>
|
||||
<text x="640" y="294" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">↕ talks to etcd only</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-etcd">
|
||||
<rect x="120" y="195" width="160" height="90" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="200" y="220" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="200" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">key-value store</text>
|
||||
<text x="200" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">Raft · quorum</text>
|
||||
<text x="200" y="276" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#6B85A3" text-anchor="middle">3 or 5 members</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-sched">
|
||||
<rect x="320" y="195" width="180" height="90" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="410" y="220" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" text-anchor="middle" font-weight="bold">kube-scheduler</text>
|
||||
<text x="410" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">filter → score → bind</text>
|
||||
<text x="410" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">picks node per Pod</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-ctrl">
|
||||
<rect x="780" y="195" width="200" height="90" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="880" y="220" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" text-anchor="middle" font-weight="bold">controller-manager</text>
|
||||
<text x="880" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">watch · diff · act</text>
|
||||
<text x="880" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">N reconcile loops</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-cloud">
|
||||
<rect x="1020" y="195" width="160" height="90" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="4 3" />
|
||||
<text x="1100" y="220" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#3E7AB8" text-anchor="middle" font-weight="bold">cloud-ctrl-mgr</text>
|
||||
<text x="1100" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">cloud only</text>
|
||||
<text x="1100" y="260" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">LB · routes · nodes</text>
|
||||
<text x="1100" y="277" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#6B85A3" text-anchor="middle">optional</text>
|
||||
</g>
|
||||
|
||||
<g id="cp-zone-decor-arrows">
|
||||
<path d="M 260,285 Q 260,318 420,318 Q 580,318 580,290" fill="none" stroke="#FFB627" stroke-width="1.2"/>
|
||||
<polygon points="580,290 575,300 585,300" fill="#FFB627"/>
|
||||
<line x1="740" y1="240" x2="780" y2="240" stroke="#FFB627" stroke-width="1.2" />
|
||||
<line x1="980" y1="240" x2="1020" y2="240" stroke="#3E7AB8" stroke-width="1" stroke-dasharray="3 3" />
|
||||
</g>
|
||||
|
||||
<g id="spine">
|
||||
<line x1="640" y1="345" x2="640" y2="415" stroke="#FFB627" stroke-width="2" />
|
||||
<polygon points="640,415 634,405 646,405" fill="#FFB627" />
|
||||
<polygon points="640,345 634,355 646,355" fill="#FFB627" />
|
||||
<rect x="555" y="368" width="170" height="22" fill="#0E2A47" />
|
||||
<text x="640" y="384" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" text-anchor="middle">API-MEDIATED</text>
|
||||
</g>
|
||||
|
||||
<g id="dp-zone-decor">
|
||||
<rect x="80" y="415" width="1120" height="220" fill="#1A3A5C" fill-opacity="0.35" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4" />
|
||||
<text x="100" y="440" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" letter-spacing="2">[ DATA PLANE ]</text>
|
||||
<text x="100" y="458" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#A0B8D0">Pod execution · workload runtime</text>
|
||||
<line x1="640" y1="415" x2="640" y2="445" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="270" y1="445" x2="640" y2="445" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="640" y1="445" x2="1010" y2="445" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="270" y1="445" x2="270" y2="490" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="640" y1="445" x2="640" y2="490" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
<line x1="1010" y1="445" x2="1010" y2="490" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" opacity="0.5" />
|
||||
</g>
|
||||
|
||||
<g id="dp-node-1">
|
||||
<polygon points="270,490 360,535 360,605 270,650 180,605 180,535" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="270" y1="490" x2="270" y2="570" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="270" y1="570" x2="180" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="270" y1="570" x2="360" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<rect x="230" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="259" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="288" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="270" y="675" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#A0B8D0" text-anchor="middle">worker-node-01</text>
|
||||
</g>
|
||||
|
||||
<g id="dp-node-2">
|
||||
<polygon points="640,490 730,535 730,605 640,650 550,605 550,535" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="640" y1="490" x2="640" y2="570" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="640" y1="570" x2="550" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="640" y1="570" x2="730" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<rect x="600" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="629" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="658" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="640" y="675" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#A0B8D0" text-anchor="middle">worker-node-02</text>
|
||||
</g>
|
||||
|
||||
<g id="dp-node-3">
|
||||
<polygon points="1010,490 1100,535 1100,605 1010,650 920,605 920,535" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<line x1="1010" y1="490" x2="1010" y2="570" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1010" y1="570" x2="920" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<line x1="1010" y1="570" x2="1100" y2="535" stroke="#5BA3E0" stroke-width="1" />
|
||||
<rect x="970" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<rect x="999" y="595" width="22" height="14" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="1010" y="675" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#A0B8D0" text-anchor="middle">worker-node-03</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 02 OF 10 · TOPOLOGY OVERVIEW</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 02 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,131 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<radialGradient id="hubGlow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#FFB627" stop-opacity="0.25" />
|
||||
<stop offset="100%" stop-color="#FFB627" stop-opacity="0" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<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>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P03 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="orbit-rings">
|
||||
<circle cx="640" cy="410" r="220" fill="none" stroke="#3E7AB8" stroke-width="0.5" stroke-dasharray="2 6" opacity="0.4" />
|
||||
<circle cx="640" cy="410" r="160" fill="none" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4" opacity="0.5" />
|
||||
<circle cx="640" cy="410" r="270" fill="none" stroke="#3E7AB8" stroke-width="0.4" stroke-dasharray="1 5" opacity="0.3" />
|
||||
</g>
|
||||
|
||||
<g id="spokes">
|
||||
<line x1="640" y1="410" x2="640" y2="200" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="640" y1="410" x2="855" y2="290" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="855" y2="530" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="425" y2="530" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="425" y2="290" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="4 3" />
|
||||
</g>
|
||||
|
||||
<g id="hub-apiserver">
|
||||
<circle cx="640" cy="410" r="110" fill="url(#hubGlow)" />
|
||||
<polygon points="640,330 700,365 700,455 640,490 580,455 580,365" fill="#0E2A47" stroke="#FFB627" stroke-width="2" />
|
||||
<line x1="640" y1="330" x2="640" y2="410" stroke="#FFB627" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="580" y2="365" stroke="#FFB627" stroke-width="1.2" />
|
||||
<line x1="640" y1="410" x2="700" y2="365" stroke="#FFB627" stroke-width="1.2" />
|
||||
<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>
|
||||
<text x="640" y="450" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">REST + admission</text>
|
||||
<text x="640" y="466" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">+ validation</text>
|
||||
<text x="640" y="484" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">HUB · scales horizontally</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-etcd">
|
||||
<rect x="540" y="148" width="200" height="84" fill="#0E2A47" stroke="#FFB627" stroke-width="1.8" />
|
||||
<rect x="540" y="148" width="6" height="84" fill="#FFB627" />
|
||||
<use data-icon="tabler-outline/database" x="556" y="166" width="22" height="22" fill="#FFB627" stroke-width="1.5" />
|
||||
<text x="588" y="184" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#F0F4F8" font-weight="bold">etcd</text>
|
||||
<text x="556" y="206" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Distributed K/V store</text>
|
||||
<text x="556" y="222" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Raft · all cluster state</text>
|
||||
<line x1="640" y1="232" x2="640" y2="280" stroke="#FFB627" stroke-width="1" stroke-dasharray="2 3" />
|
||||
<text x="660" y="260" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">↕ only direct talker</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-scheduler">
|
||||
<rect x="800" y="248" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="800" y="248" width="6" height="84" fill="#5BA3E0" />
|
||||
<use data-icon="tabler-outline/settings" x="816" y="266" width="22" height="22" fill="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="848" y="284" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kube-scheduler</text>
|
||||
<text x="816" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">filter → score → bind</text>
|
||||
<text x="816" y="322" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">picks node per Pod</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-controller">
|
||||
<rect x="800" y="488" width="220" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="800" y="488" width="6" height="84" fill="#5BA3E0" />
|
||||
<use data-icon="tabler-outline/refresh" x="816" y="506" width="22" height="22" fill="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="848" y="524" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">controller-manager</text>
|
||||
<text x="816" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">N reconcile loops</text>
|
||||
<text x="816" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">watch · diff · act</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-cloud">
|
||||
<rect x="260" y="248" width="200" height="84" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="5 3" />
|
||||
<rect x="260" y="248" width="6" height="84" fill="#3E7AB8" />
|
||||
<use data-icon="tabler-outline/cloud" x="276" y="266" width="22" height="22" fill="#3E7AB8" stroke-width="1.5" />
|
||||
<text x="308" y="284" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">cloud-ctrl-mgr</text>
|
||||
<text x="276" y="306" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">LB · routes · nodes</text>
|
||||
<text x="276" y="322" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">optional · cloud only</text>
|
||||
</g>
|
||||
|
||||
<g id="spoke-kubectl">
|
||||
<rect x="260" y="488" width="200" height="84" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="260" y="488" width="6" height="84" fill="#5BA3E0" />
|
||||
<use data-icon="tabler-outline/terminal" x="276" y="506" width="22" height="22" fill="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="308" y="524" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#F0F4F8" font-weight="bold">kubectl / clients</text>
|
||||
<text x="276" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">CLI · operators · CI</text>
|
||||
<text x="276" y="562" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">HTTPS REST</text>
|
||||
</g>
|
||||
|
||||
<g id="annotations">
|
||||
<line x1="75" y1="148" x2="120" y2="148" stroke="#FFB627" stroke-width="0.8" />
|
||||
<line x1="75" y1="148" x2="75" y2="232" stroke="#FFB627" stroke-width="0.8" />
|
||||
<text x="75" y="143" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627">PERSISTENCE</text>
|
||||
|
||||
<line x1="1080" y1="290" x2="1140" y2="290" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<line x1="1140" y1="290" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<line x1="1080" y1="530" x2="1140" y2="530" stroke="#5BA3E0" stroke-width="0.8" />
|
||||
<text x="1148" y="394" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">RECONCILE</text>
|
||||
<text x="1148" y="410" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0">LOOPS</text>
|
||||
|
||||
<line x1="140" y1="290" x2="200" y2="290" stroke="#3E7AB8" stroke-width="0.8" />
|
||||
<line x1="140" y1="290" x2="140" y2="332" stroke="#3E7AB8" stroke-width="0.8" />
|
||||
<text x="80" y="316" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8">CLOUD GLUE</text>
|
||||
</g>
|
||||
|
||||
<g id="key-fact">
|
||||
<rect x="60" y="615" width="1160" height="40" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="0.8" />
|
||||
<use data-icon="tabler-outline/info-circle" x="76" y="624" width="22" height="22" fill="#FFB627" stroke-width="1.5" />
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<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>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 03 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.7 KiB |
@@ -0,0 +1,110 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Worker Node: Three Layers</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P04 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">EXPLODED ISOMETRIC VIEW · KUBELET / KUBE-PROXY / CONTAINER RUNTIME</text>
|
||||
</g>
|
||||
|
||||
<g id="isometric-node">
|
||||
<polygon points="400,200 700,355 700,505 400,650 100,505 100,355" fill="#1A3A5C" fill-opacity="0.4" stroke="#5BA3E0" stroke-width="1.8"/>
|
||||
<line x1="400" y1="200" x2="400" y2="350" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<line x1="400" y1="350" x2="100" y2="355" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<line x1="400" y1="350" x2="700" y2="355" stroke="#5BA3E0" stroke-width="1"/>
|
||||
|
||||
<g id="kubelet-layer">
|
||||
<polygon points="400,275 580,368 580,398 400,305" fill="#FFB627" fill-opacity="0.15" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<polygon points="400,275 220,368 220,398 400,305" fill="#FFB627" fill-opacity="0.15" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<polygon points="220,368 400,275 580,368 400,460" fill="none" stroke="#FFB627" stroke-width="0.5" stroke-dasharray="2 3"/>
|
||||
<text x="400" y="370" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" text-anchor="middle" font-weight="bold">kubelet</text>
|
||||
<text x="400" y="390" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">node agent</text>
|
||||
</g>
|
||||
|
||||
<g id="kubeproxy-layer">
|
||||
<polygon points="400,455 580,548 580,578 400,485" fill="#5BA3E0" fill-opacity="0.12" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<polygon points="400,455 220,548 220,578 400,485" fill="#5BA3E0" fill-opacity="0.12" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<text x="400" y="540" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" text-anchor="middle" font-weight="bold">kube-proxy</text>
|
||||
<text x="400" y="560" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">service rules</text>
|
||||
</g>
|
||||
|
||||
<g id="runtime-layer">
|
||||
<polygon points="400,580 580,673 580,505 400,505" fill="#3E7AB8" fill-opacity="0.12" stroke="#3E7AB8" stroke-width="1.3"/>
|
||||
<polygon points="400,580 220,673 220,505 400,505" fill="#3E7AB8" fill-opacity="0.12" stroke="#3E7AB8" stroke-width="1.3"/>
|
||||
<text x="400" y="620" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#A0B8D0" text-anchor="middle" font-weight="bold">container runtime</text>
|
||||
<text x="400" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0" text-anchor="middle">CRI · containerd / CRI-O</text>
|
||||
</g>
|
||||
|
||||
<g id="pods-inside">
|
||||
<polygon points="335,572 365,587 365,597 335,582" fill="#7FD99F" fill-opacity="0.2" stroke="#7FD99F" stroke-width="0.8"/>
|
||||
<polygon points="380,594 410,609 410,619 380,604" fill="#7FD99F" fill-opacity="0.2" stroke="#7FD99F" stroke-width="0.8"/>
|
||||
<polygon points="425,616 455,631 455,641 425,626" fill="#7FD99F" fill-opacity="0.2" stroke="#7FD99F" stroke-width="0.8"/>
|
||||
</g>
|
||||
|
||||
<g id="dimension-lines">
|
||||
<line x1="660" y1="200" x2="720" y2="200" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<line x1="660" y1="650" x2="720" y2="650" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<line x1="710" y1="200" x2="710" y2="650" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<polygon points="710,200 706,210 714,210" fill="#5BA3E0"/>
|
||||
<polygon points="710,650 706,640 714,640" fill="#5BA3E0"/>
|
||||
<rect x="685" y="415" width="50" height="20" fill="#0E2A47"/>
|
||||
<text x="710" y="430" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#5BA3E0" text-anchor="middle">NODE</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="leader-kubelet">
|
||||
<line x1="580" y1="383" x2="780" y2="383" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<line x1="780" y1="383" x2="800" y2="383" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<circle cx="580" cy="383" r="2.5" fill="#FFB627"/>
|
||||
<rect x="800" y="335" width="380" height="90" fill="#1A3A5C" fill-opacity="0.4" stroke="#FFB627" stroke-width="1.2"/>
|
||||
<text x="816" y="358" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" font-weight="bold">kubelet</text>
|
||||
<text x="892" y="358" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— node agent</text>
|
||||
<text x="816" y="380" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Watches apiserver for Pods scheduled here</text>
|
||||
<text x="816" y="397" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Reconciles PodSpecs → instructs runtime</text>
|
||||
<text x="816" y="414" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Liveness / readiness / startup probes</text>
|
||||
</g>
|
||||
|
||||
<g id="leader-proxy">
|
||||
<line x1="580" y1="555" x2="780" y2="540" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="780" y1="540" x2="800" y2="540" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<circle cx="580" cy="555" r="2.5" fill="#5BA3E0"/>
|
||||
<rect x="800" y="450" width="380" height="80" fill="#1A3A5C" fill-opacity="0.4" stroke="#5BA3E0" stroke-width="1.2"/>
|
||||
<text x="816" y="473" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" font-weight="bold">kube-proxy</text>
|
||||
<text x="897" y="473" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— Service rules</text>
|
||||
<text x="816" y="495" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Translates virtual IP → backing Pod IPs</text>
|
||||
<text x="816" y="512" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0"><tspan font-family="Consolas, 'Courier New', monospace">iptables</tspan> · <tspan font-family="Consolas, 'Courier New', monospace">IPVS</tspan> · <tspan font-family="Consolas, 'Courier New', monospace">nftables</tspan> · optional with eBPF CNI</text>
|
||||
</g>
|
||||
|
||||
<g id="leader-runtime">
|
||||
<line x1="580" y1="625" x2="780" y2="620" stroke="#3E7AB8" stroke-width="0.8"/>
|
||||
<line x1="780" y1="620" x2="800" y2="620" stroke="#3E7AB8" stroke-width="0.8"/>
|
||||
<circle cx="580" cy="625" r="2.5" fill="#3E7AB8"/>
|
||||
<rect x="800" y="555" width="380" height="80" fill="#1A3A5C" fill-opacity="0.4" stroke="#3E7AB8" stroke-width="1.2"/>
|
||||
<text x="816" y="578" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#3E7AB8" font-weight="bold">container runtime</text>
|
||||
<text x="942" y="578" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— CRI implementer</text>
|
||||
<text x="816" y="600" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">• Pulls images, starts containers, manages lifecycle</text>
|
||||
<text x="816" y="617" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0"><tspan font-family="Consolas, 'Courier New', monospace">containerd</tspan> · <tspan font-family="Consolas, 'Courier New', monospace">CRI-O</tspan> · Docker removed since v1.24</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 04 OF 10 · WORKER NODE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 04 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.6 KiB |
@@ -0,0 +1,157 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<marker id="arrowCyan" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#5BA3E0" />
|
||||
</marker>
|
||||
<marker id="arrowAmber" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#FFB627" />
|
||||
</marker>
|
||||
<marker id="arrowWarn" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#FF6B6B" />
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Pod Lifecycle: One Schedule, Many States</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P05 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">A POD IS SCHEDULED ONCE · FAILED PODS ARE REPLACED, NOT RESCHEDULED</text>
|
||||
</g>
|
||||
|
||||
<g id="phase-track">
|
||||
<text x="100" y="200" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">PHASE TRACK</text>
|
||||
<line x1="60" y1="215" x2="1220" y2="215" stroke="#2D4A6B" stroke-width="0.5" stroke-dasharray="2 4" />
|
||||
|
||||
<g id="phase-pending">
|
||||
<rect x="100" y="240" width="180" height="100" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<rect x="100" y="240" width="180" height="22" fill="#5BA3E0" />
|
||||
<text x="190" y="257" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">PHASE 01</text>
|
||||
<text x="190" y="287" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#F0F4F8" text-anchor="middle" font-weight="bold">Pending</text>
|
||||
<text x="190" y="308" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">scheduling</text>
|
||||
<text x="190" y="324" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">+ image pull</text>
|
||||
</g>
|
||||
|
||||
<line x1="280" y1="290" x2="370" y2="290" stroke="#5BA3E0" stroke-width="2" marker-end="url(#arrowCyan)" />
|
||||
<text x="325" y="278" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">bind+pull</text>
|
||||
|
||||
<g id="phase-running">
|
||||
<rect x="380" y="240" width="200" height="100" fill="#0E2A47" stroke="#FFB627" stroke-width="2" />
|
||||
<rect x="380" y="240" width="200" height="22" fill="#FFB627" />
|
||||
<text x="480" y="257" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">PHASE 02 · CURRENT</text>
|
||||
<text x="480" y="287" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#FFB627" text-anchor="middle" font-weight="bold">Running</text>
|
||||
<text x="480" y="308" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">≥1 container live</text>
|
||||
<text x="480" y="324" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">probes active</text>
|
||||
</g>
|
||||
|
||||
<line x1="580" y1="270" x2="700" y2="270" stroke="#5BA3E0" stroke-width="2" marker-end="url(#arrowCyan)" />
|
||||
<line x1="580" y1="310" x2="700" y2="310" stroke="#5BA3E0" stroke-width="2" marker-end="url(#arrowCyan)" />
|
||||
<text x="640" y="262" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#7FD99F" text-anchor="middle">exit 0</text>
|
||||
<text x="640" y="328" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FF6B6B" text-anchor="middle">exit ≠ 0</text>
|
||||
|
||||
<g id="phase-succeeded">
|
||||
<rect x="710" y="220" width="180" height="60" fill="#0E2A47" stroke="#7FD99F" stroke-width="1.5" />
|
||||
<rect x="710" y="220" width="180" height="20" fill="#7FD99F" />
|
||||
<text x="800" y="234" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#0E2A47" text-anchor="middle" font-weight="bold">TERMINAL ✓</text>
|
||||
<text x="800" y="262" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#7FD99F" text-anchor="middle" font-weight="bold">Succeeded</text>
|
||||
</g>
|
||||
|
||||
<g id="phase-failed">
|
||||
<rect x="710" y="300" width="180" height="60" fill="#0E2A47" stroke="#FF6B6B" stroke-width="1.5" />
|
||||
<rect x="710" y="300" width="180" height="20" fill="#FF6B6B" />
|
||||
<text x="800" y="314" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#0E2A47" text-anchor="middle" font-weight="bold">TERMINAL ✗</text>
|
||||
<text x="800" y="342" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#FF6B6B" text-anchor="middle" font-weight="bold">Failed</text>
|
||||
</g>
|
||||
|
||||
<line x1="480" y1="340" x2="480" y2="395" stroke="#FF6B6B" stroke-width="1.5" stroke-dasharray="4 3" marker-end="url(#arrowWarn)" />
|
||||
|
||||
<g id="phase-unknown">
|
||||
<rect x="950" y="240" width="220" height="100" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.3" stroke-dasharray="5 3" />
|
||||
<rect x="950" y="240" width="220" height="22" fill="#3E7AB8" />
|
||||
<text x="1060" y="257" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">BRANCH · NODE UNREACHABLE</text>
|
||||
<text x="1060" y="287" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#A0B8D0" text-anchor="middle" font-weight="bold">Unknown</text>
|
||||
<text x="1060" y="308" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">apiserver lost contact</text>
|
||||
<text x="1060" y="324" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">with the node</text>
|
||||
</g>
|
||||
|
||||
<path d="M 580,240 Q 765,175 950,240" fill="none" stroke="#3E7AB8" stroke-width="1.5" stroke-dasharray="3 4" marker-end="url(#arrowCyan)"/>
|
||||
</g>
|
||||
|
||||
<g id="container-states">
|
||||
<text x="100" y="425" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">CONTAINER-STATE TRACK</text>
|
||||
<line x1="60" y1="440" x2="1220" y2="440" stroke="#2D4A6B" stroke-width="0.5" stroke-dasharray="2 4" />
|
||||
|
||||
<g id="state-waiting">
|
||||
<rect x="100" y="460" width="280" height="70" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.2" />
|
||||
<line x1="100" y1="490" x2="380" y2="490" stroke="#5BA3E0" stroke-width="0.6" />
|
||||
<text x="116" y="482" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" font-weight="bold">Waiting</text>
|
||||
<text x="116" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">pulling image · applying secrets</text>
|
||||
<text x="116" y="524" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">resolving dependencies</text>
|
||||
</g>
|
||||
|
||||
<g id="state-running">
|
||||
<rect x="400" y="460" width="280" height="70" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5" />
|
||||
<line x1="400" y1="490" x2="680" y2="490" stroke="#FFB627" stroke-width="0.6" />
|
||||
<text x="416" y="482" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" font-weight="bold">Running</text>
|
||||
<text x="416" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">executing successfully</text>
|
||||
<text x="416" y="524" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">.startedAt set</text>
|
||||
</g>
|
||||
|
||||
<g id="state-terminated">
|
||||
<rect x="700" y="460" width="280" height="70" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.2" />
|
||||
<line x1="700" y1="490" x2="980" y2="490" stroke="#3E7AB8" stroke-width="0.6" />
|
||||
<text x="716" y="482" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#A0B8D0" font-weight="bold">Terminated</text>
|
||||
<text x="716" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">exit status · signal recorded</text>
|
||||
<text x="716" y="524" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">.startedAt · .finishedAt</text>
|
||||
</g>
|
||||
|
||||
<line x1="380" y1="495" x2="400" y2="495" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan)" />
|
||||
<line x1="680" y1="495" x2="700" y2="495" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan)" />
|
||||
|
||||
<g id="restart-loop">
|
||||
<rect x="1000" y="460" width="180" height="70" fill="#0E2A47" stroke="#FFB627" stroke-width="1.2" stroke-dasharray="3 3" />
|
||||
<text x="1090" y="482" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">restartPolicy</text>
|
||||
<text x="1090" y="500" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">Always · OnFailure</text>
|
||||
<text x="1090" y="514" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">Never</text>
|
||||
<text x="1090" y="528" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#FFB627" text-anchor="middle">backoff 100ms → 5min</text>
|
||||
</g>
|
||||
<path d="M 1090,460 Q 1090,415 850,415 Q 700,415 700,455" fill="none" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3" marker-end="url(#arrowAmber)"/>
|
||||
</g>
|
||||
|
||||
<g id="probes-strip">
|
||||
<text x="100" y="585" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">PROBE GATES</text>
|
||||
<line x1="60" y1="600" x2="1220" y2="600" stroke="#2D4A6B" stroke-width="0.5" stroke-dasharray="2 4" />
|
||||
|
||||
<rect x="100" y="615" width="350" height="40" fill="none" stroke="#5BA3E0" stroke-width="1" />
|
||||
<text x="115" y="640" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" font-weight="bold">startupProbe</text>
|
||||
<text x="225" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">gates liveness + readiness until passing</text>
|
||||
|
||||
<rect x="465" y="615" width="350" height="40" fill="none" stroke="#FFB627" stroke-width="1" />
|
||||
<text x="480" y="640" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" font-weight="bold">livenessProbe</text>
|
||||
<text x="590" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">fail → kubelet restarts container</text>
|
||||
|
||||
<rect x="830" y="615" width="350" height="40" fill="none" stroke="#7FD99F" stroke-width="1" />
|
||||
<text x="845" y="640" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#7FD99F" font-weight="bold">readinessProbe</text>
|
||||
<text x="965" y="640" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">fail → drop from Service endpoints</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 05 OF 10 · POD LIFECYCLE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 05 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,149 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Services: Four Ways to Be Reachable</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P06 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">A SERVICE EXPOSES A STABLE VIRTUAL ENDPOINT IN FRONT OF AN EVER-CHANGING SET OF PODS</text>
|
||||
</g>
|
||||
|
||||
<g id="ruler-axis">
|
||||
<line x1="80" y1="120" x2="1200" y2="120" stroke="#3E7AB8" stroke-width="0.5"/>
|
||||
<text x="100" y="113" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#6B85A3">REACH AXIS →</text>
|
||||
<text x="1180" y="113" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627" text-anchor="end">PUBLIC ▶</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-clusterip">
|
||||
<line x1="180" y1="125" x2="180" y2="650" stroke="#5BA3E0" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.5"/>
|
||||
<polygon points="180,125 175,135 185,135" fill="#5BA3E0"/>
|
||||
<rect x="100" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#5BA3E0" stroke-width="1.5"/>
|
||||
<rect x="100" y="150" width="160" height="32" fill="#5BA3E0"/>
|
||||
<text x="180" y="171" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 01 · DEFAULT</text>
|
||||
<text x="180" y="208" font-family="Consolas, 'Courier New', monospace" font-size="17" fill="#F0F4F8" text-anchor="middle" font-weight="bold">ClusterIP</text>
|
||||
<line x1="120" y1="222" x2="240" y2="222" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<text x="180" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">cluster-internal</text>
|
||||
<text x="180" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">virtual IP only</text>
|
||||
<line x1="120" y1="280" x2="240" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="120" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="120" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Inside cluster</text>
|
||||
<text x="120" y="336" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">Pod-to-Pod only</text>
|
||||
<text x="120" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Mechanism</text>
|
||||
<text x="120" y="390" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">kube-proxy rules</text>
|
||||
<text x="120" y="406" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">in Service CIDR</text>
|
||||
<text x="120" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ DNS</text>
|
||||
<text x="120" y="460" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#F0F4F8"><svc>.<ns>.svc</text>
|
||||
<text x="120" y="475" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">.cluster.local</text>
|
||||
<text x="120" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="120" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Backend services</text>
|
||||
<text x="120" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">internal APIs</text>
|
||||
<line x1="120" y1="580" x2="240" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="180" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">DEFAULT</text>
|
||||
<text x="180" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">90% of services</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-nodeport">
|
||||
<line x1="465" y1="125" x2="465" y2="650" stroke="#5BA3E0" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.5"/>
|
||||
<polygon points="465,125 460,135 470,135" fill="#5BA3E0"/>
|
||||
<rect x="385" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#5BA3E0" stroke-width="1.5"/>
|
||||
<rect x="385" y="150" width="160" height="32" fill="#5BA3E0"/>
|
||||
<text x="465" y="171" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 02</text>
|
||||
<text x="465" y="208" font-family="Consolas, 'Courier New', monospace" font-size="17" fill="#F0F4F8" text-anchor="middle" font-weight="bold">NodePort</text>
|
||||
<line x1="405" y1="222" x2="525" y2="222" stroke="#5BA3E0" stroke-width="0.6"/>
|
||||
<text x="465" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">static port on</text>
|
||||
<text x="465" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">every node IP</text>
|
||||
<line x1="405" y1="280" x2="525" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="405" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="405" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">External via</text>
|
||||
<text x="405" y="336" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">NodeIP : NodePort</text>
|
||||
<text x="405" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Port range</text>
|
||||
<text x="405" y="390" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">30000-32767</text>
|
||||
<text x="405" y="406" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">default range</text>
|
||||
<text x="405" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Stack</text>
|
||||
<text x="405" y="460" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">opens on all nodes</text>
|
||||
<text x="405" y="476" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">→ ClusterIP → Pod</text>
|
||||
<text x="405" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="405" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">No cloud LB</text>
|
||||
<text x="405" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">dev / on-prem</text>
|
||||
<line x1="405" y1="580" x2="525" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="465" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">L4 EXPOSURE</text>
|
||||
<text x="465" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">no LB needed</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-loadbalancer">
|
||||
<line x1="750" y1="125" x2="750" y2="650" stroke="#FFB627" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.6"/>
|
||||
<polygon points="750,125 745,135 755,135" fill="#FFB627"/>
|
||||
<rect x="670" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#FFB627" stroke-width="2"/>
|
||||
<rect x="670" y="150" width="160" height="32" fill="#FFB627"/>
|
||||
<text x="750" y="171" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 03 · CLOUD</text>
|
||||
<text x="750" y="208" font-family="Consolas, 'Courier New', monospace" font-size="15" fill="#FFB627" text-anchor="middle" font-weight="bold">LoadBalancer</text>
|
||||
<line x1="690" y1="222" x2="810" y2="222" stroke="#FFB627" stroke-width="0.6"/>
|
||||
<text x="750" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">cloud LB with</text>
|
||||
<text x="750" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">external IP</text>
|
||||
<line x1="690" y1="280" x2="810" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="690" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="690" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Public Internet</text>
|
||||
<text x="690" y="336" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">cloud LB DNS</text>
|
||||
<text x="690" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Provisioned by</text>
|
||||
<text x="690" y="390" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8">cloud-ctrl-mgr</text>
|
||||
<text x="690" y="406" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">AWS ELB · GCP LB</text>
|
||||
<text x="690" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Stack</text>
|
||||
<text x="690" y="460" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">LB → NodePort</text>
|
||||
<text x="690" y="476" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">→ ClusterIP → Pod</text>
|
||||
<text x="690" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="690" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Public-facing app</text>
|
||||
<text x="690" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">requires cloud</text>
|
||||
<line x1="690" y1="580" x2="810" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="750" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">▲ PRODUCTION</text>
|
||||
<text x="750" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#F0F4F8" text-anchor="middle">canonical pattern</text>
|
||||
</g>
|
||||
|
||||
<g id="pillar-externalname">
|
||||
<line x1="1035" y1="125" x2="1035" y2="650" stroke="#3E7AB8" stroke-width="0.4" stroke-dasharray="2 4" opacity="0.5"/>
|
||||
<polygon points="1035,125 1030,135 1040,135" fill="#3E7AB8"/>
|
||||
<rect x="955" y="150" width="160" height="500" fill="#1A3A5C" fill-opacity="0.35" stroke="#3E7AB8" stroke-width="1.3" stroke-dasharray="5 3"/>
|
||||
<rect x="955" y="150" width="160" height="32" fill="#3E7AB8"/>
|
||||
<text x="1035" y="171" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">TYPE 04 · DNS ONLY</text>
|
||||
<text x="1035" y="208" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#F0F4F8" text-anchor="middle" font-weight="bold">ExternalName</text>
|
||||
<line x1="975" y1="222" x2="1095" y2="222" stroke="#3E7AB8" stroke-width="0.6"/>
|
||||
<text x="1035" y="244" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">CNAME alias to</text>
|
||||
<text x="1035" y="258" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">external DNS</text>
|
||||
<line x1="975" y1="280" x2="1095" y2="280" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="975" y="302" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Where</text>
|
||||
<text x="975" y="320" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">Outside cluster</text>
|
||||
<text x="975" y="336" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">via DNS resolution</text>
|
||||
<text x="975" y="372" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Mechanism</text>
|
||||
<text x="975" y="390" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">DNS CNAME record</text>
|
||||
<text x="975" y="406" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">no kube-proxy</text>
|
||||
<text x="975" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Selector</text>
|
||||
<text x="975" y="460" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">none required</text>
|
||||
<text x="975" y="476" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">no backing Pods</text>
|
||||
<text x="975" y="512" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">▼ Use when</text>
|
||||
<text x="975" y="530" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">External DB / API</text>
|
||||
<text x="975" y="546" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">migration shim</text>
|
||||
<line x1="975" y1="580" x2="1095" y2="580" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="1035" y="610" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8" text-anchor="middle">NO PROXYING</text>
|
||||
<text x="1035" y="624" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">edge case only</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 06 OF 10 · SERVICE TYPES</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 06 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,151 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
<marker id="arrowCyan2" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#5BA3E0"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Storage: PV / PVC / StorageClass</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P07 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">PERSISTENT STORAGE IS A THREE-RESOURCE CONTRACT · POD CLAIM + ADMIN PROVISIONER</text>
|
||||
</g>
|
||||
|
||||
<g id="stack-diagram">
|
||||
<text x="80" y="120" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">CONSUMER STACK · TOP → BOTTOM</text>
|
||||
|
||||
<g id="layer-pod">
|
||||
<rect x="80" y="140" width="500" height="60" fill="#0E2A47" stroke="#7FD99F" stroke-width="1.5"/>
|
||||
<rect x="80" y="140" width="6" height="60" fill="#7FD99F"/>
|
||||
<use data-icon="tabler-outline/cube" x="100" y="153" width="32" height="32" fill="#7FD99F" stroke-width="1.5"/>
|
||||
<text x="145" y="167" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#7FD99F" font-weight="bold">Pod</text>
|
||||
<text x="180" y="167" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— consumes storage via</text>
|
||||
<text x="145" y="187" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8">volumes[].persistentVolumeClaim.claimName</text>
|
||||
</g>
|
||||
|
||||
<line x1="180" y1="200" x2="180" y2="225" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan2)"/>
|
||||
<text x="195" y="218" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">claims</text>
|
||||
|
||||
<g id="layer-pvc">
|
||||
<rect x="80" y="232" width="500" height="80" fill="#0E2A47" stroke="#FFB627" stroke-width="1.8"/>
|
||||
<rect x="80" y="232" width="6" height="80" fill="#FFB627"/>
|
||||
<use data-icon="tabler-outline/contract" x="100" y="248" width="30" height="30" fill="#FFB627" stroke-width="1.5"/>
|
||||
<text x="145" y="263" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">PersistentVolumeClaim</text>
|
||||
<text x="362" y="263" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— pvc — namespaced</text>
|
||||
<text x="145" y="284" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">request: size + accessModes + storageClassName</text>
|
||||
<text x="145" y="301" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">like a Pod requesting CPU/RAM — but for disk</text>
|
||||
</g>
|
||||
|
||||
<line x1="180" y1="312" x2="180" y2="337" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrowCyan2)"/>
|
||||
<text x="195" y="330" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">binds 1:1</text>
|
||||
|
||||
<g id="layer-pv">
|
||||
<rect x="80" y="344" width="500" height="80" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.5"/>
|
||||
<rect x="80" y="344" width="6" height="80" fill="#5BA3E0"/>
|
||||
<use data-icon="tabler-outline/device-floppy" x="100" y="360" width="30" height="30" fill="#5BA3E0" stroke-width="1.5"/>
|
||||
<text x="145" y="375" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#5BA3E0" font-weight="bold">PersistentVolume</text>
|
||||
<text x="316" y="375" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— pv — cluster-scoped</text>
|
||||
<text x="145" y="396" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">a concrete storage resource (NFS / iSCSI / cloud disk)</text>
|
||||
<text x="145" y="413" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">lifecycle independent of any Pod</text>
|
||||
</g>
|
||||
|
||||
<line x1="180" y1="424" x2="180" y2="449" stroke="#5BA3E0" stroke-width="1" stroke-dasharray="3 3" marker-end="url(#arrowCyan2)"/>
|
||||
<text x="195" y="442" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0">backing media</text>
|
||||
|
||||
<g id="layer-backend">
|
||||
<rect x="80" y="456" width="500" height="60" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="5 3"/>
|
||||
<rect x="80" y="456" width="6" height="60" fill="#3E7AB8"/>
|
||||
<use data-icon="tabler-outline/server" x="100" y="468" width="30" height="30" fill="#3E7AB8" stroke-width="1.5"/>
|
||||
<text x="145" y="483" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#3E7AB8" font-weight="bold">Storage backend</text>
|
||||
<text x="145" y="504" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">EBS · Persistent Disk · Ceph RBD · NFS · iSCSI · LonghornFS</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="provisioner-spine">
|
||||
<text x="640" y="120" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">PROVISIONER SPINE · ADMIN SIDE</text>
|
||||
<rect x="640" y="140" width="540" height="376" fill="#1A3A5C" fill-opacity="0.3" stroke="#3E7AB8" stroke-width="0.6" stroke-dasharray="4 4"/>
|
||||
|
||||
<g id="storage-class">
|
||||
<rect x="660" y="160" width="500" height="100" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<rect x="660" y="160" width="6" height="100" fill="#FFB627"/>
|
||||
<use data-icon="tabler-outline/template" x="680" y="178" width="30" height="30" fill="#FFB627" stroke-width="1.5"/>
|
||||
<text x="722" y="193" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">StorageClass</text>
|
||||
<text x="862" y="193" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— admin recipe</text>
|
||||
<text x="722" y="214" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">defines: provisioner + parameters + reclaimPolicy</text>
|
||||
<text x="722" y="231" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">PVC requests by name → PV is created on demand</text>
|
||||
<text x="722" y="251" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">enables <tspan fill="#FFB627" font-weight="bold">dynamic provisioning</tspan> — no static PV setup</text>
|
||||
</g>
|
||||
|
||||
<g id="csi-driver">
|
||||
<rect x="660" y="280" width="500" height="80" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="660" y="280" width="6" height="80" fill="#5BA3E0"/>
|
||||
<use data-icon="tabler-outline/plug-connected" x="680" y="296" width="30" height="30" fill="#5BA3E0" stroke-width="1.5"/>
|
||||
<text x="722" y="311" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#5BA3E0" font-weight="bold">CSI Driver</text>
|
||||
<text x="832" y="311" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— Container Storage Interface</text>
|
||||
<text x="722" y="333" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">vendor plugin that creates / attaches / mounts volumes</text>
|
||||
<text x="722" y="349" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0">replaces deprecated in-tree storage plugins</text>
|
||||
</g>
|
||||
|
||||
<g id="access-modes">
|
||||
<text x="660" y="392" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627">▼ ACCESS MODES</text>
|
||||
<rect x="660" y="402" width="120" height="40" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="720" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle" font-weight="bold">RWO</text>
|
||||
<text x="720" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">1 node, R/W</text>
|
||||
<rect x="785" y="402" width="120" height="40" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="845" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle" font-weight="bold">ROX</text>
|
||||
<text x="845" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">many nodes, RO</text>
|
||||
<rect x="910" y="402" width="120" height="40" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="970" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle" font-weight="bold">RWX</text>
|
||||
<text x="970" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">many nodes, R/W</text>
|
||||
<rect x="1035" y="402" width="120" height="40" fill="none" stroke="#FFB627" stroke-width="1"/>
|
||||
<text x="1095" y="423" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">RWOP</text>
|
||||
<text x="1095" y="436" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">1 pod, R/W</text>
|
||||
</g>
|
||||
|
||||
<g id="reclaim">
|
||||
<text x="660" y="476" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627">▼ RECLAIM POLICY</text>
|
||||
<rect x="660" y="486" width="160" height="22" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="740" y="501" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle">Retain</text>
|
||||
<rect x="830" y="486" width="160" height="22" fill="none" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="910" y="501" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" text-anchor="middle">Delete (default)</text>
|
||||
<rect x="1000" y="486" width="160" height="22" fill="none" stroke="#3E7AB8" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
<text x="1080" y="501" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="middle">Recycle ✗ deprecated</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="provisioning-mode">
|
||||
<rect x="80" y="540" width="1100" height="100" fill="#1A3A5C" fill-opacity="0.4" stroke="#5BA3E0" stroke-width="1"/>
|
||||
<text x="100" y="565" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" font-weight="bold">PROVISIONING MODES</text>
|
||||
|
||||
<rect x="100" y="580" width="500" height="50" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="116" y="600" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#5BA3E0" font-weight="bold">STATIC</text>
|
||||
<text x="180" y="600" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— admin creates PVs in advance</text>
|
||||
<text x="116" y="618" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">PVC matches → controller binds 1:1 via ClaimRef</text>
|
||||
|
||||
<rect x="620" y="580" width="540" height="50" fill="none" stroke="#FFB627" stroke-width="1"/>
|
||||
<text x="636" y="600" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#FFB627" font-weight="bold">DYNAMIC</text>
|
||||
<text x="708" y="600" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0">— StorageClass provisions on demand</text>
|
||||
<text x="636" y="618" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8">requires <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627">DefaultStorageClass</tspan> admission controller</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 07 OF 10 · STORAGE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 07 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,151 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<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>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P08 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="stacked-topology">
|
||||
<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"/>
|
||||
<text x="100" y="135" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#5BA3E0" font-weight="bold">[ TOPOLOGY A ] STACKED</text>
|
||||
<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>
|
||||
<line x1="80" y1="170" x2="640" y2="170" stroke="#5BA3E0" stroke-width="0.5"/>
|
||||
|
||||
<g id="stacked-host-1">
|
||||
<polygon points="200,210 280,250 280,330 200,370 120,330 120,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<line x1="200" y1="210" x2="200" y2="290" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="200" y1="290" x2="120" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="200" y1="290" x2="280" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<rect x="155" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="200" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text>
|
||||
<rect x="155" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="200" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text>
|
||||
<text x="200" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-01</text>
|
||||
</g>
|
||||
|
||||
<g id="stacked-host-2">
|
||||
<polygon points="360,210 440,250 440,330 360,370 280,330 280,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<line x1="360" y1="210" x2="360" y2="290" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="360" y1="290" x2="280" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="360" y1="290" x2="440" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<rect x="315" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="360" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text>
|
||||
<rect x="315" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="360" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text>
|
||||
<text x="360" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-02</text>
|
||||
</g>
|
||||
|
||||
<g id="stacked-host-3">
|
||||
<polygon points="520,210 600,250 600,330 520,370 440,330 440,250" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<line x1="520" y1="210" x2="520" y2="290" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="520" y1="290" x2="440" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<line x1="520" y1="290" x2="600" y2="250" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<rect x="475" y="270" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="520" y="281" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">apiserver</text>
|
||||
<rect x="475" y="288" width="90" height="14" fill="none" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<text x="520" y="299" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#FFB627" text-anchor="middle">etcd</text>
|
||||
<text x="520" y="395" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="middle">host-03</text>
|
||||
</g>
|
||||
|
||||
<path d="M 200,330 Q 360,355 360,330" fill="none" stroke="#FFB627" stroke-width="0.8" stroke-dasharray="2 2"/>
|
||||
<path d="M 360,330 Q 520,355 520,330" fill="none" stroke="#FFB627" stroke-width="0.8" stroke-dasharray="2 2"/>
|
||||
|
||||
<g id="stacked-tradeoffs">
|
||||
<line x1="100" y1="430" x2="620" y2="430" stroke="#5BA3E0" stroke-width="0.5"/>
|
||||
<text x="100" y="455" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F">▲ TRADE-OFFS</text>
|
||||
<text x="100" y="478" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Fewer hosts to maintain</text>
|
||||
<text x="100" y="497" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Lower infrastructure cost</text>
|
||||
<text x="100" y="516" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Simpler kubeadm setup</text>
|
||||
<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>
|
||||
<text x="100" y="563" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− Less failure isolation</text>
|
||||
<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>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="external-topology">
|
||||
<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"/>
|
||||
<text x="700" y="135" font-family="Consolas, 'Courier New', monospace" font-size="14" fill="#FFB627" font-weight="bold">[ TOPOLOGY B ] EXTERNAL ETCD ★</text>
|
||||
<text x="700" y="155" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#A0B8D0">etcd cluster on dedicated hosts</text>
|
||||
<line x1="680" y1="170" x2="1240" y2="170" stroke="#FFB627" stroke-width="0.5"/>
|
||||
|
||||
<text x="700" y="195" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#5BA3E0">CONTROL PLANE TIER</text>
|
||||
|
||||
<g id="ext-cp-1">
|
||||
<polygon points="780,225 850,260 850,330 780,365 710,330 710,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="740" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="780" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text>
|
||||
<text x="780" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-01</text>
|
||||
</g>
|
||||
<g id="ext-cp-2">
|
||||
<polygon points="940,225 1010,260 1010,330 940,365 870,330 870,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="900" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="940" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text>
|
||||
<text x="940" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-02</text>
|
||||
</g>
|
||||
<g id="ext-cp-3">
|
||||
<polygon points="1100,225 1170,260 1170,330 1100,365 1030,330 1030,260" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="1060" y="290" width="80" height="14" fill="none" stroke="#5BA3E0" stroke-width="0.8"/>
|
||||
<text x="1100" y="301" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#5BA3E0" text-anchor="middle">apiserver</text>
|
||||
<text x="1100" y="380" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#A0B8D0" text-anchor="middle">cp-03</text>
|
||||
</g>
|
||||
|
||||
<line x1="780" y1="365" x2="780" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
<line x1="940" y1="365" x2="940" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
<line x1="1100" y1="365" x2="1100" y2="415" stroke="#FFB627" stroke-width="1" stroke-dasharray="3 3"/>
|
||||
|
||||
<text x="700" y="402" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627">ETCD TIER (dedicated)</text>
|
||||
|
||||
<rect x="710" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<text x="760" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="760" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-01</text>
|
||||
|
||||
<rect x="890" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<text x="940" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="940" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-02</text>
|
||||
|
||||
<rect x="1050" y="415" width="100" height="50" fill="#0E2A47" stroke="#FFB627" stroke-width="1.5"/>
|
||||
<text x="1100" y="438" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="1100" y="455" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">etcd-03</text>
|
||||
|
||||
<path d="M 760,440 Q 850,475 940,440" fill="none" stroke="#FFB627" stroke-width="0.7" stroke-dasharray="2 2"/>
|
||||
<path d="M 940,440 Q 1020,475 1100,440" fill="none" stroke="#FFB627" stroke-width="0.7" stroke-dasharray="2 2"/>
|
||||
|
||||
<g id="ext-tradeoffs">
|
||||
<line x1="700" y1="490" x2="1220" y2="490" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="700" y="515" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F">▲ TRADE-OFFS</text>
|
||||
<text x="700" y="538" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Failure isolation across tiers</text>
|
||||
<text x="700" y="557" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ etcd survives apiserver disk pressure</text>
|
||||
<text x="700" y="576" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8">+ Independent scaling / upgrade paths</text>
|
||||
<text x="700" y="595" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#FF6B6B">− Double the hosts to operate</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g id="ha-rules">
|
||||
<rect x="80" y="625" width="1160" height="38" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="0.8"/>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<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>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 08 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,161 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47"/>
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6"/>
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47"/>
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3"/>
|
||||
</pattern>
|
||||
<marker id="arrow09Cyan" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#5BA3E0"/>
|
||||
</marker>
|
||||
<marker id="arrow09Amber" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
||||
<path d="M 0,0 L 10,5 L 0,10 Z" fill="#FFB627"/>
|
||||
</marker>
|
||||
<radialGradient id="apiGlow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#FFB627" stop-opacity="0.25"/>
|
||||
<stop offset="100%" stop-color="#FFB627" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.4"/>
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.6"/>
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<text x="60" y="42" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="30" font-weight="bold" fill="#F0F4F8">Every Line Crosses the API Server</text>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P09 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="78" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#6B85A3">NO COMPONENT TALKS DIRECTLY TO ANOTHER — ALL FLOWS GO THROUGH kube-apiserver</text>
|
||||
</g>
|
||||
|
||||
<g id="lane-labels">
|
||||
<text x="180" y="115" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#5BA3E0" text-anchor="middle">CLIENTS / WATCHERS</text>
|
||||
<text x="640" y="115" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">SPINE</text>
|
||||
<text x="1100" y="115" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#5BA3E0" text-anchor="middle">PERSISTENCE</text>
|
||||
<line x1="60" y1="125" x2="1220" y2="125" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
</g>
|
||||
|
||||
<g id="cli-kubectl">
|
||||
<rect x="80" y="155" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="155" width="4" height="56" fill="#5BA3E0"/>
|
||||
<use data-icon="tabler-outline/terminal" x="96" y="170" width="24" height="24" fill="#5BA3E0" stroke-width="1.5"/>
|
||||
<text x="130" y="180" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kubectl</text>
|
||||
<text x="130" y="198" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">CLI · scripts · CI/CD</text>
|
||||
</g>
|
||||
<g id="cli-sched">
|
||||
<rect x="80" y="225" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="225" width="4" height="56" fill="#5BA3E0"/>
|
||||
<use data-icon="tabler-outline/settings" x="96" y="240" width="24" height="24" fill="#5BA3E0" stroke-width="1.5"/>
|
||||
<text x="130" y="250" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kube-scheduler</text>
|
||||
<text x="130" y="268" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">picks node for Pod</text>
|
||||
</g>
|
||||
<g id="cli-ctrl">
|
||||
<rect x="80" y="295" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="295" width="4" height="56" fill="#5BA3E0"/>
|
||||
<use data-icon="tabler-outline/refresh" x="96" y="310" width="24" height="24" fill="#5BA3E0" stroke-width="1.5"/>
|
||||
<text x="130" y="320" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#F0F4F8" font-weight="bold">controller-mgr</text>
|
||||
<text x="130" y="338" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">reconcile loops</text>
|
||||
</g>
|
||||
<g id="cli-kubelet">
|
||||
<rect x="80" y="365" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="365" width="4" height="56" fill="#5BA3E0"/>
|
||||
<use data-icon="tabler-outline/cube" x="96" y="380" width="24" height="24" fill="#5BA3E0" stroke-width="1.5"/>
|
||||
<text x="130" y="390" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kubelet (node)</text>
|
||||
<text x="130" y="408" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">node-side agent · ≥1 per node</text>
|
||||
</g>
|
||||
<g id="cli-proxy">
|
||||
<rect x="80" y="435" width="200" height="56" fill="#0E2A47" stroke="#5BA3E0" stroke-width="1.3"/>
|
||||
<rect x="80" y="435" width="4" height="56" fill="#5BA3E0"/>
|
||||
<use data-icon="tabler-outline/route" x="96" y="450" width="24" height="24" fill="#5BA3E0" stroke-width="1.5"/>
|
||||
<text x="130" y="460" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#F0F4F8" font-weight="bold">kube-proxy</text>
|
||||
<text x="130" y="478" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#A0B8D0">Service rule programmer</text>
|
||||
</g>
|
||||
<g id="cli-cloud">
|
||||
<rect x="80" y="505" width="200" height="56" fill="#0E2A47" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="4 3"/>
|
||||
<rect x="80" y="505" width="4" height="56" fill="#3E7AB8"/>
|
||||
<use data-icon="tabler-outline/cloud" x="96" y="520" width="24" height="24" fill="#3E7AB8" stroke-width="1.5"/>
|
||||
<text x="130" y="530" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" font-weight="bold">cloud-ctrl-mgr</text>
|
||||
<text x="130" y="548" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#6B85A3">optional · cloud only</text>
|
||||
</g>
|
||||
|
||||
<g id="api-spine">
|
||||
<circle cx="640" cy="360" r="180" fill="url(#apiGlow)"/>
|
||||
<rect x="540" y="180" width="200" height="360" fill="#0E2A47" stroke="#FFB627" stroke-width="2"/>
|
||||
<rect x="540" y="180" width="200" height="36" fill="#FFB627"/>
|
||||
<text x="640" y="204" font-family="Consolas, 'Courier New', monospace" font-size="12" fill="#0E2A47" text-anchor="middle" font-weight="bold">★ SPINE</text>
|
||||
<text x="640" y="245" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#FFB627" text-anchor="middle" font-weight="bold">kube-apiserver</text>
|
||||
<line x1="560" y1="263" x2="720" y2="263" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="640" y="290" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#F0F4F8" text-anchor="middle">REST API surface</text>
|
||||
<text x="640" y="310" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• authn / authz</text>
|
||||
<text x="640" y="328" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• admission webhooks</text>
|
||||
<text x="640" y="346" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• validation</text>
|
||||
<text x="640" y="364" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">• mutation</text>
|
||||
<line x1="560" y1="380" x2="720" y2="380" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="640" y="406" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle">scales horizontally</text>
|
||||
<text x="640" y="424" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">N replicas behind LB</text>
|
||||
<line x1="560" y1="445" x2="720" y2="445" stroke="#FFB627" stroke-width="0.5"/>
|
||||
<text x="640" y="471" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F" text-anchor="middle">watch · long-poll</text>
|
||||
<text x="640" y="489" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F" text-anchor="middle">+ list streams</text>
|
||||
<text x="640" y="513" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#6B85A3" text-anchor="middle">every component watches</text>
|
||||
<text x="640" y="528" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="10" fill="#6B85A3" text-anchor="middle">to drive its reconcile loop</text>
|
||||
</g>
|
||||
|
||||
<g id="persistence-column">
|
||||
<rect x="1000" y="290" width="200" height="140" fill="#0E2A47" stroke="#FFB627" stroke-width="2"/>
|
||||
<rect x="1000" y="290" width="200" height="30" fill="#FFB627"/>
|
||||
<text x="1100" y="310" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#0E2A47" text-anchor="middle" font-weight="bold">SOLE STORAGE</text>
|
||||
<use data-icon="tabler-outline/database" x="1018" y="335" width="34" height="34" fill="#FFB627" stroke-width="1.5"/>
|
||||
<text x="1100" y="358" font-family="Consolas, 'Courier New', monospace" font-size="16" fill="#FFB627" text-anchor="middle" font-weight="bold">etcd</text>
|
||||
<text x="1100" y="380" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#F0F4F8" text-anchor="middle">Raft K/V cluster</text>
|
||||
<text x="1100" y="398" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="11" fill="#A0B8D0" text-anchor="middle">all cluster state</text>
|
||||
<line x1="1018" y1="410" x2="1182" y2="410" stroke="#FFB627" stroke-width="0.4"/>
|
||||
<text x="1100" y="424" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0" text-anchor="middle">3 or 5 members · odd</text>
|
||||
</g>
|
||||
|
||||
<g id="watch-arrows">
|
||||
<line x1="280" y1="183" x2="540" y2="218" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="295" y="173" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">POST · PUT</text>
|
||||
<line x1="280" y1="253" x2="540" y2="263" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="305" y="244" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch unscheduled</text>
|
||||
<line x1="540" y1="290" x2="280" y2="270" stroke="#7FD99F" stroke-width="1.2" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="338" y="285" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#7FD99F">bind decision</text>
|
||||
|
||||
<line x1="280" y1="323" x2="540" y2="333" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="320" y="316" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch + patch</text>
|
||||
|
||||
<line x1="280" y1="393" x2="540" y2="403" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="320" y="386" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch pods/node</text>
|
||||
<line x1="540" y1="425" x2="280" y2="420" stroke="#7FD99F" stroke-width="1.2" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="380" y="418" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#7FD99F">report status</text>
|
||||
|
||||
<line x1="280" y1="463" x2="540" y2="475" stroke="#5BA3E0" stroke-width="1.5" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="318" y="456" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#A0B8D0">watch services</text>
|
||||
|
||||
<line x1="280" y1="533" x2="540" y2="510" stroke="#3E7AB8" stroke-width="1.2" stroke-dasharray="4 3" marker-end="url(#arrow09Cyan)"/>
|
||||
<text x="320" y="523" font-family="Consolas, 'Courier New', monospace" font-size="9" fill="#3E7AB8">cloud sync (optional)</text>
|
||||
|
||||
<line x1="740" y1="345" x2="1000" y2="345" stroke="#FFB627" stroke-width="2" marker-end="url(#arrow09Amber)"/>
|
||||
<line x1="1000" y1="375" x2="740" y2="375" stroke="#FFB627" stroke-width="2" marker-end="url(#arrow09Amber)"/>
|
||||
<text x="870" y="335" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627" text-anchor="middle" font-weight="bold">gRPC · write</text>
|
||||
<text x="870" y="395" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#FFB627" text-anchor="middle" font-weight="bold">gRPC · read</text>
|
||||
</g>
|
||||
|
||||
<g id="bottom-takeaway">
|
||||
<rect x="60" y="588" width="1160" height="74" fill="#1A3A5C" fill-opacity="0.6" stroke="#FFB627" stroke-width="1"/>
|
||||
<use data-icon="tabler-outline/route" x="76" y="608" width="32" height="32" fill="#FFB627" stroke-width="1.5"/>
|
||||
<text x="120" y="615" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" font-weight="bold">WHY THIS MATTERS</text>
|
||||
<text x="120" y="638" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="13" fill="#F0F4F8">API-mediation makes Kubernetes <tspan fill="#FFB627" font-weight="bold">pluggable</tspan> (any controller can join the loop by watching the API), <tspan fill="#FFB627" font-weight="bold">observable</tspan> (every state change is an API event), and <tspan fill="#FFB627" font-weight="bold">auditable</tspan>.</text>
|
||||
<text x="120" y="656" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="12" fill="#A0B8D0">The constraint <tspan font-family="Consolas, 'Courier New', monospace" fill="#FFB627">"all roads through apiserver"</tspan> is the architecture, not an inconvenience.</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5"/>
|
||||
<text x="60" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3">K8S-ARCH-2026 · DRAWING 09 OF 10 · API SPINE</text>
|
||||
<text x="1220" y="700" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" text-anchor="end">SHEET 09 OF 10</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,99 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720">
|
||||
<defs>
|
||||
<pattern id="bpGridMajor" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" data-pptx-pattern="lgGrid">
|
||||
<rect width="40" height="40" fill="#0E2A47" />
|
||||
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#2D4A6B" stroke-width="0.6" />
|
||||
</pattern>
|
||||
<pattern id="bpGridMinor" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse" data-pptx-pattern="smGrid">
|
||||
<rect width="8" height="8" fill="#0E2A47" />
|
||||
<path d="M 8 0 L 0 0 0 8" fill="none" stroke="#1A3A5C" stroke-width="0.3" />
|
||||
</pattern>
|
||||
<radialGradient id="endVignette" cx="50%" cy="50%" r="75%">
|
||||
<stop offset="50%" stop-color="#0E2A47" stop-opacity="0" />
|
||||
<stop offset="100%" stop-color="#000000" stop-opacity="0.5" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<g id="bg">
|
||||
<rect width="1280" height="720" fill="#0E2A47" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMinor)" opacity="0.3" />
|
||||
<rect width="1280" height="720" fill="url(#bpGridMajor)" opacity="0.45" />
|
||||
<rect width="1280" height="720" fill="url(#endVignette)" />
|
||||
</g>
|
||||
|
||||
<g id="header">
|
||||
<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>
|
||||
<text x="1220" y="42" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#A0B8D0" text-anchor="end">P10 / 10</text>
|
||||
<line x1="60" y1="58" x2="1220" y2="58" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
</g>
|
||||
|
||||
<g id="takeaway-1">
|
||||
<text x="120" y="200" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#FFB627" letter-spacing="3">01 / ONE SPINE</text>
|
||||
<line x1="120" y1="215" x2="160" y2="215" stroke="#FFB627" stroke-width="2" />
|
||||
<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>
|
||||
<text x="120" y="312" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">every state change.</text>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="takeaway-2">
|
||||
<text x="120" y="408" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#5BA3E0" letter-spacing="3">02 / ONE TRUTH</text>
|
||||
<line x1="120" y1="423" x2="160" y2="423" stroke="#5BA3E0" stroke-width="2" />
|
||||
<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>
|
||||
<text x="120" y="520" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="36" font-weight="bold" fill="#F0F4F8">persistent store.</text>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="takeaway-3">
|
||||
<text x="700" y="200" font-family="Consolas, 'Courier New', monospace" font-size="13" fill="#7FD99F" letter-spacing="3">03 / ONE LOOP</text>
|
||||
<line x1="700" y1="215" x2="740" y2="215" stroke="#7FD99F" stroke-width="2" />
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
</g>
|
||||
|
||||
<g id="reconcile-diagram">
|
||||
<text x="700" y="408" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#6B85A3" letter-spacing="2">THE LOOP, DRAWN</text>
|
||||
<line x1="700" y1="420" x2="1180" y2="420" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
|
||||
<g id="loop-watch">
|
||||
<circle cx="780" cy="500" r="40" fill="none" stroke="#5BA3E0" stroke-width="1.5" />
|
||||
<text x="780" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#5BA3E0" text-anchor="middle" font-weight="bold">watch</text>
|
||||
<text x="780" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">desired</text>
|
||||
</g>
|
||||
<g id="loop-diff">
|
||||
<circle cx="940" cy="500" r="40" fill="none" stroke="#FFB627" stroke-width="1.5" />
|
||||
<text x="940" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" text-anchor="middle" font-weight="bold">diff</text>
|
||||
<text x="940" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">vs actual</text>
|
||||
</g>
|
||||
<g id="loop-act">
|
||||
<circle cx="1100" cy="500" r="40" fill="none" stroke="#7FD99F" stroke-width="1.5" />
|
||||
<text x="1100" y="495" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#7FD99F" text-anchor="middle" font-weight="bold">act</text>
|
||||
<text x="1100" y="510" font-family="Arial, 'Microsoft YaHei', sans-serif" font-size="9" fill="#A0B8D0" text-anchor="middle">converge</text>
|
||||
</g>
|
||||
|
||||
<line x1="820" y1="500" x2="900" y2="500" stroke="#5BA3E0" stroke-width="1" />
|
||||
<polygon points="900,500 893,496 893,504" fill="#5BA3E0" />
|
||||
<line x1="980" y1="500" x2="1060" y2="500" stroke="#FFB627" stroke-width="1" />
|
||||
<polygon points="1060,500 1053,496 1053,504" fill="#FFB627" />
|
||||
|
||||
<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" />
|
||||
<polygon points="780,540 776,548 784,548" fill="#7FD99F" />
|
||||
<text x="940" y="630" font-family="Consolas, 'Courier New', monospace" font-size="10" fill="#7FD99F" text-anchor="middle">repeat forever</text>
|
||||
</g>
|
||||
|
||||
<g id="divider">
|
||||
<line x1="660" y1="160" x2="660" y2="595" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
</g>
|
||||
|
||||
<g id="closing-mark">
|
||||
<line x1="120" y1="620" x2="180" y2="620" stroke="#FFB627" stroke-width="1.5" />
|
||||
<text x="120" y="643" font-family="Consolas, 'Courier New', monospace" font-size="11" fill="#FFB627" letter-spacing="2">— END OF DRAWING SET —</text>
|
||||
</g>
|
||||
|
||||
<g id="footer">
|
||||
<line x1="60" y1="680" x2="1220" y2="680" stroke="#2D4A6B" stroke-width="0.5" />
|
||||
<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>
|
||||
<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>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |