Skip to content

Latest commit

 

History

History
97 lines (72 loc) · 7.54 KB

File metadata and controls

97 lines (72 loc) · 7.54 KB

Project Roadmap

The primary goal of Hetzner Kubernetes Infrastructure Controller (HKIC) is an ACK-style experience for Hetzner Cloud: broad CRD + reconciler coverage so teams can declare cloud resources in Kubernetes and reconcile them with GitOps (Argo CD, Flux, and so on) like any other workload—simple single resources and composed stacks without a separate Hetzner-specific workflow for day-to-day changes.

Optional (not the product goal): samples and docs showing how those same CRDs can be composed into higher-level outcomes—Kubernetes-on-Hetzner (k3s), multi-tier apps, platform stacks—via userData, Day-2 manifests, optional scripts in contrib/k3s-optional/, Helm, or kro. Users build whatever they need from primitives; k3s is one recipe among many, not a north star.

Two layers:

  1. Hetzner Cloud API coverage (main track): add and harden CRDs/reconcilers for the resource types teams use (servers, networks, volumes, load balancers, firewalls, placement groups, …). Users adopt any subset. Progress: docs/hcloud-api-coverage.md.
  2. Composition recipes (optional track): examples that wire primitives together. Includes k3s/hetzner-k3s-oriented docs under docs/k3s-* and config/samples/complex/k3s-*.

Current focus — Platform docs & optional work

Milestones 1–2 are complete (CRD coverage + GitOps platform). Optional deferred work (HCloudSSHKey) remains low priority.

Task tracking: Linear — HCloud Operator project. GitHub Issues are closed; use Linear for active roadmap work.

Priority Work Linear
High (now) Multi-cluster / multi-token patterns (documentation) ARM-71
Deferred HCloudSSHKey CRD — reference-by-name on Server is enough for most teams ARM-72
Optional k3s parity checklist / E2E runbook ARM-73
Out of scope (repo) kro / Crossplane abstractions — users compose HKIC CRDs in their own tooling
Complete Milestone 2 — observability, base reconciler, leader election, real-Hetzner E2E ARM-30

Milestone 1 — Hetzner Cloud API coverage — Complete

All planned CRDs and hardening for this milestone are shipped; optional SSH key lifecycle is deferred in Linear (ARM-72).

Shipped (v1alpha1)

  • HCloudServer — create / delete / adopt-by-name, type changes, networkRef, optional upgradeDisk
  • HCloudVolume — lifecycle, attach via serverRef, resize
  • HCloudLoadBalancer — lifecycle, target sync, services + health checks, TLS via certificateRefs
  • HCloudNetwork — private networks, Cloud subnets
  • HCloudFirewall — rules, attach via serverRefs / label selector
  • HCloudPlacementGroup — spread/cluster groups; HCloudServer.spec.placementGroupRef (#2, #3)
  • HCloudPrimaryIP — IPv4/IPv6, datacenter, server assignment, DNS PTR (#4)
  • HCloudFloatingIP — IPv4/IPv6, location, server assignment, DNS PTR (#5)
  • HCloudCertificate — uploaded/managed TLS certs; HTTPS listeners via certificateRefs (#6)
  • API coverage matrixdocs/hcloud-api-coverage.md (#1)
  • Volume snapshotsN/A; Hetzner Cloud has no volume snapshot API (#7 closed)
  • Harden existing CRDs — LB listeners/health, upgradeDisk on server, volume resize (#9)

Deferred (optional, low priority)

  • HCloudSSHKey — optional; track in Linear ARM-72 if fully declarative key lifecycle is required

Phase 1: MVP — Complete

  • Project scaffolding
  • HCloudServer CRD and reconciler (create / delete / adopt-by-name)
  • Status sync (IPs, state, conditions)
  • Finalizer-based cleanup

Phase 2: Compute & storage — Complete

  • Server vertical scaling (spec.serverType changes via power off → change_type → power on; status.appliedServerType)
  • Optional upgradeDisk on type change (HCloudServer.spec.upgradeDisk)
  • HCloudVolume CRD and reconciler
  • Volume attach / detach via serverRef and drift correction
  • HCloudLoadBalancer CRD with serverSelector and target sync
  • Load balancer reconciler watches HCloudServer so label / status changes re-sync targets without waiting for periodic requeue
  • Watches on HCloudServer from HCloudVolume — re-attach as soon as status.serverID appears
  • Conflict-safe status updates — retry-on-conflict for controller status writes
  • Observability — Kubernetes Events, Prometheus metrics (internal/metrics + hcloud.Instrument() API wrapper), richer conditions (#11). Shared generic base reconciler (internal/reconcile) owns the loop skeleton, Synced condition, Events, and reconcile metrics; all nine controllers use the base. See docs/observability.md. Leader election defaults on.

Phase 3: Networking — Complete

  • HCloudNetwork CRD and reconciler
  • Attach Cloud Servers to HCloudNetwork (HCloudServer.spec.networkRef)
  • HCloudFirewall CRD and reconciler

Phase 4: GitOps & platform engineering — Complete (active docs in Linear)

  • Helm chartcharts/hcloud-operator/, make helm-lint
  • Argo CD examplesexamples/argo/
  • CI E2E against real Hetzner — .github/workflows/e2e-real.yaml, make test-e2e-real
  • Multi-cluster / multi-token patterns — ARM-71
  • Higher-level abstractions (kro, Crossplane) — not shipped in this repo; use config/samples/complex/* as raw-CRD baselines

Optional: k3s-on-Hetzner composition recipes

Not the operator goal — optional documentation and samples for teams that want to build k3s (or similar) from HKIC primitives. Optional verification: Linear ARM-73.

Hygiene & contributor experience

  • Envtest isolation: drain cluster CRs + reset shared FakeClient between Ginkgo specs (random order safe)
  • Keep .idea/project-idea.md and .idea/AGENT_*.md aligned with README / roadmap when major features land (north star: ACK-style Hetzner API coverage)

Task tracking (Linear)

Active roadmap and implementation tasks live in the HCloud Operator Linear project.

GitHub Issues and milestones are closed (historical reference only). External contributors may still open GitHub Issues for bugs/PRs; maintainers triage into Linear.