HD — Kubernetes Deployment Example¶
This directory contains a reference Kubernetes deployment for a HD instance and its supporting services.
Where this now lives: the chart under
helm/fermihdi/was promoted toinstall/helm/fermihdi, which is the copy that is kept current and the oneinstall/fermihdi-k8srenders values for fromcluster.yaml. This directory stays as a reference — where the two disagree, the one underinstall/is the one to trust.Note: These manifests are examples. They are derived from the sandbox Docker Compose configuration and must be adapted to your cluster's storage classes, ingress controllers, secret management strategy, and certificate infrastructure before use in any environment.
Directory Structure¶
k8s_example/
├── README.md # This file
├── deployment.yaml # Flat "all-in-one" K8s manifest (reference)
└── helm/
└── fermihdi/
├── Chart.yaml # Helm chart metadata
├── values.yaml # Default values (override per-environment)
└── templates/
├── _helpers.tpl # Shared template helpers
├── namespaces.yaml # Namespace definitions
├── secrets.yaml # Secret placeholders (populate externally)
├── dms/
│ ├── dms-ca-deployment.yaml
│ ├── dms-core-deployment.yaml
│ ├── dms-opa-engine-deployment.yaml
│ ├── dms-webux-deployment.yaml
│ ├── otel-collector-deployment.yaml
│ └── services.yaml
├── sc/
│ ├── scc-deployment.yaml
│ ├── sn-statefulset.yaml
│ └── services.yaml
├── edge/
│ ├── ingester-deployment.yaml
│ ├── proxy-deployment.yaml
│ └── services.yaml
└── extra/
├── hd-mcp-deployment.yaml
├── hd-graphql-deployment.yaml
├── hd-data-explore-deployment.yaml
└── services.yaml
Service Groups¶
| Group | Services |
|---|---|
| DMS | DMS-Core, DMS-CA, DMS-WebUX, DMS-OPA-Engine, OTEL Collector |
| SC (Storage Cluster) | SCC (Storage Cluster Controller), SNs (Storage Nodes — StatefulSet) |
| Edge | Ingester (hd_message_bus_ingester), HD Proxy |
| Extra | hd_mcp, hd_graphql, hd_data_explore |
Key Design Decisions¶
Namespaces¶
Three namespaces are used to reflect network plane separation:
- fermihdi-dms — DMS services
- fermihdi-sc — Storage Cluster (SCC + SNs)
- fermihdi-edge — Ingester and Proxy
- fermihdi-extra — Extra consumer-facing services
Network Planes¶
In the Docker Compose sandbox, three logical planes are used via separate Docker networks:
- Control Plane (port 6986) — mTLS REST communication between nodes and DMS-Core
- Data Plane (port 6987) — FHDWP binary protocol for record transport
- Observability Plane (port 8080) — Prometheus scraping, healthchecks
In Kubernetes, these planes are enforced via NetworkPolicy resources rather than separate Docker networks. Each service is labelled with fermihdi.dev/plane and NetworkPolicies restrict cross-plane traffic accordingly.
Secrets¶
All secrets (TLS certificates, bootstrap tokens, encryption keys) are represented as placeholder Kubernetes Secrets. You must populate these via your secrets management solution (Vault, External Secrets Operator, Sealed Secrets, etc.) before deployment.
Storage Nodes (SNs)¶
SNs are deployed as a StatefulSet to ensure stable Pod identities and ordered startup. Each SN Pod requests a PersistentVolumeClaim via volumeClaimTemplates. The number of replicas is controlled by values.yaml.
Hugepages¶
Both the SCC and SNs require hugepages (/dev/hugepages). In Kubernetes this is expressed as a resource request/limit of hugepages-2Mi or hugepages-1Gi. Your nodes must be pre-configured with hugepages.
DMS-CA Isolation¶
The DMS-CA is placed on its own isolated network segment. In this K8s layout it runs in fermihdi-dms but has a dedicated NetworkPolicy restricting access to DMS-Core only.
Quick Start (Helm)¶
# 1. Create namespaces
kubectl apply -f helm/fermihdi/templates/namespaces.yaml
# 2. Populate secrets (edit helm/fermihdi/templates/secrets.yaml with real values,
# or use External Secrets / Vault)
# 3. Install the chart
helm install fermihdi ./helm/fermihdi \
--namespace fermihdi-dms \
--values ./helm/fermihdi/values.yaml
# 4. For a specific environment override:
helm install fermihdi ./helm/fermihdi \
--values ./helm/fermihdi/values.yaml \
--values ./my-env-overrides.yaml
Network Port Reference¶
| Port | Protocol | Plane |
|---|---|---|
6985 |
TLS/mTLS | DMS Internal |
6986 |
TLS/mTLS | Control Plane |
6987 |
TCP | Data Plane (FHDWP) |
6988 |
UDP | NORM Multicast (Auxiliary) |
6989 |
TLS/mTLS | DMS-CA Plane |
8080 |
HTTP | Observability |