DST HOMEWORK·DevOps Engineer (DST), Logos / IFT Technical Services
ⓘ Independent job-application page. Not affiliated with, endorsed by, or operated by Logos or the Institute of Free Technology. Public information as of 29 October 2026.

Homework for my application to Logos DevOps Engineer (DST).

What the DST lab runs today, where large P2P experiments stop being reproducible, and a working rig that sizes a run, writes the manifests and reads the results.

10,847
nodes in the first 10K run, April 2024
< 8 min
to deploy 5,000 nodes, December 2025
1,000
maxPods per node in the lab config
0
native bandwidth scheduling in Kubernetes
00

Summary

The lab

A K3s research cluster on a handful of large hosts, configured with Ansible and Rancher Fleet, networked with Kube-OVN and Cilium, observed with VictoriaMetrics, VictoriaLogs and Grafana.

The hard part

At thousands of peers per host the bottleneck moves to the network layer: CNI limits, neighbour tables and bandwidth that Kubernetes does not schedule. That is where results stop being reproducible.

The work sample

A rig that plans a run (packing, gossip bandwidth, observability budget), writes hardened manifests, fingerprints the plan and analyses delivery and latency per peer.

TakeawayWhy it matters for DST
Plan before deployingA 1,000-peer plan at default sizes already needs about 21 machines and 0.6M series. Catching an impossible plan on paper saves a lab day.
Bandwidth is the hidden variableTwo gossip-heavy peers on one host change latency results. The lab already builds a bandwidth scheduler plugin; every run should record the placement it got.
Every run carries its planA fingerprint of the inputs, image tag and lab revision makes a result comparable to the next release.
Observability scales with peersSeries grow with peer count times metrics per peer. Dropping unused metrics is cheaper than more storage.
Reports in the openThe weekly roadmap PRs are public; regression baselines per release could be too.
01

The DST lab today

From the public repos and weekly reports. Each row is checkable at the link.

LayerWhat the lab usesSource
ClusterK3s with containerd; static CPU manager core pinning; max-pods 1000; sysctls sized for 40 Gbit/s networkingiftech/vaclab-2
ProvisioningAnsible playbooks and Rancher Fleet GitOps bundles; secrets in ansible-vaultvaclab-2
Network and storageKube-OVN with Cilium chained, Hubble, OpenvSwitch offloading, Longhornvaclab-2
Policy and accessKyverno with Policy Reporter; Authentik SSO in front of the labvaclab-2
ObservabilityVictoriaMetrics, VictoriaLogs, Grafana, Grafana Tempo, OpenTelemetry collectorvaclab-local
SchedulingBandwidth CRD and operator plus scheduler pluginsvaclab-k8s-plugins
ExperimentsPython toolkit that generates and deploys manifests, scrapes metrics and runs post-run analysis; a workflow_dispatch to run a configiftech/10ksim
Test nodesnim, go and rust GossipSub nodes for Kubernetes and Shadowdst-libp2p-test-node
Scale history
WhenMilestone
Nov 202335K-node Shadow simulation at low traffic
Mar 2024About 1,400 Waku nodes per physical host; a CNI issue at 1,200 nodes on an 8-worker cluster
Apr 2024Move to OpenvSwitch with offloading; first 10K run at 10,847 nodes
Dec 20255,000 nodes deployed in under 8 minutes, stable mesh in about 25
Oct 2026Messaging API baselines at 100 and 1,000 nodes

From the weekly reports in iftech/roadmap.

02

Peer map

Other P2P and client testing infrastructure, and how DST differs.

Tool or teamWhat it doesDST in comparison
TestgroundP2P test plans on Docker and Kubernetes with network shaping; last activity 2024Dormant; DST covers the same ground on its own lab
libp2p unified-testingInterop, perf and hole-punch tests across implementationsSmall-n correctness; DST runs 1K to 10K scale
Kurtosis, ethpandaopsPackaged private Ethereum devnets and Helm chartsReproducible devnets as code; DST moved from Kurtosis to raw Kubernetes for scale
HiveEthereum end-to-end conformanceConformance; DST does scaling and regression
ShadowDiscrete-event simulator running real binariesUsed by DST for determinism and very large N; Kubernetes for realism
Chaos Mesh, AttacknetFault injection on Kubernetes and devnetsA natural add next to the churn and partition analyzers
Client teams (Lighthouse, Lodestar)In-repo network simulatorsSelf-testing per client; DST is a shared service across projects
03

