CRDs + RBAC
Versioned desired-state API and least-privilege controller identities.
Kubernetes deployment · Release 1.0
c8 documentation
Traditional chart documentation
A chart-reference path for installing c8 CRDs, operators, control plane and role-isolated data plane. It follows the checked-in values schemas and uses the same overview → prerequisites → parameters → install → lifecycle structure familiar from Artifact Hub.
3
ordered charts
1.33+
declared Kubernetes version
generic + rke2
accepted distribution values
01 · overview
c8 is split into an install-time Helm layer and a runtime operator layer. The charts create the API, custom resource, controllers, worker roles, security policy and scaling objects. PostgreSQL, S3-compatible object storage, image registry, secret management, ingress/Gateway, service-mesh TLS and node provisioning remain infrastructure dependencies.
Versioned desired-state API and least-privilege controller identities.
Reference and distributed compilation reconciliation.
Query, fragment, locator, hydration, reasoning and batch jobs.
Guaranteed QoS, default-deny policy, checksums and explicit ceilings.
02 · validation
crates/ngkg-kube derives the NgkgCompilation custom resource.charts/ngkg-crds installs its CRD.kube_runtime::Controller watch loops.Helm installs static Kubernetes objects and release values. It does not perform semantic compilation. After installation, the controllers watch NgkgCompilation desired state, read durable catalog truth and reconcile deterministic Kubernetes Jobs. The product is therefore an operator distributed as Helm charts.
03 · topology
API writes catalog record + NgkgCompilation
reconcile immutable phase Jobs + barriers
HPA/Kueue demand → pending pod → provider node autoscaler
HPA owns query, fragment, hydration and online-reasoner replicas.
Operators own deterministic Jobs; Kueue owns admission.
Provider autoscaler owns physical machine capacity.
04 · prerequisites
Version 1.33+ as declared by the checked-in platform/workload charts; kubectl and Helm compatible with the cluster.
Metrics Server, Kueue CRDs/controller, NetworkPolicy-enforcing CNI, CSI/default StorageClass and Gateway API or approved ingress.
Private PostgreSQL and S3-compatible object storage. Azure Blob and GCS require an approved S3-compatible gateway or MinIO because current values use s3:// or file://.
Private digest-pinned registry, external secret manager, TLS Secret/service mesh, workload identity and audited dependency CIDRs.
Whole-core allocatable CPU, adequate memory, local NVMe spill and kubelet CPU/topology policies matching the chart requirements.
Provider-integrated node provisioning. c8 supplies application demand and HPAs; it does not create cloud VM groups or credentials.
05 · chart stack
| Chart | Layer | Contents |
|---|---|---|
| ngkg-crds | CRD | Installs ngkg.io/v1alpha1 NgkgCompilation before either controller starts. |
| ngkg-platform | Control plane | API, reference operator, distributed operator, migration Job, RBAC, service accounts, API HPA and trusted ceiling ConfigMap. |
| ngkg-workloads | Data plane | Query, fragment, locator, hydration and reasoner workloads; HPAs, Kueue objects, disruption budgets, NetworkPolicies and node responsibility rules. |
06 · security inputs
kubectl create namespace c8
# Examples only: source values from your external secret manager in production.
kubectl -n c8 create secret generic c8-database --from-literal=DATABASE_URL='postgres://<user>:<password>@<private-host>/<database>'
kubectl -n c8 create secret generic c8-object-store --from-literal=AWS_ACCESS_KEY_ID='<id>' --from-literal=AWS_SECRET_ACCESS_KEY='<secret>'
kubectl -n c8 create secret generic c8-auth-tokens --from-file=tokens.json=./approved-tokens.json
kubectl -n c8 create secret generic c8-tenant-admission --from-file=policy.json=./approved-tenant-policy.json
kubectl -n c8 create secret tls c8-internal-tls --cert=./tls.crt --key=./tls.keyCalculate the token and tenant-policy SHA-256 values from the exact mounted bytes. On EKS, AKS and GKE, prefer provider workload identity over long-lived object-store keys when the selected S3-compatible client path supports it.
07 · values
images:
api: { repository: registry.example.com/c8/api, digest: sha256:<digest> }
operator: { repository: registry.example.com/c8/operator, digest: sha256:<digest> }
distributedOperator: { repository: registry.example.com/c8/distributed-operator, digest: sha256:<digest> }
distributedWorker: { repository: registry.example.com/c8/distributed-worker, digest: sha256:<digest> }
referenceWorker: { repository: registry.example.com/c8/reference-worker, digest: sha256:<digest> }
catalogMigrator: { repository: registry.example.com/c8/catalog-migrator, digest: sha256:<digest> }
dependencies:
databaseSecret: c8-database
authTokensSecret: c8-auth-tokens
objectStoreCredentialsSecret: c8-object-store
artifactStore:
baseUrl: s3://c8-artifacts/prod
batchScheduling:
localQueue: ngkg-batch
api:
replicas: 3
authTokensFileSha256: <64-lowercase-hex>
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 12platform:
kubernetesDistribution: generic # use rke2 only with the checked-in RKE2 profile
images:
query: { repository: registry.example.com/c8/online, digest: sha256:<digest> }
fragment: { repository: registry.example.com/c8/online, digest: sha256:<digest> }
locator: { repository: registry.example.com/c8/online, digest: sha256:<digest> }
hydration: { repository: registry.example.com/c8/online, digest: sha256:<digest> }
reasoner: { repository: registry.example.com/c8/reasoner, digest: sha256:<digest> }
tls:
existingSecret: c8-internal-tls
onlineServing:
databaseSecret: c8-database
authTokensSecret: c8-auth-tokens
authTokensFileSha256: <64-lowercase-hex>
tenantAdmissionSecret: c8-tenant-admission
tenantAdmissionPolicySha256: <64-lowercase-hex>
objectStoreCredentialsSecret: c8-object-store
artifactStoreBaseUrl: s3://c8-artifacts/prod
queryTimeoutSeconds: "120"
maxQueryResultRows: "1000000"
propertyPathHotVertexDegree: "100000"
propertyPathMaxHotVertexSplits: "64"
onlineReasoning:
enabled: true
sharedWorkspaceClaim: c8-reasoner-work
sharedTokenSecret: c8-reasoner-token
adapterSha256: <sha256-of-ngkg-hermit-adapter.jar>
hpcRuntime:
guaranteedQos: true
nodeSaturationTargetPercent: 80
cpuManagerPolicyRequired: static
topologyManagerPolicyRequired: restricted
memoryManagerPolicyRequired: Static
nestedParallelism: false
localNvme: { requiredForSpill: true }
networking:
externalApi: gateway-api
tlsMode: external-service-mesh-required
defaultDenyNetworkPolicies: true
dependencyCidrs:
- 10.40.0.0/24 # private PostgreSQL
- 10.41.0.0/24 # private S3/MinIO08 · installation
# Static validation
python3 scripts/validate_helm_values.py charts/ngkg-workloads/values.yaml --overlay approved-workloads-values.yaml
helm lint charts/ngkg-crds
helm lint charts/ngkg-platform -f approved-platform-values.yaml
helm lint charts/ngkg-workloads -f approved-workloads-values.yaml
# Render for review
helm template c8-crds charts/ngkg-crds --namespace c8 > rendered-crds.yaml
helm template c8-platform charts/ngkg-platform --namespace c8 -f approved-platform-values.yaml > rendered-platform.yaml
helm template c8-workloads charts/ngkg-workloads --namespace c8 -f approved-workloads-values.yaml > rendered-workloads.yaml
# Install in order
helm upgrade --install c8-crds charts/ngkg-crds --namespace c8 --create-namespace
helm upgrade --install c8-platform charts/ngkg-platform --namespace c8 -f approved-platform-values.yaml --wait --rollback-on-failure
helm upgrade --install c8-workloads charts/ngkg-workloads --namespace c8 -f approved-workloads-values.yaml --wait --rollback-on-failureFor RKE2, insert -f charts/ngkg-workloads/profiles/rke2.yaml before the approved workload overlay. Add profiles/production-workload-autoscaling.yaml only after the custom metrics API is installed and verified.
09 · environments
| Environment | Chart value | Overlay status | Node capacity | Provider work |
|---|---|---|---|---|
| RKE2 | rke2 | Checked-in profiles/rke2.yaml | Rancher provider Cluster Autoscaler, installed externally | RKE2 node labels/taints and kubelet manager policies |
| K3s | generic | Create a K3s overlay | Provider-specific CA or other node provisioner | HA server topology; pass equivalent kubelet labels, taints and policies |
| Amazon EKS | generic | Create an EKS overlay | Managed node groups + Cluster Autoscaler or Karpenter | IRSA/Pod Identity, EBS/local NVMe, private S3 endpoints |
| Azure AKS | generic | Create an AKS overlay | VMSS node pools + AKS Cluster Autoscaler | Workload Identity, managed disks/local NVMe, S3-compatible artifact storage |
| Google GKE | generic | Create a GKE overlay | Node pools + GKE Cluster Autoscaler/Node Auto-Provisioning | Workload Identity Federation, SSD/local NVMe, S3-compatible artifact storage |
| On-prem Kubernetes | generic | Create an infrastructure overlay | Infrastructure-integrated CA or static capacity | CNI NetworkPolicy, CSI, Gateway, private PostgreSQL and MinIO/S3 |
10 · parameter reference
| Parameter | Type | Default | Purpose |
|---|---|---|---|
| images.*.repository / digest | string | Required | Private repository and immutable SHA-256 image identity for every role. |
| tls.existingSecret | string | Required | Existing internal TLS Secret used by workload services. |
| onlineServing.*Secret | string | Required | Existing database, token, tenant-policy and object-store Secret names. |
| onlineServing.*Sha256 | 64-char hex | Required | Binds mounted authorization inputs to reviewed bytes. |
| Parameter | Type | Default | Purpose |
|---|---|---|---|
| api.replicas | integer | 3 | Baseline control-plane API replicas. |
| queryPlane.coordinatorReplicas | integer | 3 | Online SPARQL coordinator replicas. |
| autoscaling.<role>.minNodes/maxNodes | integer | Role-specific | Application demand envelope; provider node pools must be able to satisfy it. |
| metrics.cpuUtilizationTargetPercent | 1–80 | 80 | HPA CPU target capped to preserve workload headroom. |
| Parameter | Type | Default | Purpose |
|---|---|---|---|
| hpcRuntime.guaranteedQos | boolean | true | Requires CPU/memory requests to equal limits for critical workers. |
| onlineServing.maxQueryResultRows | numeric string | 1000000 | Fail-closed result-row ceiling. |
| onlineServing.propertyPathHotVertexDegree | numeric string | 100000 | Degree threshold that marks a path vertex for deterministic splitting. |
| onlineReasoning.maxExactPartitions | numeric string | 4096 | Hard ceiling for exact reasoner candidate partitions. |
| Parameter | Type | Default | Purpose |
|---|---|---|---|
| networking.dependencyCidrs | CIDR[] | [] | Audited egress to private PostgreSQL and object storage; empty intentionally denies access. |
| onlineServing.artifactStoreBaseUrl | URI | Required | Immutable artifact root, normally s3://... |
| hpcRuntime.localNvme.requiredForSpill | boolean | true | Requires node-local ephemeral storage for bounded spill and shuffle. |
| resources.<role> | Quantity map | Role-specific | Whole-core CPU, memory and ephemeral-storage requests/limits. |
11 · availability
12 · acceptance
kubectl get crd ngkgcompilations.ngkg.io
kubectl -n c8 get deploy,sts,pod,job
kubectl -n c8 get serviceaccount,role,rolebinding
kubectl -n c8 get hpa,pdb,networkpolicy
kubectl get nodes -L ngkg.io/workload,topology.kubernetes.io/zone
kubectl -n c8 logs deploy/c8-platform-ngkg-operator --since=10m
kubectl -n c8 logs deploy/c8-platform-ngkg-distributed-operator --since=10m
# Create or ingest through the c8 API, then observe reconciliation
kubectl -n c8 get ngkgcompilations -w
kubectl -n c8 describe ngkgcompilation <name>A healthy install is not a production qualification. Exercise an actual compilation, HPA scale event, matching node-pool expansion, worker replacement, complete partition barrier and deterministic query result.
13 · release lifecycle
# Inspect current releases and render the proposed change
helm -n c8 list
helm -n c8 history c8-platform
helm template c8-platform charts/ngkg-platform -n c8 -f approved-platform-values.yaml > proposed-platform.yaml
# Upgrade workloads after CRD/platform compatibility review
helm upgrade c8-platform charts/ngkg-platform -n c8 -f approved-platform-values.yaml --wait --rollback-on-failure
helm upgrade c8-workloads charts/ngkg-workloads -n c8 -f approved-workloads-values.yaml --wait --rollback-on-failure
# Roll back application charts; CRDs require their own reviewed procedure
helm rollback c8-workloads <revision> -n c8 --wait
helm rollback c8-platform <revision> -n c8 --wait
# Uninstall does not delete PostgreSQL, object artifacts or CRDs automatically
helm uninstall c8-workloads -n c8
helm uninstall c8-platform -n c8
helm uninstall c8-crds -n c814 · current truth