-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
420 lines (295 loc) · 21 KB
/
Copy pathindex.html
File metadata and controls
420 lines (295 loc) · 21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
<!doctype html>
<html itemscope itemtype="http://schema.org/WebPage" lang="en" class="no-js">
<head>
<meta name="generator" content="Hugo 0.117.0">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="alternate" type="application/rss+xml" href="https://eclipse-symphony.github.io/docs/index.xml">
<meta name="robots" content="index, follow">
<link rel="shortcut icon" href="/docs/favicons/favicon.ico" >
<link rel="apple-touch-icon" href="/docs/favicons/apple-touch-icon-180x180.png" sizes="180x180">
<link rel="icon" type="image/png" href="/docs/favicons/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="/docs/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/docs/favicons/android-36x36.png" sizes="36x36">
<link rel="icon" type="image/png" href="/docs/favicons/android-48x48.png" sizes="48x48">
<link rel="icon" type="image/png" href="/docs/favicons/android-72x72.png" sizes="72x72">
<link rel="icon" type="image/png" href="/docs/favicons/android-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="/docs/favicons/android-144x144.png" sizes="144x144">
<link rel="icon" type="image/png" href="/docs/favicons/android-192x192.png" sizes="192x192">
<title>Project Symphony Docs</title>
<meta name="description" content="">
<meta property="og:title" content="Eclipse Symphony Documentation" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://eclipse-symphony.github.io/docs/" />
<meta itemprop="name" content="Eclipse Symphony Documentation">
<meta itemprop="description" content=""><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Eclipse Symphony Documentation"/>
<meta name="twitter:description" content=""/>
<link rel="preload" href="/docs/scss/main.min.d9b935093e5d382ed69ca976bbbae42a7d7a5bbd7d6d52322bc271b0c1f9d3c0.css" as="style" integrity="sha256-2bk1CT5dOC7WnKl2u7rkKn16W719bVIyK8JxsMH508A=" crossorigin="anonymous">
<link href="/docs/scss/main.min.d9b935093e5d382ed69ca976bbbae42a7d7a5bbd7d6d52322bc271b0c1f9d3c0.css" rel="stylesheet" integrity="sha256-2bk1CT5dOC7WnKl2u7rkKn16W719bVIyK8JxsMH508A=" crossorigin="anonymous">
<script
src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="
crossorigin="anonymous"></script>
<script type="text/javascript">
(function(c,l,a,r,i,t,y){
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window, document, "clarity", "script", "bffu3v0r2p");
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=SAMPLE"></script>
<script>
var doNotTrack = false;
if ( false ) {
var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
var doNotTrack = (dnt == "1" || dnt == "yes");
}
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'SAMPLE');
}
</script>
</head>
<body class="td-home">
<header>
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
<a class="navbar-brand" href="/docs/">
<span class="navbar-logo"></span><span class="font-weight-bold navbar-brand__name">Project Symphony Docs</span>
</a>
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
<ul class="navbar-nav mt-2 mt-lg-0">
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class="nav-link" href="https://eclipse.dev/symphony/" target="_blank" ><i class='fas fa-home'></i><span>Home</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class="nav-link" href="https://github.com/eclipse-symphony/symphony" target="_blank" ><i class='fab fa-github'></i><span>GitHub</span></a>
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"></div>
</nav>
</header>
<div class="container-fluid td-outer">
<div class="td-main">
<div class="row flex-xl-nowrap">
<aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
<div id="td-sidebar-menu" class="td-sidebar__inner">
<div id="content-mobile">
<form class="td-sidebar__search d-flex align-items-center">
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-section-nav" aria-expanded="false" aria-label="Toggle section navigation">
</button>
</form>
</div>
<div id="content-desktop"></div>
<nav class="collapse td-sidebar-nav foldable-nav" id="td-section-nav">
<ul class="td-sidebar-nav__section pr-md-3 ul-0">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id="m-docs-li">
<a href="/docs/" title="Eclipse Symphony Documentation" class="align-left pl-0 active td-sidebar-link td-sidebar-link__section tree-root" id="m-docs"><span class="td-sidebar-nav-active-item">Home</span></a>
<ul class="ul-1">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id="m-docsconcepts-li">
<input type="checkbox" id="m-docsconcepts-check"/>
<label for="m-docsconcepts-check"><a class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-docsconcepts"><span class="">Concepts</span></a></label>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docsconceptsoverview-li">
<input type="checkbox" id="m-docsconceptsoverview-check"/>
<label for="m-docsconceptsoverview-check"><a href="/docs/concepts/overview/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docsconceptsoverview"><span class="">Overview</span></a></label>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id="m-docsconceptsabstractions-li">
<input type="checkbox" id="m-docsconceptsabstractions-check"/>
<label for="m-docsconceptsabstractions-check"><a class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-docsconceptsabstractions"><span class="">Core Concepts</span></a></label>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docsconceptsabstractionsinfo_graph-li">
<input type="checkbox" id="m-docsconceptsabstractionsinfo_graph-check"/>
<label for="m-docsconceptsabstractionsinfo_graph-check"><a href="/docs/concepts/abstractions/info_graph/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docsconceptsabstractionsinfo_graph"><span class="">Information Graph</span></a></label>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docsconceptsabstractionsorch_model-li">
<input type="checkbox" id="m-docsconceptsabstractionsorch_model-check"/>
<label for="m-docsconceptsabstractionsorch_model-check"><a href="/docs/concepts/abstractions/orch_model/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docsconceptsabstractionsorch_model"><span class="">Orchestration Model</span></a></label>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docsconceptsabstractionsstate_seeking-li">
<input type="checkbox" id="m-docsconceptsabstractionsstate_seeking-check"/>
<label for="m-docsconceptsabstractionsstate_seeking-check"><a href="/docs/concepts/abstractions/state_seeking/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docsconceptsabstractionsstate_seeking"><span class="">State Seeking</span></a></label>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docsconceptsabstractionsworkflows-li">
<input type="checkbox" id="m-docsconceptsabstractionsworkflows-check"/>
<label for="m-docsconceptsabstractionsworkflows-check"><a href="/docs/concepts/abstractions/workflows/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docsconceptsabstractionsworkflows"><span class="">Workflows</span></a></label>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id="m-docstutorials-li">
<input type="checkbox" id="m-docstutorials-check"/>
<label for="m-docstutorials-check"><a class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-docstutorials"><span class="">Tutorials</span></a></label>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docstutorialsrun-symphony-as-single-process-li">
<input type="checkbox" id="m-docstutorialsrun-symphony-as-single-process-check"/>
<label for="m-docstutorialsrun-symphony-as-single-process-check"><a href="/docs/tutorials/run-symphony-as-single-process/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docstutorialsrun-symphony-as-single-process"><span class="">Symphony as a Process</span></a></label>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docstutorialsrun-symphony-on-k8s-li">
<input type="checkbox" id="m-docstutorialsrun-symphony-on-k8s-check"/>
<label for="m-docstutorialsrun-symphony-on-k8s-check"><a href="/docs/tutorials/run-symphony-on-k8s/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docstutorialsrun-symphony-on-k8s"><span class="">Symphony on Kubernetes</span></a></label>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id="m-docssamples-li">
<input type="checkbox" id="m-docssamples-check"/>
<label for="m-docssamples-check"><a class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-docssamples"><span class="">Samples</span></a></label>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docssamplescounter-campaign-li">
<input type="checkbox" id="m-docssamplescounter-campaign-check"/>
<label for="m-docssamplescounter-campaign-check"><a href="/docs/samples/counter-campaign/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docssamplescounter-campaign"><span class="">Counter Campaign</span></a></label>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-docsecosystem-li">
<input type="checkbox" id="m-docsecosystem-check"/>
<label for="m-docsecosystem-check"><a href="/docs/ecosystem/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-docsecosystem"><span class="">Ecosystem</span></a></label>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
<aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none">
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
</div>
</aside>
<main class="col-12 col-md-9 col-xl-8 ps-md-5" role="main">
<nav aria-label="breadcrumb" class="td-breadcrumbs td-breadcrumbs__single">
<ol class="breadcrumb">
<li class="breadcrumb-item active" aria-current="page">
Home</li>
</ol>
</nav>
<div class="td-content">
<h1>Eclipse Symphony Documentation</h1>
<header class="article-meta">
</header>
<img src="/docs/symphony%20icon_largetext%20%283%29.png" alt="Symphony logo"
style="float: left; width: 180px; max-width: 50%; margin: 0.25rem 1.25rem 0.5rem 0; shape-outside: margin-box;">
<p>The edge is heterogeneous, dynamic, and distributed by nature. It is not a fixed cluster with stable membership. Devices come and go. Workloads move. Networks disconnect and recover. Capabilities vary across heavy edge, light edge, and tiny edge environments. Traditional orchestration, built around static membership and centralized assumptions, is not enough for this reality.</p>
<div style="clear: both;"></div>
<p>Many assumptions made by cloud-centric orchestrators do not hold at the edge: uniform infrastructure, well-protected security boundaries, a single hardware or software vendor, stable connectivity, and uniformly scaled workloads. We want to bring cloud-like management benefits to edge environments, but that does not mean we can simply apply cloud-centric technologies and designs as-is. Edge orchestration must be designed with the edge in mind.</p>
<p>Symphony embraces the fluid nature of the edge. It brings together existing services, device classes, software artifacts, and operational toolchains into a consistent, end-to-end intelligent edge experience. Whether components run on Kubernetes, in the cloud, on-premises, or on constrained devices, Symphony provides the coordination layer needed to harmonize distributed components into a unified system without forcing them into a one-size-fits-all model.</p>
<h1 id="symphony-characteristics">Symphony Characteristics</h1>
<p>Symphony is designed from the ground up for heterogeneous, dynamic, and distributed edge environments. It orchestrates devices and workloads, including AI workloads, without assuming a fixed cluster, a single platform, or a uniform software stack. Its key characteristics include:</p>
<ul>
<li>
<p><strong>Neutral by design.</strong> Symphony is platform-neutral, protocol-neutral, and artifact-schema-neutral. It works with the toolchains you already have, rather than forcing you to replace them. Existing artifacts, protocols, and operational tools can continue to be used as-is, while Symphony coordinates them as part of a larger system.</p>
</li>
<li>
<p><strong>Adoption that scales with you.</strong> Symphony can run as a single process for simple scenarios or scale out on Kubernetes for production deployments. This allows teams to start small, prove value quickly, and grow into larger deployments without changing the overall operating model.</p>
</li>
<li>
<p><strong>Consistent operations across fragmented toolchains.</strong> Symphony brings security, observability, and policy enforcement across diverse systems, even when individual tools do not provide these capabilities natively. It helps teams apply consistent operational practices across otherwise disconnected environments.</p>
</li>
<li>
<p><strong>Built for constrained and disconnected environments.</strong> Symphony minimizes network traffic and management overhead. Its smallest agent is only 4 KB and can be configured to phone home rarely, or not at all, with a tiny payload. For many scenarios, Symphony also supports agentless deployment, requiring no Symphony components on target devices.</p>
</li>
<li>
<p><strong>End-to-end orchestration capabilities.</strong> Symphony includes device management, workload management, configuration management, workflow management, policy management, template management, and more, providing a unified control layer for complex edge solutionversions.</p>
</li>
<li>
<p><strong>Deeply extensible.</strong> Symphony uses providers to integrate with different platforms, protocols, and tools. Its internal system components, including the state store, pub-sub channel, and identity provider, can also be replaced or customized to match the needs of your environment.</p>
</li>
</ul>
<h1 id="key-application-scenarios">Key Application Scenarios</h1>
<p>From large-scale validation systems to fleet operations and edge AI infrastructure, Symphony is already being used to solve some of the most demanding edge orchestration challenges:</p>
<ul>
<li>
<p><strong>Hardware-in-the-loop testing at scale</strong>, where Symphony coordinates distributed test processes end to end using its workflow capabilities.</p>
</li>
<li>
<p><strong>Configuration management across product lines</strong>, where Symphony centrally manages millions of configuration variations through modularization, inheritance, and dynamic expression evaluation.</p>
</li>
<li>
<p><strong>Fleet management</strong>, where Symphony manages vehicles and other distributed assets with workflows, scheduled and on-demand updates, and multi-homing support.</p>
</li>
<li>
<p><strong>Edge AI infrastructure management</strong>, where Symphony simplifies model rollout, coordinates related software updates, and connects edge AI infrastructure with cloud data pipelines.</p>
</li>
</ul>
<h1 id="getting-started">Getting Started</h1>
<p>The easiest way to get started with Symphony is by using Symphony’s CLI tool, called maestro. Use the appropriate command for your platform and then simply use <code>maestro up</code> to launch your Symphony instance:</p>
<ul class="nav nav-tabs" id="tabs-1" role="tablist">
<li class="nav-item">
<button class="nav-link active"
id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
data-td-tp-persist="bash" aria-controls="tabs-01-00" aria-selected="true">
Bash (Linux/WSL/Mac)
</button>
</li><li class="nav-item">
<button class="nav-link"
id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
data-td-tp-persist="powershell" aria-controls="tabs-01-01" aria-selected="false">
PowerShell (Windows)
</button>
</li>
</ul>
<div class="tab-content" id="tabs-1-content">
<div class="tab-pane fade show active"
id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget -q https://raw.githubusercontent.com/eclipse-symphony/symphony/master/cli/install/install.sh -O - | /bin/bash
</span></span><span style="display:flex;"><span>maestro up --no-k8s</span></span></code></pre></div>
</div>
<div class="tab-pane fade"
id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>powershell -Command <span style="color:#e6db74">"iwr -useb https://raw.githubusercontent.com/eclipse-symphony/symphony/master/cli/install/install.ps1 | iex"</span>
</span></span><span style="display:flex;"><span>maestro up --no-k8s</span></span></code></pre></div>
</div>
</div>
<h1 id="whats-next">What’s Next</h1>
<ul>
<li><a href="/docs/tutorials/">Getting Started Tutorials</a></li>
<li><a href="/docs/samples/">Sample Gallery</a></li>
<li><a href="/docs/ecosystem/">Embracing the Ecosystem</a></li>
</ul>
<div class="section-index">
</div>
<script>
const defaultTextValue = 'Filter...';
let searchBox = document.getElementById('search-input');
searchBox.value = defaultTextValue;
searchBox.onfocus = function () {
if (this.value == defaultTextValue) {
this.value = '';
}
}
searchBox.onblur = function () {
if (this.value == '') {
this.value = defaultTextValue;
}
}
function filterCards() {
var searchInput = document.getElementById('search-input').value;
var cards = document.querySelectorAll('.card');
for (var i = 0; i < cards.length; i++) {
var card = cards[i];
if (card.textContent.toLowerCase().indexOf(searchInput.toLowerCase()) > -1) {
card.style.display = "";
} else {
card.style.display = "none";
}
}
}
</script>
</div>
</main>
</div>
</div>
<footer class="td-footer row d-print-none">
<div class="container-fluid">
<div class="row mx-md-2">
<div class="td-footer__left col-6 col-sm-4 order-sm-1">
</div><div class="td-footer__right col-6 col-sm-4 order-sm-3">
</div><div class="td-footer__center col-12 col-sm-4 py-2 order-sm-2">
</div>
</div>
</div>
</footer>
</div>
<script src="/docs/js/main.min.1967c15222b40a055b0268a691735738876d8a57829afad6a9ace023618f55f3.js" integrity="sha256-GWfBUiK0CgVbAmimkXNXOIdtileCmvrWqazgI2GPVfM=" crossorigin="anonymous"></script>
<script defer src="/docs/js/click-to-copy.min.73478a7d4807698aed7e355eb23f9890ca18fea3158604c8471746d046702bad.js" integrity="sha256-c0eKfUgHaYrtfjVesj+YkMoY/qMVhgTIRxdG0EZwK60=" crossorigin="anonymous"></script>
<script src='/docs/js/tabpane-persist.js'></script>
<script src="/js/copy-code-button.js"></script>
<script src="/js/clarity.js"></script>
</body>
</html>