绘制详细的 k8s 架构图
2025-12-14
绘制详细的 k8s 架构图
思考过程
用户想要一个详细的 Kubernetes (k8s) 架构图。我需要创建一个清晰、专业的 K8s 架构图,展示其主要组件。
K8s 架构主要包括:
**Control Plane (Master Node):**
- API Server - 核心组件,所有通信的入口
- etcd - 分布式键值存储
- Controller Manager - 控制器管理器
- Scheduler - 调度器
**Worker Nodes:**
- Kubelet - 节点代理
- Kube-proxy - 网络代理
- Container Runtime (Docker/containerd)
- Pods (包含容器)
**其他组件:**
- kubectl (CLI)
- Cloud Provider / Load Balancer
- Ingress Controller
- Services
- ConfigMaps / Secrets
- Volumes
我将创建一个层次清晰的架构图,包括:
1. 外部用户/开发者通过 kubectl
2. Control Plane 区域
3. Worker Nodes 区域
4. 网络层
让我规划布局:
- 顶部:用户和 kubectl
- 中间:Control Plane (Master)
- 底部:Worker Nodes
- 使用容器/分组来组织组件
我会使用合适的颜色来区分不同的组件类别。
我将为您绘制一个详细的 Kubernetes 架构图,包含控制平面(Control Plane)和工作节点(Worker Nodes)的主要组件。
**布局规划:**
1. **顶部**:用户/开发者通过 kubectl 访问
2. **中间**:Control Plane(API Server、etcd、Controller Manager、Scheduler)
3. **底部**:Worker Nodes(Kubelet、Kube-proxy、Container Runtime、Pods)
4. 使用不同颜色区分各层组件
```xml
<mxGraphModel dx="922" dy="646" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- Title -->
<mxCell id="title" value="Kubernetes 架构图" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=1;fontColor=#326CE5;" vertex="1" parent="1">
<mxGeometry x="290" y="10" width="220" height="30" as="geometry"/>
</mxCell>
<!-- User/Developer -->
<mxCell id="user" value="开发者/用户" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
<mxGeometry x="385" y="50" width="30" height="50" as="geometry"/>
</mxCell>
<!-- kubectl -->
<mxCell id="kubectl" value="kubectl" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="355" y="115" width="90" height="35" as="geometry"/>
</mxCell>
<!-- Edge: User to kubectl -->
<mxCell id="e1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;strokeWidth=1.5;" edge="1" parent="1" source="user" target="kubectl">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Control Plane Container -->
<mxCell id="cp_container" value="Control Plane (Master Node)" style="swimlane;startSize=25;fillColor=#dae8fc;strokeColor=#326CE5;strokeWidth=2;rounded=1;fontStyle=1;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="40" y="170" width="720" height="150" as="geometry"/>
</mxCell>
<!-- API Server -->
<mxCell id="api_server" value="API Server" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#326CE5;strokeColor=#1a3a6e;fontColor=#ffffff;fontStyle=1;fontSize=11;" vertex="1" parent="cp_container">
<mxGeometry x="300" y="40" width="120" height="45" as="geometry"/>
</mxCell>
<!-- etcd -->
<mxCell id="etcd" value="etcd
(分布式存储)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=10;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontStyle=1;fontSize=10;" vertex="1" parent="cp_container">
<mxGeometry x="600" y="35" width="90" height="60" as="geometry"/>
</mxCell>
<!-- Controller Manager -->
<mxCell id="controller_mgr" value="Controller
Manager" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#326CE5;strokeColor=#1a3a6e;fontColor=#ffffff;fontStyle=1;fontSize=11;" vertex="1" parent="cp_container">
<mxGeometry x="30" y="40" width="100" height="45" as="geometry"/>
</mxCell>
<!-- Scheduler -->
<mxCell id="scheduler" value="Scheduler" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#326CE5;strokeColor=#1a3a6e;fontColor=#ffffff;fontStyle=1;fontSize=11;" vertex="1" parent="cp_container">
<mxGeometry x="160" y="40" width="100" height="45" as="geometry"/>
</mxCell>
<!-- Cloud Controller Manager -->
<mxCell id="ccm" value="Cloud Controller
Manager" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#326CE5;strokeColor=#1a3a6e;fontColor=#ffffff;fontStyle=1;fontSize=10;" vertex="1" parent="cp_container">
<mxGeometry x="460" y="40" width="100" height="45" as="geometry"/>
</mxCell>
<!-- Controllers detail -->
<mxCell id="controllers_detail" value="• Node Controller
• Replication Controller
• Endpoints Controller
• Service Account Controller" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=9;fontColor=#666666;" vertex="1" parent="cp_container">
<mxGeometry x="20" y="90" width="150" height="55" as="geometry"/>
</mxCell>
<!-- Scheduler detail -->
<mxCell id="scheduler_detail" value="• 资源调度
• 节点选择
• 亲和性/反亲和性" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=9;fontColor=#666666;" vertex="1" parent="cp_container">
<mxGeometry x="160" y="90" width="110" height="55" as="geometry"/>
</mxCell>
<!-- API Server detail -->
<mxCell id="api_detail" value="REST API
认证/授权/准入控制" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=9;fontColor=#666666;" vertex="1" parent="cp_container">
<mxGeometry x="295" y="90" width="130" height="30" as="geometry"/>
</mxCell>
<!-- Edge: kubectl to API Server -->
<mxCell id="e2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;strokeWidth=2;strokeColor=#326CE5;flowAnimation=1;" edge="1" parent="1" source="kubectl" target="api_server">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Edge: API Server to etcd -->
<mxCell id="e3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;startArrow=classic;strokeWidth=1.5;strokeColor=#666666;" edge="1" parent="1" source="api_server" target="etcd">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Edge: Controller to API -->
<mxCell id="e4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;startArrow=classic;strokeWidth=1.5;strokeColor=#326CE5;" edge="1" parent="1" source="controller_mgr" target="api_server">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Edge: Scheduler to API -->
<mxCell id="e5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;startArrow=classic;strokeWidth=1.5;strokeColor=#326CE5;" edge="1" parent="1" source="scheduler" target="api_server">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Edge: CCM to API -->
<mxCell id="e6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;startArrow=classic;strokeWidth=1.5;strokeColor=#326CE5;" edge="1" parent="1" source="ccm" target="api_server">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Worker Node 1 -->
<mxCell id="worker1" value="Worker Node 1" style="swimlane;startSize=22;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;rounded=1;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="40" y="340" width="350" height="250" as="geometry"/>
</mxCell>
<!-- Kubelet 1 -->
<mxCell id="kubelet1" value="Kubelet" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#82b366;strokeColor=#4a7a3a;fontColor=#ffffff;fontStyle=1;fontSize=10;" vertex="1" parent="worker1">
<mxGeometry x="20" y="35" width="80" height="35" as="geometry"/>
</mxCell>
<!-- Kube-proxy 1 -->
<mxCell id="kube_proxy1" value="Kube-proxy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#82b366;strokeColor=#4a7a3a;fontColor=#ffffff;fontStyle=1;fontSize=10;" vertex="1" parent="worker1">
<mxGeometry x="120" y="35" width="80" height="35" as="geometry"/>
</mxCell>
<!-- Container Runtime 1 -->
<mxCell id="runtime1" value="Container Runtime
(containerd/Docker)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#82b366;strokeColor=#4a7a3a;fontColor=#ffffff;fontStyle=1;fontSize=9;" vertex="1" parent="worker1">
<mxGeometry x="220" y="30" width="110" height="45" as="geometry"/>
</mxCell>
<!-- Pod 1 -->
<mxCell id="pod1" value="Pod" style="swimlane;startSize=20;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fontSize=10;fontStyle=1;" vertex="1" parent="worker1">
<mxGeometry x="20" y="90" width="150" height="70" as="geometry"/>
</mxCell>
<!-- Container in Pod 1 -->
<mxCell id="container1" value="Container" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod1">
<mxGeometry x="10" y="30" width="60" height="30" as="geometry"/>
</mxCell>
<!-- Container in Pod 1-2 -->
<mxCell id="container1b" value="Container" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod1">
<mxGeometry x="80" y="30" width="60" height="30" as="geometry"/>
</mxCell>
<!-- Pod 2 -->
<mxCell id="pod2" value="Pod" style="swimlane;startSize=20;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fontSize=10;fontStyle=1;" vertex="1" parent="worker1">
<mxGeometry x="185" y="90" width="80" height="70" as="geometry"/>
</mxCell>
<!-- Container in Pod 2 -->
<mxCell id="container2" value="Container" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod2">
<mxGeometry x="10" y="30" width="60" height="30" as="geometry"/>
</mxCell>
<!-- Pod 3 -->
<mxCell id="pod3" value="Pod" style="swimlane;startSize=20;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fontSize=10;fontStyle=1;" vertex="1" parent="worker1">
<mxGeometry x="280" y="90" width="55" height="70" as="geometry"/>
</mxCell>
<!-- Container in Pod 3 -->
<mxCell id="container3" value="App" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod3">
<mxGeometry x="7" y="30" width="40" height="30" as="geometry"/>
</mxCell>
<!-- Service 1 -->
<mxCell id="service1" value="Service
(ClusterIP)" style="ellipse;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=9;" vertex="1" parent="worker1">
<mxGeometry x="20" y="175" width="75" height="55" as="geometry"/>
</mxCell>
<!-- ConfigMap -->
<mxCell id="configmap1" value="ConfigMap" style="shape=note;whiteSpace=wrap;html=1;size=14;fillColor=#f8cecc;strokeColor=#b85450;fontSize=9;fontStyle=1;" vertex="1" parent="worker1">
<mxGeometry x="110" y="180" width="60" height="50" as="geometry"/>
</mxCell>
<!-- Secret -->
<mxCell id="secret1" value="Secret" style="shape=note;whiteSpace=wrap;html=1;size=14;fillColor=#f8cecc;strokeColor=#b85450;fontSize=9;fontStyle=1;" vertex="1" parent="worker1">
<mxGeometry x="180" y="180" width="55" height="50" as="geometry"/>
</mxCell>
<!-- Volume -->
<mxCell id="volume1" value="Volume
(PV/PVC)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8;fillColor=#f5f5f5;strokeColor=#666666;fontSize=9;fontStyle=1;" vertex="1" parent="worker1">
<mxGeometry x="250" y="175" width="70" height="55" as="geometry"/>
</mxCell>
<!-- Worker Node 2 -->
<mxCell id="worker2" value="Worker Node 2" style="swimlane;startSize=22;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;rounded=1;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="410" y="340" width="350" height="250" as="geometry"/>
</mxCell>
<!-- Kubelet 2 -->
<mxCell id="kubelet2" value="Kubelet" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#82b366;strokeColor=#4a7a3a;fontColor=#ffffff;fontStyle=1;fontSize=10;" vertex="1" parent="worker2">
<mxGeometry x="20" y="35" width="80" height="35" as="geometry"/>
</mxCell>
<!-- Kube-proxy 2 -->
<mxCell id="kube_proxy2" value="Kube-proxy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#82b366;strokeColor=#4a7a3a;fontColor=#ffffff;fontStyle=1;fontSize=10;" vertex="1" parent="worker2">
<mxGeometry x="120" y="35" width="80" height="35" as="geometry"/>
</mxCell>
<!-- Container Runtime 2 -->
<mxCell id="runtime2" value="Container Runtime
(containerd/Docker)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#82b366;strokeColor=#4a7a3a;fontColor=#ffffff;fontStyle=1;fontSize=9;" vertex="1" parent="worker2">
<mxGeometry x="220" y="30" width="110" height="45" as="geometry"/>
</mxCell>
<!-- Pod 4 -->
<mxCell id="pod4" value="Pod" style="swimlane;startSize=20;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fontSize=10;fontStyle=1;" vertex="1" parent="worker2">
<mxGeometry x="20" y="90" width="80" height="70" as="geometry"/>
</mxCell>
<!-- Container in Pod 4 -->
<mxCell id="container4" value="App" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod4">
<mxGeometry x="10" y="30" width="60" height="30" as="geometry"/>
</mxCell>
<!-- Pod 5 -->
<mxCell id="pod5" value="Pod" style="swimlane;startSize=20;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fontSize=10;fontStyle=1;" vertex="1" parent="worker2">
<mxGeometry x="115" y="90" width="110" height="70" as="geometry"/>
</mxCell>
<!-- Container in Pod 5 -->
<mxCell id="container5" value="Sidecar" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod5">
<mxGeometry x="10" y="30" width="45" height="30" as="geometry"/>
</mxCell>
<!-- Container in Pod 5-2 -->
<mxCell id="container5b" value="App" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod5">
<mxGeometry x="60" y="30" width="40" height="30" as="geometry"/>
</mxCell>
<!-- Pod 6 -->
<mxCell id="pod6" value="Pod" style="swimlane;startSize=20;fillColor=#e1d5e7;strokeColor=#9673a6;rounded=1;fontSize=10;fontStyle=1;" vertex="1" parent="worker2">
<mxGeometry x="240" y="90" width="80" height="70" as="geometry"/>
</mxCell>
<!-- Container in Pod 6 -->
<mxCell id="container6" value="DB" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="pod6">
<mxGeometry x="10" y="30" width="60" height="30" as="geometry"/>
</mxCell>
<!-- Service 2 -->
<mxCell id="service2" value="Service
(NodePort)" style="ellipse;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=9;" vertex="1" parent="worker2">
<mxGeometry x="20" y="175" width="75" height="55" as="geometry"/>
</mxCell>
<!-- Ingress -->
<mxCell id="ingress1" value="Ingress" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;fontSize=10;" vertex="1" parent="worker2">
<mxGeometry x="110" y="185" width="80" height="40" as="geometry"/>
</mxCell>
<!-- Deployment -->
<mxCell id="deployment1" value="Deployment/
ReplicaSet" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=9;" vertex="1" parent="worker2">
<mxGeometry x="210" y="180" width="80" height="50" as="geometry"/>
</mxCell>
<!-- DaemonSet -->
<mxCell id="daemonset1" value="DaemonSet" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=9;" vertex="1" parent="worker2">
<mxGeometry x="295" y="180" width="45" height="50" as="geometry"/>
</mxCell>
<!-- Edge: API to Kubelet 1 -->
<mxCell id="e7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;startArrow=classic;strokeWidth=2;strokeColor=#82b366;flowAnimation=1;" edge="1" parent="1" source="api_server" target="kubelet1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="270" y="235"/>
<mxPoint x="270" y="392"/>
</Array>
</mxGeometry>
</mxCell>
<!-- Edge: API to Kubelet 2 -->
<mxCell id="e8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;startArrow=classic;strokeWidth=2;strokeColor=#82b366;flowAnimation=1;" edge="1" parent="1" source="api_server" target="kubelet2">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="530" y="235"/>
<mxPoint x="530" y="392"/>
</Array>
</mxGeometry>
</mxCell>
<!-- Legend -->
<mxCell id="legend" value="图例" style="swimlane;startSize=20;fillColor=#f5f5f5;strokeColor=#666666;rounded=1;fontSize=10;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="40" y="605" width="720" height="55" as="geometry"/>
</mxCell>
<mxCell id="leg1" value="Control Plane 组件" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#326CE5;strokeColor=#1a3a6e;fontColor=#ffffff;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="10" y="25" width="100" height="22" as="geometry"/>
</mxCell>
<mxCell id="leg2" value="Node 组件" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#82b366;strokeColor=#4a7a3a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="120" y="25" width="80" height="22" as="geometry"/>
</mxCell>
<mxCell id="leg3" value="Pod/Container" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#9673a6;strokeColor=#6a4c7a;fontColor=#ffffff;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="210" y="25" width="80" height="22" as="geometry"/>
</mxCell>
<mxCell id="leg4" value="Service" style="ellipse;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="300" y="22" width="60" height="28" as="geometry"/>
</mxCell>
<mxCell id="leg5" value="Config" style="shape=note;whiteSpace=wrap;html=1;size=10;fillColor=#f8cecc;strokeColor=#b85450;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="370" y="22" width="50" height="28" as="geometry"/>
</mxCell>
<mxCell id="leg6" value="Storage" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=6;fillColor=#f5f5f5;strokeColor=#666666;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="430" y="22" width="55" height="28" as="geometry"/>
</mxCell>
<mxCell id="leg7" value="Workload" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="495" y="22" width="60" height="28" as="geometry"/>
</mxCell>
<mxCell id="leg8" value="Ingress" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=9;" vertex="1" parent="legend">
<mxGeometry x="565" y="22" width="60" height="28" as="geometry"/>
</mxCell>
<mxCell id="leg9" value="数据流" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#326CE5;flowAnimation=1;" edge="1" parent="legend">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="640" y="36" as="sourcePoint"/>
<mxPoint x="710" y="36" as="targetPoint"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>