[{"data":1,"prerenderedAt":786},["ShallowReactive",2],{"\u002Fblog\u002Fimplement-on-open-standards":3,"\u002Fblog\u002Fimplement-on-open-standards-surround":781},{"id":4,"title":5,"authors":6,"badge":12,"body":14,"date":766,"description":767,"extension":768,"image":769,"meta":771,"navigation":201,"path":772,"seo":773,"stem":774,"tags":775,"__hash__":780},"posts\u002F3.blog\u002F2.implement-on-open-standards.md","Alpha: Leveraging Open Standards for Edge Deployments",[7],{"name":8,"to":9,"avatar":10},"Mathieu Sabatier","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmathieu-s-b32630a4\u002F",{"src":11},"\u002Fblog\u002Fms.jpeg",{"label":13},"Platform Engineering",{"type":15,"value":16,"toc":760},"minimark",[17,27,30,33,36,39,44,47,57,60,519,523,526,648,651,654,657,660,664,667,677,736,739,743,746,749,756],[18,19,20,21,26],"p",{},"In our previous article, ",[22,23,25],"a",{"href":24},"\u002Fblog\u002Fbuilding-for-edge","Building for Real Edge Deployments",", we outlined how a sound architecture for edge deployments must be built on three pillars: a unified system definition, reconciliation everywhere, and a unified telemetry.",[18,28,29],{},"While the principles are simple, building a secure, scalable, extensible platform that integrates into existing ecosystems is challenging. In practice, teams usually face two options.",[18,31,32],{},"One option is to buy a vendor-provided solution that relies on a proprietary Domain Specific Language (DSL) and opaque agents. Even though this can simplify initial deployments, it creates long-term liabilities because of vendor lock-in and talent friction. Indeed, one may be constrained by the vendors' choice such as feature depreciations or pricing updates.",[18,34,35],{},"The alternative is to build the platform in-house. It requires orchestrating more than ten distinct CNCF components. First, this complexity collides with the \"skill gap\". Edge workloads, being more specialized, exacerbate this challenge. Second, building and maintaining a secure, edge-capable control plane requires months of sustained investment from a team of seasoned engineers. Moreover, an incomplete solution can increase deployment time and introduce security gaps, resulting in increased engineering costs, a degraded developer experience, and customer dissatisfaction from delays and failed rollouts.",[18,37,38],{},"Alpha follows a third approach by offering a vendor-neutral solution built upon proven standards and designed for operational ease. First, blueprints are introduced and play an important part in avoiding vendor lock-in. Secondly, the rollout reliability is addressed by agents, continuously running target state reconciliation. Finally, in case of exit, the workload definition can safely be extracted.",[40,41,43],"h2",{"id":42},"unified-definition-one-file-instead-of-many","Unified definition: one file instead of many",[18,45,46],{},"The biggest friction in edge computing is fragmentation. For instance, in the case of a quality control system in an industrial context, to deploy the solution in a single factory, engineering and operations teams must manage multiple, disconnected files: a set of Kubernetes manifests for the containerized workloads, Systemd units for the various firmware components and drivers, Terraform scripts for the cloud infrastructure, and custom glue scripts.",[18,48,49,50,56],{},"To unify the system definition and still provide a solid developer experience, we leverage ",[22,51,55],{"href":52,"rel":53},"https:\u002F\u002Fkro.run\u002F",[54],"nofollow","Kro",". This Kubernetes community project is gaining traction as a standard approach. Using Alpha, platform engineers define the entire solution as a single composite resource: the Blueprint. The system definition is established for all teams - engineering, operations, and security - and reused consistently across deployments. Blueprints rely on standard Kubernetes manifests rather than a proprietary DSL, allowing existing workloads and team practices to remain unchanged. For platform teams, managing an edge site becomes comparable to managing a cloud microservice: a single definition is authored, then the controller handles expansion and distribution to the appropriate resources.",[18,58,59],{},"Continuing with the previous example of the quality inspection system, below is an example Blueprint definition that unifies a deployment, a Systemd Service (the driver), and a cloud resource (Pub\u002FSub) into one schema.",[61,62,67],"pre",{"className":63,"code":64,"language":65,"meta":66,"style":66},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apiVersion: start-alpha.io\u002Fv1alpha1\nkind: Blueprint\nmetadata:\n  name: quality-inspection\nspec:\n  schema:\n    apiVersion: v1alpha1\n    kind: QualityInspection\n    spec:\n      name: string\n      image: string\n      replicas: integer | default=3\n\n  resources:\n    - id: deployment\n      template:\n        apiVersion: apps\u002Fv1\n        kind: Deployment\n        metadata:\n          name: ${schema.spec.name}\n        spec:\n          replicas: ${schema.spec.replicas}\n          template:\n            spec:\n              containers:\n                - name: inference\n                  image: ${schema.spec.image}\n\n    - id: cloud\n      template:\n        apiVersion: pubsub.cnrm.cloud.google.com\u002Fv1beta1\n        kind: PubSubTopic\n        metadata:\n          name: ${schema.spec.name}-topic\n\n    - id: driver\n      template:\n        apiVersion: compute.start-alpha.io\u002Fv1alpha1\n        kind: SystemdService\n        metadata:\n          name: ${schema.spec.name}-driver\n        spec:\n          unit: |\n            [Unit]\n            Description=Camera Driver\n            After=network.target\n            [Service]\n            ExecStart=\u002Fusr\u002Fbin\u002Fdriver --daemon\n            Restart=always\n","yaml","",[68,69,70,87,98,107,118,126,134,145,156,164,175,185,196,203,211,225,233,244,255,263,274,282,293,301,309,317,331,342,347,359,366,376,386,393,403,408,420,427,437,447,454,464,471,483,489,495,501,507,513],"code",{"__ignoreMap":66},[71,72,75,79,83],"span",{"class":73,"line":74},"line",1,[71,76,78],{"class":77},"swJcz","apiVersion",[71,80,82],{"class":81},"sMK4o",":",[71,84,86],{"class":85},"sfazB"," start-alpha.io\u002Fv1alpha1\n",[71,88,90,93,95],{"class":73,"line":89},2,[71,91,92],{"class":77},"kind",[71,94,82],{"class":81},[71,96,97],{"class":85}," Blueprint\n",[71,99,101,104],{"class":73,"line":100},3,[71,102,103],{"class":77},"metadata",[71,105,106],{"class":81},":\n",[71,108,110,113,115],{"class":73,"line":109},4,[71,111,112],{"class":77},"  name",[71,114,82],{"class":81},[71,116,117],{"class":85}," quality-inspection\n",[71,119,121,124],{"class":73,"line":120},5,[71,122,123],{"class":77},"spec",[71,125,106],{"class":81},[71,127,129,132],{"class":73,"line":128},6,[71,130,131],{"class":77},"  schema",[71,133,106],{"class":81},[71,135,137,140,142],{"class":73,"line":136},7,[71,138,139],{"class":77},"    apiVersion",[71,141,82],{"class":81},[71,143,144],{"class":85}," v1alpha1\n",[71,146,148,151,153],{"class":73,"line":147},8,[71,149,150],{"class":77},"    kind",[71,152,82],{"class":81},[71,154,155],{"class":85}," QualityInspection\n",[71,157,159,162],{"class":73,"line":158},9,[71,160,161],{"class":77},"    spec",[71,163,106],{"class":81},[71,165,167,170,172],{"class":73,"line":166},10,[71,168,169],{"class":77},"      name",[71,171,82],{"class":81},[71,173,174],{"class":85}," string\n",[71,176,178,181,183],{"class":73,"line":177},11,[71,179,180],{"class":77},"      image",[71,182,82],{"class":81},[71,184,174],{"class":85},[71,186,188,191,193],{"class":73,"line":187},12,[71,189,190],{"class":77},"      replicas",[71,192,82],{"class":81},[71,194,195],{"class":85}," integer | default=3\n",[71,197,199],{"class":73,"line":198},13,[71,200,202],{"emptyLinePlaceholder":201},true,"\n",[71,204,206,209],{"class":73,"line":205},14,[71,207,208],{"class":77},"  resources",[71,210,106],{"class":81},[71,212,214,217,220,222],{"class":73,"line":213},15,[71,215,216],{"class":81},"    -",[71,218,219],{"class":77}," id",[71,221,82],{"class":81},[71,223,224],{"class":85}," deployment\n",[71,226,228,231],{"class":73,"line":227},16,[71,229,230],{"class":77},"      template",[71,232,106],{"class":81},[71,234,236,239,241],{"class":73,"line":235},17,[71,237,238],{"class":77},"        apiVersion",[71,240,82],{"class":81},[71,242,243],{"class":85}," apps\u002Fv1\n",[71,245,247,250,252],{"class":73,"line":246},18,[71,248,249],{"class":77},"        kind",[71,251,82],{"class":81},[71,253,254],{"class":85}," Deployment\n",[71,256,258,261],{"class":73,"line":257},19,[71,259,260],{"class":77},"        metadata",[71,262,106],{"class":81},[71,264,266,269,271],{"class":73,"line":265},20,[71,267,268],{"class":77},"          name",[71,270,82],{"class":81},[71,272,273],{"class":85}," ${schema.spec.name}\n",[71,275,277,280],{"class":73,"line":276},21,[71,278,279],{"class":77},"        spec",[71,281,106],{"class":81},[71,283,285,288,290],{"class":73,"line":284},22,[71,286,287],{"class":77},"          replicas",[71,289,82],{"class":81},[71,291,292],{"class":85}," ${schema.spec.replicas}\n",[71,294,296,299],{"class":73,"line":295},23,[71,297,298],{"class":77},"          template",[71,300,106],{"class":81},[71,302,304,307],{"class":73,"line":303},24,[71,305,306],{"class":77},"            spec",[71,308,106],{"class":81},[71,310,312,315],{"class":73,"line":311},25,[71,313,314],{"class":77},"              containers",[71,316,106],{"class":81},[71,318,320,323,326,328],{"class":73,"line":319},26,[71,321,322],{"class":81},"                -",[71,324,325],{"class":77}," name",[71,327,82],{"class":81},[71,329,330],{"class":85}," inference\n",[71,332,334,337,339],{"class":73,"line":333},27,[71,335,336],{"class":77},"                  image",[71,338,82],{"class":81},[71,340,341],{"class":85}," ${schema.spec.image}\n",[71,343,345],{"class":73,"line":344},28,[71,346,202],{"emptyLinePlaceholder":201},[71,348,350,352,354,356],{"class":73,"line":349},29,[71,351,216],{"class":81},[71,353,219],{"class":77},[71,355,82],{"class":81},[71,357,358],{"class":85}," cloud\n",[71,360,362,364],{"class":73,"line":361},30,[71,363,230],{"class":77},[71,365,106],{"class":81},[71,367,369,371,373],{"class":73,"line":368},31,[71,370,238],{"class":77},[71,372,82],{"class":81},[71,374,375],{"class":85}," pubsub.cnrm.cloud.google.com\u002Fv1beta1\n",[71,377,379,381,383],{"class":73,"line":378},32,[71,380,249],{"class":77},[71,382,82],{"class":81},[71,384,385],{"class":85}," PubSubTopic\n",[71,387,389,391],{"class":73,"line":388},33,[71,390,260],{"class":77},[71,392,106],{"class":81},[71,394,396,398,400],{"class":73,"line":395},34,[71,397,268],{"class":77},[71,399,82],{"class":81},[71,401,402],{"class":85}," ${schema.spec.name}-topic\n",[71,404,406],{"class":73,"line":405},35,[71,407,202],{"emptyLinePlaceholder":201},[71,409,411,413,415,417],{"class":73,"line":410},36,[71,412,216],{"class":81},[71,414,219],{"class":77},[71,416,82],{"class":81},[71,418,419],{"class":85}," driver\n",[71,421,423,425],{"class":73,"line":422},37,[71,424,230],{"class":77},[71,426,106],{"class":81},[71,428,430,432,434],{"class":73,"line":429},38,[71,431,238],{"class":77},[71,433,82],{"class":81},[71,435,436],{"class":85}," compute.start-alpha.io\u002Fv1alpha1\n",[71,438,440,442,444],{"class":73,"line":439},39,[71,441,249],{"class":77},[71,443,82],{"class":81},[71,445,446],{"class":85}," SystemdService\n",[71,448,450,452],{"class":73,"line":449},40,[71,451,260],{"class":77},[71,453,106],{"class":81},[71,455,457,459,461],{"class":73,"line":456},41,[71,458,268],{"class":77},[71,460,82],{"class":81},[71,462,463],{"class":85}," ${schema.spec.name}-driver\n",[71,465,467,469],{"class":73,"line":466},42,[71,468,279],{"class":77},[71,470,106],{"class":81},[71,472,474,477,479],{"class":73,"line":473},43,[71,475,476],{"class":77},"          unit",[71,478,82],{"class":81},[71,480,482],{"class":481},"s7zQu"," |\n",[71,484,486],{"class":73,"line":485},44,[71,487,488],{"class":85},"            [Unit]\n",[71,490,492],{"class":73,"line":491},45,[71,493,494],{"class":85},"            Description=Camera Driver\n",[71,496,498],{"class":73,"line":497},46,[71,499,500],{"class":85},"            After=network.target\n",[71,502,504],{"class":73,"line":503},47,[71,505,506],{"class":85},"            [Service]\n",[71,508,510],{"class":73,"line":509},48,[71,511,512],{"class":85},"            ExecStart=\u002Fusr\u002Fbin\u002Fdriver --daemon\n",[71,514,516],{"class":73,"line":515},49,[71,517,518],{"class":85},"            Restart=always\n",[40,520,522],{"id":521},"reconciliation-everywhere","Reconciliation everywhere",[18,524,525],{},"Blueprints capture workload definitions, but also where those workloads are intended to run. For the same example of the solution quality control system, provisioning it for the Western European plants requires just a few lines:",[61,527,529],{"className":63,"code":528,"language":65,"meta":66,"style":66},"apiVersion: v1alpha1\nkind: QualityInspection\nspec:\n  name: west-europe\n  image: my-organization\u002Fquality-system\u002Fvariant-A:1.0.0\n  replicas: 2\n  placement:\n    fieldSelector:\n      matchExpressions:\n      - key: zone\n        operator: In\n        values: [\"west-europe\"]\n",[68,530,531,539,547,553,562,572,583,590,597,604,617,627],{"__ignoreMap":66},[71,532,533,535,537],{"class":73,"line":74},[71,534,78],{"class":77},[71,536,82],{"class":81},[71,538,144],{"class":85},[71,540,541,543,545],{"class":73,"line":89},[71,542,92],{"class":77},[71,544,82],{"class":81},[71,546,155],{"class":85},[71,548,549,551],{"class":73,"line":100},[71,550,123],{"class":77},[71,552,106],{"class":81},[71,554,555,557,559],{"class":73,"line":109},[71,556,112],{"class":77},[71,558,82],{"class":81},[71,560,561],{"class":85}," west-europe\n",[71,563,564,567,569],{"class":73,"line":120},[71,565,566],{"class":77},"  image",[71,568,82],{"class":81},[71,570,571],{"class":85}," my-organization\u002Fquality-system\u002Fvariant-A:1.0.0\n",[71,573,574,577,579],{"class":73,"line":128},[71,575,576],{"class":77},"  replicas",[71,578,82],{"class":81},[71,580,582],{"class":581},"sbssI"," 2\n",[71,584,585,588],{"class":73,"line":136},[71,586,587],{"class":77},"  placement",[71,589,106],{"class":81},[71,591,592,595],{"class":73,"line":147},[71,593,594],{"class":77},"    fieldSelector",[71,596,106],{"class":81},[71,598,599,602],{"class":73,"line":158},[71,600,601],{"class":77},"      matchExpressions",[71,603,106],{"class":81},[71,605,606,609,612,614],{"class":73,"line":166},[71,607,608],{"class":81},"      -",[71,610,611],{"class":77}," key",[71,613,82],{"class":81},[71,615,616],{"class":85}," zone\n",[71,618,619,622,624],{"class":73,"line":177},[71,620,621],{"class":77},"        operator",[71,623,82],{"class":81},[71,625,626],{"class":85}," In\n",[71,628,629,632,634,637,640,643,645],{"class":73,"line":187},[71,630,631],{"class":77},"        values",[71,633,82],{"class":81},[71,635,636],{"class":81}," [",[71,638,639],{"class":81},"\"",[71,641,642],{"class":85},"west-europe",[71,644,639],{"class":81},[71,646,647],{"class":81},"]\n",[18,649,650],{},"Instead of a proprietary targeting engine, Kubernetes selectors are used. The placement section is then a standard, readable field within the Blueprint.",[18,652,653],{},"Once provisioned, the Alpha control plane handles the projection of the blueprint and prepares the required elements for the rollout. This is where this model diverges from traditional CI\u002FCD \"push\" models. Responsibility instead lies with the agents, which regularly poll for new target state definitions and ensure that the solution is deployed and remains healthy.",[18,655,656],{},"Because agents record the latest known target state, resilience is ensured by design. This shift from centralized orchestration to distributed reconciliation enables the implementation of a self-stabilizing system. These are the same principles that power Kubernetes itself.",[18,658,659],{},"Agents are autonomous components, continuously reconciling, even if entirely offline and disconnected. Assessing rollout success, however, remains challenging. The workload fragmentation increases the challenge to clearly identify healthy solutions. To address the challenge of assessing rollout success, Alpha relies on the OpenTelemetry standard. Since all workloads are able to emit OTel signals, the agent can aggregate and process these signals locally to compute a unified view of system health. Combined with the agent's ability to act autonomously, this approach significantly reduces mean time to repair (MTTR) at the edge.",[40,661,663],{"id":662},"the-exit-strategy-ensuring-portability-and-reversibility","The exit strategy: ensuring portability and reversibility",[18,665,666],{},"For CTOs adopting a new platform, the exit scenario is an important question. What happens if we leave Alpha? Do we lose our infrastructure? With proprietary platforms, keeping the developed logic when leaving is not insured. Because Alpha is built on open standards, it provides a standardized eject strategy. Since the Blueprint is just a composite definition of standard resources, it can always be \"unzipped\".",[18,668,669,670,673,674,676],{},"In practice, an ",[68,671,672],{},"eject"," command is available in the CLI. For instance, in the case of the previous deployment, the ",[68,675,672],{}," command generates a file for each component and each active deployment:",[61,678,682],{"className":679,"code":680,"language":681,"meta":66,"style":66},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","$ alphactl blueprint eject --blueprint quality-system.yaml --output-dir .\u002Fexit-plan\n\n# Output Created:\n# .\u002Fexit-plan\u002Fwest-europe\u002Fdeployment.yaml      (Kubernetes Manifest)\n# .\u002Fexit-plan\u002Fwest-europe\u002Fotel-config.yaml     (OpenTelemetry Collector Config)\n# .\u002Fexit-plan\u002Fwest-europe\u002Fcamera-driver.unit   (Systemd Unit)\n","bash",[68,683,684,711,715,721,726,731],{"__ignoreMap":66},[71,685,686,690,693,696,699,702,705,708],{"class":73,"line":74},[71,687,689],{"class":688},"sBMFI","$",[71,691,692],{"class":85}," alphactl",[71,694,695],{"class":85}," blueprint",[71,697,698],{"class":85}," eject",[71,700,701],{"class":85}," --blueprint",[71,703,704],{"class":85}," quality-system.yaml",[71,706,707],{"class":85}," --output-dir",[71,709,710],{"class":85}," .\u002Fexit-plan\n",[71,712,713],{"class":73,"line":89},[71,714,202],{"emptyLinePlaceholder":201},[71,716,717],{"class":73,"line":100},[71,718,720],{"class":719},"sHwdD","# Output Created:\n",[71,722,723],{"class":73,"line":109},[71,724,725],{"class":719},"# .\u002Fexit-plan\u002Fwest-europe\u002Fdeployment.yaml      (Kubernetes Manifest)\n",[71,727,728],{"class":73,"line":120},[71,729,730],{"class":719},"# .\u002Fexit-plan\u002Fwest-europe\u002Fotel-config.yaml     (OpenTelemetry Collector Config)\n",[71,732,733],{"class":73,"line":128},[71,734,735],{"class":719},"# .\u002Fexit-plan\u002Fwest-europe\u002Fcamera-driver.unit   (Systemd Unit)\n",[18,737,738],{},"The single Blueprint file thus becomes multiple standard files. The convenience of the Alpha controller is lost, but infrastructure definitions are kept. You are then able to distribute them to your Kubernetes clusters and VMs, orchestrate rollout, detect unhealthy situations and act upon them.",[40,740,742],{"id":741},"conclusion-reliability-with-extensibility","Conclusion: reliability with extensibility",[18,744,745],{},"In conclusion, Alpha is built upon Kubernetes, Kro, and OpenTelemetry, providing unified system definition with continuous reconciliation and consistent observability, while remaining a portable and extensible platform. This complete set of benefits makes Alpha uniquely valuable compared with traditional \"build\" and \"buy\" approaches.",[18,747,748],{},"Beyond its technical foundations, Alpha is designed to integrate into the full solution lifecycle. It streamlines workflows across design, deployment, and operations, reducing overall engineering time and effort.",[18,750,751,752],{},"If you are operating edge environments, we would love to help you build a reliable and secured platform for edge operations tailored to your needs and challenges, ",[22,753,755],{"href":754},"\u002Fcontact","so reach out to us!",[757,758,759],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":66,"searchDepth":89,"depth":89,"links":761},[762,763,764,765],{"id":42,"depth":89,"text":43},{"id":521,"depth":89,"text":522},{"id":662,"depth":89,"text":663},{"id":741,"depth":89,"text":742},"2025-12-28","How we use Kubernetes, Kro and OpenTelemetry to build an extensible platform engineering solution that fits into your existing ecosystem.","md",{"src":770},"\u002Fblog\u002F2-composable.png",{},"\u002Fblog\u002Fimplement-on-open-standards",{"title":5,"description":767},"3.blog\u002F2.implement-on-open-standards",[776,777,778,779],"kubernetes","opentelemetry","edge-computing","kro","37fpS8zRuWafuedNNt2q__J3tYxNTFPoLCTB4rUNwgM",[782,785],{"title":25,"path":24,"stem":783,"description":784,"children":-1},"3.blog\u002F1.building-for-edge","Why the future of edge isn't just Kubernetes - it's a hybrid of containers, binaries, and air-gapped realities.",null,1774389719931]