Vai al contenuto principale

Riferimento API – Kubernetes

Questo riferimento descrive l'API Kubernetes di Hikube (apps.cozystack.io/v1alpha1), che effettua il provisioning di cluster Kubernetes gestiti (control plane Kamaji + worker KubeVirt). I campi sottostanti corrispondono allo schema realmente esposto dalla piattaforma.

cluster.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: my-cluster
spec:
version: v1.35
storageClass: replicated
controlPlane:
replicas: 2
nodeGroups:
md0:
minReplicas: 1
maxReplicas: 5
instanceType: u1.medium
ephemeralStorage: 20Gi
roles:
- ingress-nginx
addons:
ingressNginx:
enabled: true

Specifica

ParametroTipoDescrizionePredefinito
versionstringVersione Kubernetes (major.minor) — vedi versioniv1.35
storageClassstringClasse di archiviazione per i volumi persistentireplicated
hoststringNome host esterno del cluster. Predefinito <cluster>.<tenant-host>""
controlPlaneobjectConfigurazione del piano di controllo — vedi Concetti{}
nodeGroupsobjectMappa dei gruppi di worker — vedi nodeGroupsvedi predefinito
addonsobjectModuli aggiuntivi del cluster — vedi addons{}

version

version seleziona la versione minore di Kubernetes da distribuire.

Valori supportati
v1.35 (predefinito), v1.34, v1.33, v1.32, v1.31, v1.30
spec:
version: v1.34

Vedi la guida Aggiornare un cluster per l'avanzamento di versione.


nodeGroups

nodeGroups è una mappa (<nome>: {…}) che descrive i gruppi di worker. Ogni gruppo è soggetto ad autoscaling tra minReplicas e maxReplicas.

CampoTipoDescrizionePredefinito
minReplicasintegerNumero minimo di nodi (0 = scale-to-zero possibile)0
maxReplicasintegerNumero massimo di nodi10
instanceTypestringProfilo dei nodi (vedi tipi di istanze)u1.medium
ephemeralStorageint/stringDimensione dell'archiviazione effimera per nodo (es: 20Gi)20Gi
resourcesobjectOverride esplicito cpu / memory per nodo{}
gpus[]objectGPU collegate ai nodi (gpus[].name) — vedi GPU con Kubernetes[]
roles[]stringRuoli dei nodi (es: ingress-nginx)[]
ephemeralStorage è uno scalare

Indicate direttamente una dimensione (ephemeralStorage: 20Gi), non un oggetto {size: …}.

spec:
nodeGroups:
workers:
minReplicas: 1
maxReplicas: 10
instanceType: u1.xlarge
ephemeralStorage: 50Gi
roles:
- ingress-nginx
gpu-workers:
minReplicas: 0
maxReplicas: 4
instanceType: u1.2xlarge
ephemeralStorage: 200Gi
gpus:
- name: nvidia.com/AD102GL_L40S

Vedi Concetti → Node Groups per il dettaglio dei campi.


addons

Il blocco addons attiva i moduli aggiuntivi installati nel cluster tenant. La maggior parte espone enabled e valuesOverride (override dei valori Helm).

AddonCampiRuolo
certManagerenabled, valuesOverrideGestione automatica dei certificati TLS
ingressNginxenabled, exposeMethod, hosts, valuesOverrideController Ingress NGINX (vedi sotto)
fluxcdenabled, valuesOverrideGitOps (Flux)
gatewayAPIenabledSupporto della Gateway API
gpuOperatorenabled, valuesOverrideNVIDIA GPU Operator (richiesto per i worker GPU)
monitoringAgentsenabled, valuesOverrideAgenti di monitoring/log
veleroenabled, valuesOverrideBackup / ripristino
ciliumvaluesOverrideCNI Cilium (sempre attivo, solo override)
corednsvaluesOverrideCoreDNS (sempre attivo, solo override)
verticalPodAutoscalervaluesOverrideVertical Pod Autoscaler (sempre attivo)
nota

cilium, coredns e verticalPodAutoscaler non hanno un campo enabled (componenti di base) — solo valuesOverride è utilizzabile. gatewayAPI espone solo enabled.

certManager / fluxcd / velero / monitoringAgents / gpuOperator

spec:
addons:
certManager:
enabled: true
gpuOperator:
enabled: true # indispensabile se dei nodeGroups portano delle gpus
velero:
enabled: true
monitoringAgents:
enabled: true
fluxcd:
enabled: true

ingressNginx

CampoTipoDescrizionePredefinito
enabledbooleanAttiva il controller (richiede nodi con il ruolo ingress-nginx)false
exposeMethodstringMetodo di esposizione: Proxied o LoadBalancerProxied
hosts[]stringDomini instradati verso questo cluster quando exposeMethod: Proxied[]
valuesOverrideobjectOverride dei valori Helm{}
spec:
addons:
ingressNginx:
enabled: true
exposeMethod: Proxied
hosts:
- app.example.com
- "*.services.example.com"

Esempi completi

Cluster di produzione

production-cluster.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: production
spec:
version: v1.34
storageClass: replicated
host: k8s-prod.example.com

controlPlane:
replicas: 3

nodeGroups:
web:
minReplicas: 3
maxReplicas: 10
instanceType: s1.large
ephemeralStorage: 50Gi
roles:
- ingress-nginx
compute:
minReplicas: 1
maxReplicas: 5
instanceType: u1.4xlarge
ephemeralStorage: 100Gi
roles: []

addons:
certManager:
enabled: true
ingressNginx:
enabled: true
exposeMethod: Proxied
hosts:
- app.example.com
- api.example.com
fluxcd:
enabled: true
monitoringAgents:
enabled: true
velero:
enabled: true

Cluster di sviluppo

development-cluster.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: development
spec:
storageClass: replicated

controlPlane:
replicas: 1 # risparmio di risorse (nessuna HA)

nodeGroups:
general:
minReplicas: 1
maxReplicas: 3
instanceType: s1.medium
ephemeralStorage: 30Gi
roles:
- ingress-nginx

addons:
certManager:
enabled: true
ingressNginx:
enabled: true
hosts:
- "*.dev.example.com"

Cluster ML/AI con GPU

ml-cluster.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: machine-learning
spec:
storageClass: replicated

controlPlane:
replicas: 2

nodeGroups:
system:
minReplicas: 2
maxReplicas: 4
instanceType: s1.large
ephemeralStorage: 50Gi
roles:
- ingress-nginx
gpu:
minReplicas: 0 # scale-to-zero fuori carico
maxReplicas: 10
instanceType: u1.2xlarge
ephemeralStorage: 500Gi # dataset
gpus:
- name: nvidia.com/AD102GL_L40S
roles: []

addons:
certManager:
enabled: true
# Richiesto per esporre le GPU ai pod (nvidia.com/gpu)
gpuOperator:
enabled: true
monitoringAgents:
enabled: true
Buone pratiche
  • controlPlane.replicas: 3 in produzione (quorum etcd / HA).
  • Separate i workload in node group dedicati (web, compute, GPU).
  • Per le GPU: node group con gpus e addons.gpuOperator.enabled: true.
  • Attivate il monitoring e i backup (Velero) sui cluster critici.
Attenzione
  • Le eliminazioni di cluster sono irreversibili — verificate i vostri backup.
  • Senza l'addon gpuOperator, le GPU collegate ai worker non vengono esposte ai pod.