Project: hyper2kvm - Hypervisor to KVM Migration Toolkit Component: Worker Job Protocol v1 Timeline: 2026-01-30 Status: Production-Ready with Full Automation
The Worker Job Protocol v1 is a production-grade job orchestration system for privileged VM disk migration operations on Kubernetes. This document summarizes the complete implementation from initial design through full CI/CD automation.
Date: 2026-01-30 Scope: Foundation layer
Deliverables:
Files Created: 8 Python modules (~2500 lines) Documentation: PROTOCOL_SPEC.md, QUICKSTART.md
Key Features:
Date: 2026-01-30 Scope: Kubernetes deployment and observability
Deliverables:
Files Created: 7 manifests + Makefile + scripts Documentation: production-enhancements.md, k8s/README.md
Key Features:
Date: 2026-01-30 Scope: Monitoring and Helm packaging
Deliverables:
Files Created: 10 files (dashboard, Helm chart) Documentation: v1.2.0-enhancements.md, helm/README.md
Key Features:
Date: 2026-01-30 Scope: Automation and tooling
Deliverables:
Files Created: 9 files (workflows, scripts, CRDs) Documentation: v1.3.0-cicd-ops.md, operator/README.md
Key Features:
┌─────────────────────────────────────────────────────────────┐
│ Control Plane (Safe) │
│ ┌────────────┐ ┌─────────────┐ ┌──────────────┐ │
│ │ Job Queue │ │ Scheduler │ │ MigrationJob │ │
│ │ │──│ │──│ CRD │ │
│ └────────────┘ └─────────────┘ └──────────────┘ │
└────────────────────────┬────────────────────────────────────┘
│
│ Worker Job Protocol v1
│
┌────────────────────────▼────────────────────────────────────┐
│ Data Plane (Privileged) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Worker Pods (DaemonSet) │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ Worker 1 │ │ Worker 2 │ │ Worker 3 │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ NBD, LVM │ │ NBD, LVM │ │ NBD, LVM │ │ │
│ │ │ Mount │ │ Mount │ │ Mount │ │ │
│ │ │ Chroot │ │ Chroot │ │ Chroot │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Persistent Storage (PVCs) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ State │ │ Events │ │ Input │ │ Output │ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Observability Stack │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Prometheus │──│ Grafana │ │ Events │ │
│ │ Metrics │ │ Dashboard │ │ (JSONL) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
CREATED
↓
├─→ Validate spec
↓
VALIDATED
↓
├─→ Queue job
↓
QUEUED
↓
├─→ Match capabilities, assign worker
↓
ASSIGNED
↓
├─→ Start execution
↓
RUNNING
↓
├─→ Stream progress events
↓
PROGRESSING
↓
├─→ Success ──→ COMPLETED
│
├─→ Failure ──→ FAILED
│
└─→ Cancel ──→ CANCELLED
| Component | Files | Lines | Language |
|---|---|---|---|
| Worker Protocol Core | 8 | ~2,500 | Python |
| Kubernetes Manifests | 15 | ~1,200 | YAML |
| Helm Chart | 8 | ~800 | YAML + Templates |
| Grafana Dashboard | 1 | ~600 | JSON |
| CI/CD Workflows | 2 | ~400 | YAML |
| Operational Scripts | 3 | ~500 | Bash |
| Documentation | 10 | ~3,000 | Markdown |
| Total | 47 | ~9,000 | - |
# Build worker image
docker build --target worker -t hyper2kvm:worker .
# Run worker
docker run --privileged \
-v /data/input:/data/input:ro \
-v /data/output:/data/output:rw \
-v /dev:/dev \
hyper2kvm:worker
# Deploy using Makefile
cd k8s
make deploy-all
# Submit job
make submit-job JOB_FILE=examples/convert-job.json
# Install Helm chart
helm install hyper2kvm-worker ./helm/hyper2kvm-worker \
--namespace hyper2kvm-workers \
--create-namespace \
--values custom-values.yaml
# Upgrade
helm upgrade hyper2kvm-worker ./helm/hyper2kvm-worker \
--values custom-values.yaml
# Create cluster and deploy
k3d cluster create test-cluster --agents 2
make -C k8s k3d-full-test
hyper2kvm.io/worker-enabled: "true"modprobe nbd max_part=16helm/hyper2kvm-worker/values.yaml# production-values.yaml
worker:
resources:
requests:
cpu: "4"
memory: "8Gi"
limits:
cpu: "16"
memory: "32Gi"
nodeSelector:
hyper2kvm.io/worker-enabled: "true"
tolerations:
- key: "privileged"
operator: "Exists"
effect: "NoSchedule"
storage:
state:
size: 50Gi
storageClass: "ceph-rbd"
events:
size: 20Gi
storageClass: "ceph-rbd"
input:
size: 5Ti
storageClass: "nfs-storage"
output:
size: 2Ti
storageClass: "ceph-rbd-fast"
temp:
size: 500Gi
storageClass: "local-nvme"
monitoring:
metrics:
enabled: true
serviceMonitor:
enabled: true
interval: 30s
labels:
prometheus: kube-prometheus
grafanaDashboard:
enabled: true
alerting:
enabled: true
slack:
webhook: https://hooks.slack.com/services/XXX
docs/worker/QUICKSTART.mdk8s/worker/examples/docs/worker/PROTOCOL_SPEC.md# Run tests
pytest tests/test_worker_protocol.py -v
# Build Docker image
docker build --target worker -t hyper2kvm:test .
# Test in k3d
k3d cluster create test
k3d image import hyper2kvm:test
helm install test ./helm/hyper2kvm-worker --set worker.image.tag=test
The Worker Job Protocol v1 is a production-ready, enterprise-grade job orchestration system for VM migration workloads on Kubernetes.
Achievements:
Status: PRODUCTION-READY ✅
Total Development: 4 version increments, 47 files, ~9,000 lines of code, 10 documentation files
The system is ready for production use with comprehensive monitoring, automation, and operational tooling.
Version: 1.3.0 Released: 2026-01-30 Next: v1.4.0 (Kubernetes Operator)