mirror of
https://github.com/cozystack/cozystack.git
synced 2026-11-04 02:57:27 +09:00
The nodeGroups docs still described the old denylist behaviour: "unlisted NodeGroup fields pass through to the wrapped chart unvalidated". After the switch to an allowlist (pick) both halves are wrong: fields go to the kubernetes-nodes pool chart (not the wrapped kubernetes chart), and anything the pick does not name is dropped, not passed through. A tenant that sets e.g. talos.version on a nodeGroup gets no error and no effect (accepted-but-inert). Correct the source @param and the hand-written README intro, regenerate schema/README/cozyrd, and refresh the stale "omit" wording in the splice test comment to say allowlist. Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
36 lines
3.5 KiB
YAML
36 lines
3.5 KiB
YAML
##
|
|
## @section Cluster shape
|
|
##
|
|
|
|
## @typedef {struct} Resources - Explicit CPU and memory configuration for a node or component.
|
|
## @field {quantity} [cpu] - CPU available.
|
|
## @field {quantity} [memory] - Memory (RAM) available.
|
|
|
|
## @typedef {struct} GPU - GPU configuration.
|
|
## @field {string} name - Name of GPU, such as "nvidia.com/AD102GL_L40S".
|
|
## @x-cozystack-options {source: gpu}
|
|
|
|
## @typedef {struct} Kubelet - Kubelet resource reservations for worker nodes.
|
|
## @field {string} [systemReservedMemory] - Memory reserved for host OS. Auto-computed from instanceType if empty.
|
|
## @field {string} [kubeReservedMemory] - Memory reserved for kubelet and container runtime. Auto-computed from instanceType if empty.
|
|
## @field {string} [systemReservedCpu] - CPU reserved for host OS. Auto-computed from instanceType if empty.
|
|
## @field {string} [kubeReservedCpu] - CPU reserved for kubelet and container runtime. Auto-computed from instanceType if empty.
|
|
## @field {string} [evictionHardMemory]="7%" - Hard eviction threshold for memory (absolute like 200Mi or percentage like 7%).
|
|
## @field {string} [evictionSoftMemory]="10%" - Soft eviction threshold for memory (absolute like 1Gi or percentage like 10%).
|
|
|
|
## @typedef {struct} NodeGroup - Worker node group configuration.
|
|
## @field {int} minReplicas=0 - Minimum number of replicas.
|
|
## @field {int} maxReplicas=10 - Maximum number of replicas.
|
|
## @field {string} instanceType="u1.medium" - Virtual machine instance type.
|
|
## @x-cozystack-options {source: instancetype}
|
|
## @field {quantity} diskSize="20Gi" - System disk size for the worker VM. Carries the Talos OS image, kubelet state, containerd image cache, and any local-path PVCs.
|
|
## @field {string} [storageClass] - StorageClass for worker node persistent disks. When empty, the `kubernetes-nodes` pool chart applies its own default (`replicated`).
|
|
## @x-cozystack-options {source: storageclass}
|
|
## @field {[]string} roles - List of node roles. At least one group must carry `ingress-nginx` — the module pins the ingress-nginx addon on, and its controller only schedules onto nodes with that role (enforced at render time).
|
|
## @field {Resources} [resources] - Explicit CPU and memory for each worker node, as an alternative to `instanceType` sizing. Set both `cpu` and `memory` together or neither.
|
|
## @field {[]GPU} gpus - List of GPUs to attach (NVIDIA driver requires at least 4 GiB RAM).
|
|
## @field {Kubelet} [kubelet] - Kubelet resource reservations for this node group.
|
|
|
|
## @param {map[string]NodeGroup} nodeGroups - Worker node groups of the ComputePlane cluster (cluster shape only — the security posture is fixed by the module and cannot be overridden through this knob: the module forwards only the documented per-pool fields to the `kubernetes-nodes` pool chart, so any other `NodeGroup` field, e.g. `talos`/`version`/`images`, is silently dropped — accepted but inert). Same structure as the `kubernetes` application's `nodeGroups`. When left empty, the module itself materialises a default scale-from-zero `md0` pool with `roles: [ingress-nginx]` (the wrapped `kubernetes` chart no longer injects one after the Phase 2 split), so the cluster sits idle until a pending Pod (e.g. the ingress-nginx controller) triggers the cluster-autoscaler. Supplied groups are authoritative (not merged with the default), so at least one of them must carry `roles: [ingress-nginx]` — enforced at render time. Each supplied pool key must be at most 15 characters so its `kubernetes-nodes-computeplane-cluster-<pool>` HelmRelease name fits Helm's 53-character limit — also enforced at render time.
|
|
nodeGroups: {}
|