{{indexmenu_n>1}} ====== How ZEDEDA Cloud directs EVE-K (edge node cluster) ====== This section documents how objects created in ZEDEDA Cloud are translated into configuration on an EVE-K edge node cluster (3-node k3s). All flows have been traced live on device ''e418565d-9d93-47ee-b7ea-aba4c9c7e912''. ===== Key principle ===== **Kubernetes is never in the config path.** ZEDEDA Cloud sends a protobuf ''DeviceConfig'' message to the device over HTTPS. The EVE pillar agents (all running inside a single binary ''/opt/zededa/bin/zedbox'') receive this config and translate it into host-level state via a pubsub filesystem. k3s is only touched at the very end when a workload is ready to launch. ===== Overview diagram ===== {{ :zededa:edge-node-clustering:eve_pubsub_flow.svg?600 |}} ===== When does the device receive config? ===== Not all objects behave the same way: ^ Object ^ Pushed to device when ^ Confirmed ^ | Network Instance | Assigned to device -- immediate | Yes (live) | | App Instance | Assigned to device directly | Yes (live) | | Datastore | App referencing it is assigned | Yes (live) | | Image (ContentTree) | App referencing it is assigned | Yes (live) | | Volume | App referencing it is assigned | Yes (live) | ===== The four ZEDEDA objects ===== Click each sub-page for the full confirmed deep dive. * [[zededa:edge-node-clustering:how-zed-cloud-directs-enc:network-instance-info|Network Instance]] -- virtual network for app connectivity · Switch and Local types confirmed live * [[zededa:edge-node-clustering:how-zed-cloud-directs-enc:datastore-info|Datastore]] -- where images are pulled from · OCI registry, S3, HTTP, SFTP * [[zededa:edge-node-clustering:how-zed-cloud-directs-enc:image-info|Image]] -- VM disk or container image · ECI format · containerd CAS storage confirmed live * [[zededa:edge-node-clustering:how-zed-cloud-directs-enc:app-instance-info|App Instance]] -- VM or container workload · pending live validation ===== Pubsub filesystem quick reference ===== All live config and status is readable as plain JSON on the EVE host: # Watch all pubsub dirs in real time watch -n1 'echo "=NI="; ls /run/zedagent/NetworkInstanceConfig/; echo "=NIStatus="; ls /run/zedrouter/NetworkInstanceStatus/; echo "=DS="; ls /run/zedagent/DatastoreConfig/; echo "=CT="; ls /run/zedagent/ContentTreeConfig/; echo "=VOL="; ls /run/zedagent/VolumeConfig/; echo "=APP="; ls /run/zedagent/AppInstanceConfig/; echo "=DL="; ls /run/downloader/DownloaderStatus/; echo "=VS="; ls /run/volumemgr/VolumeStatus/; echo "=ANS="; ls /run/zedrouter/AppNetworkStatus/; echo "=DC="; ls /run/domainmgr/ 2>/dev/null | grep -v sock' # Watch k3s side watch -n2 'kubectl get vms,vmis,pvc,network-attachment-definitions -n eve-kube-app 2>/dev/null' # Watch EVE device log (clean output) tail -f /persist/newlog/collect/current.device.log | \ python3 -c " import sys, json for line in sys.stdin: try: o = json.loads(line.strip()) i = json.loads(o.get('content','{}')) print(f'[{i.get(\"time\",\"\")[:19]}] [{i.get(\"source\",\"?\")}] {i.get(\"level\",\"\").upper()}: {i.get(\"msg\",\"\")}') except: pass " | grep -iE 'domain|volume|kube|NAD|download|verify|zedmanager|zedkube|network|activate' ===== See also ===== * [[zededa:edge-node-clustering:eve-k-pubsub-internals|EVE pubsub internals]] * [[zededa:edge-node-clustering:eve-k-cluster-setup|EVE-K 3-node cluster setup]] * [[zededa:edge-node-clustering:eve-k-debugging|Debugging with edgeview and kubectl]]