Where scale bites

The constraints the lab has already met, and what each needs from the platform.

ConstraintWhat happensPlatform answer
Bandwidth is not a scheduled resourceGossip-heavy peers pile onto one host; latency reflects the NIC more than the protocolBandwidth requests honoured at placement (the lab's plugin), and the plan checks NIC share before a run
Pods per nodeThe kubelet default of 110 wastes large hosts; 1,000 needs a matching pod CIDR and neighbour-table tuningLab-wide defaults in Ansible, checked by a preflight
CNI at densityA CNI issue appeared at 1,200 nodes; OpenvSwitch offloading moved the limitPer-release regression runs on the network layer itself
Noisy neighboursCPU contention shows up as protocol latencyPack to a target utilisation and pin cores for measured pods
Series growthSeries scale with peers times metrics per peerPer-experiment metric allow-lists and retention
Concurrent experimentsThe queueing and concurrency tasks were suspended in 2025Namespaces per run, quotas and a simple queue
★

Small public fixes

Things I noticed in the public repos. Each is a small pull request.

ItemDetail
Roadmap site addressThe roadmap README points to roadmap.vac.co; the site is served at roadmap.vac.dev
10ksim folder pathsThe README describes analysis/ and deployment/; the code now lives under src/ and deployment-utilities/
Licence filesvaclab-2 and vaclab-k8s-plugins show an Apache 2.0 badge without a LICENSE file in the repository
Helm chart registryThe plugins README installs from ghcr.io/vacp2p after the move to the iftech organisation
Careers pageresearch.logos.co/join-us shows no openings while this role is open
04

Duties, my plan

JD dutyHow I would do itDetailed in
Design and optimise Kubernetes clusters for experimentsLab defaults (maxPods, CIDR, sysctls, CPU pinning) in Ansible with a preflight that fails a run before it starts§03
Improve scalability and utilisationPlan every run first: pods per host, NIC share, series budget; target utilisation instead of maximum packingdemo
Monitoring, logging, observabilityPer-experiment dashboards and metric allow-lists in VictoriaMetrics; retention by experiment class§05
Streamline experiment workflowsOne config in, one run record out: plan fingerprint, image tags, lab revision, results bundle§05
Automate infrastructure and deploymentGitOps for the lab (Fleet), experiment manifests generated from config and validated before applydemo
Troubleshoot and tune workloadsOutlier peers by robust statistics, then node, CNI and placement checks for that peerdemo
Reproduce and debug distributed issuesRerun the fingerprinted plan; diff placement and network metrics between runs§05
05

Experiment pipeline

StageWhat happens
PlanConfig to plan: pods per host, bandwidth per peer against the NIC, series and log budget. Impossible plans fail here
RenderManifests generated from the plan, checked against Pod Security and lab policy (Kyverno), image tags pinned
QueueA namespace and quota per run so experiments can share the lab
RunDeploy, wait for mesh formation, run the traffic profile, scrape at a fixed interval
RecordA run record: plan fingerprint, image digests, lab revision, placement map, metrics window
AnalyseDelivery ratio, latency percentiles, outlier peers; compared with the last baseline for the same plan
ReportA short weekly note and a baseline table per release
06

First 90 days

Days 1 to 30

Read vaclab-2, the plugins and 10ksim end to end. Bring up vaclab-local. Shadow a full run and write down every manual step.

Days 31 to 60

Add a plan and preflight step to the run workflow. Pin the run record format. Take one of the open Q4 tasks, such as Logos Blockchain testnet support in the lab.

Days 61 to 90

Namespaces and quotas for concurrent runs. Per-experiment metric allow-lists. Publish a baseline table for one protocol release.

07

Method & sources

Role: DevOps Engineer (DST), Logos / IFT Technical Services (public job posting, 2026).

Repositories: vaclab-2 · vaclab-k8s-plugins · vaclab-local · 10ksim · dst-libp2p-test-node · roadmap (roadmap.vac.dev/dst) · research posts at research.logos.co/rlog.

Peers: Testground, libp2p unified-testing, ethpandaops, Hive, Shadow, Chaos Mesh, Attacknet, client-team simulators (their public repositories).

Demo: logos-dst.pages.dev

Independent homework for the Logos DevOps Engineer (DST) role · 2026 · edwardtay.com