π Distribuire Kubernetes in 5 minuti
Questa guida vi accompagna nella creazione del vostro primo cluster Kubernetes su Hikube, dalla configurazione di base alla distribuzione di un'applicazione di test.
Prerequisitiβ
Prima di iniziare, assicuratevi di avere:
- Accesso a un tenant Hikube con permessi appropriati
- CLI kubectl configurato per interagire con l'API Hikube
- Nozioni di base Kubernetes (pod, servizi, deployment)
Fase 1: Configurazione del Clusterβ
Cluster Kubernetes Baseβ
Create un file my-first-cluster.yaml con la seguente configurazione:
apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: my-first-cluster
spec:
# Configurazione del piano di controllo
controlPlane:
replicas: 2 # Alta disponibilitΓ
# Configurazione dei nodi worker
nodeGroups:
general:
minReplicas: 1
maxReplicas: 5
instanceType: "s1.large" # 4 vCPU, 8 GB RAM
ephemeralStorage: 50Gi # Archiviazione partizione sistema
resources: {} # Richiesto β instanceType definisce i valori
roles:
- ingress-nginx # Supporto Ingress
# Attiva la replica sull'archiviazione
storageClass: "replicated"
# Add-on essenziali attivati
addons:
certManager:
enabled: true
ingressNginx:
enabled: true
hosts:
- my-app.example.com
resources obbligatorioIl campo resources e richiesto in ogni node group, anche se utilizzate instanceType. Con resources: {}, i valori CPU/memoria sono determinati da instanceType. Se specificate valori espliciti (es. cpu: 4, memory: 8Gi), questi sovrascrivono instanceType.
Distribuire il Clusterβ
# Applicare la configurazione
kubectl apply -f my-first-cluster.yaml
# Verificare lo stato di distribuzione
kubectl get kubernetes my-first-cluster -w
Tempo di attesa: Il cluster sara pronto in 3-5 minuti
π Fase 2: Accesso al Clusterβ
Recuperare il Kubeconfigβ
Una volta distribuito il cluster, recuperate le informazioni di accesso:
# Recuperare il kubeconfig del cluster
kubectl get tenantsecret my-first-cluster-admin-kubeconfig \
-o go-template='{{ index .data "super-admin.conf" | base64decode }}' \
> my-cluster-kubeconfig.yaml
# Configurare kubectl per il nuovo cluster
export KUBECONFIG=my-cluster-kubeconfig.yaml
# Testare la connessione
kubectl get nodes
Risultato atteso:
NAME STATUS ROLES AGE VERSION
my-first-cluster-md0-xxxxx Ready <none> 2m v1.29.0
π Fase 3: Distribuzione di un'Applicazioneβ
Applicazione dimostrativaβ
Distribuiamo un'applicazione web semplice per testare il nostro cluster:
---
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-hikube
labels:
app: hello-hikube
spec:
replicas: 3
selector:
matchLabels:
app: hello-hikube
template:
metadata:
labels:
app: hello-hikube
spec:
containers:
- name: app
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
env:
- name: WELCOME_MESSAGE
value: "Hello from Hikube Kubernetes!"
---
# Service
apiVersion: v1
kind: Service
metadata:
name: hello-hikube-service
spec:
selector:
app: hello-hikube
ports:
- port: 80
targetPort: 80
type: ClusterIP
---
# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-hikube-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello-hikube-service
port:
number: 80
Distribuire l'Applicazioneβ
# Distribuire l'applicazione
kubectl apply -f demo-app.yaml
# Verificare la distribuzione
kubectl get deployments
kubectl get pods
kubectl get services
kubectl get ingress
β Fase 4: Verifica e Testβ
Verificare che tutto funzioniβ
# Stato dei pod
kubectl get pods -l app=hello-hikube
Risultato atteso:
NAME READY STATUS RESTARTS AGE
hello-hikube-xxxxx-xxxx 1/1 Running 0 1m
hello-hikube-xxxxx-yyyy 1/1 Running 0 1m
hello-hikube-xxxxx-zzzz 1/1 Running 0 1m
Accesso all'applicazioneβ
# Ottenere l'IP esterno dell'Ingress Controller
kubectl get svc -n ingress-nginx ingress-nginx-controller
# Test locale (in attesa della configurazione DNS)
kubectl port-forward svc/hello-hikube-service 8080:80 &
curl http://localhost:8080
π Fase 5: Monitoring e Osservabilitaβ
Dashboard Integrateβ
Se avete attivato il monitoring durante la configurazione del tenant:
# Verificare i servizi di monitoring
kubectl get pods -n monitoring
# Accedere a Grafana (secondo la configurazione del tenant)
kubectl get ingress -n monitoring
Metriche del Clusterβ
# Metriche dei nodi
kubectl top nodes
# Metriche dei pod
kubectl top pods
# Eventi del cluster
kubectl get events --sort-by=.metadata.creationTimestamp
ποΈ Fase 6: Gestione e Scalingβ
Scaling del Clusterβ
Il cluster Hikube puΓ² regolare automaticamente il numero di nodi in base alla domanda:
# Verificare il numero di nodi attuale
kubectl get nodes
# Vedere la configurazione del nodeGroup
kubectl get kubernetes my-first-cluster -o yaml | grep -A 10 nodeGroups
# Lo scaling automatico si attiva in base alle risorse richieste
# Esempio: distribuire piΓΉ pod richiederΓ piΓΉ nodi
kubectl scale deployment hello-hikube --replicas=6
Osservare lo Scalingβ
# Vedere l'aggiunta automatica di nodi
kubectl get nodes -w
# Verificare le metriche di scaling
kubectl describe hpa # Se HPA Γ¨ configurato
π§ Fase 7: Prossime Azioniβ
Configurazione Avanzataβ
Ora che il vostro cluster funziona, esplorate le funzionalitΓ avanzate:
# Per aggiungere node group, modificate il file YAML e ri-applicate
# Esempio in my-first-cluster.yaml:
# nodeGroups:
# general:
# # ... configurazione esistente
# compute:
# minReplicas: 0
# maxReplicas: 3
# instanceType: "s1.2xlarge"
# ephemeralStorage: 100Gi
# Poi applicare le modifiche
kubectl apply -f my-first-cluster.yaml
Archiviazione Persistenteβ
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-app-storage
spec:
accessModes:
- ReadWriteOnce
storageClassName: replicated # Archiviazione altamente disponibile
resources:
requests:
storage: 10Gi
π¨ Risoluzione Rapida dei Problemiβ
Problemi Comuniβ
# Cluster in creazione troppo lungo
kubectl describe kubernetes my-first-cluster
# Nodi non Ready
kubectl describe nodes
# Pod in errore
kubectl logs -l app=hello-hikube
kubectl describe pod <pod-name>
# Ingress non funzionante
kubectl describe ingress hello-hikube-ingress
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller
Puliziaβ
# Eliminare l'applicazione di test
kubectl delete -f demo-app.yaml
# Eliminare il cluster (ATTENZIONE: azione irreversibile)
kubectl delete kubernetes my-first-cluster
π Riepilogoβ
Avete creato:
- Un cluster Kubernetes con piano di controllo gestito
- Nodi worker con scaling automatico (1-5 nodi)
- Un'applicazione d'esempio con Ingress
- Un certificato SSL automatico tramite cert-manager
π Prossimi Passiβ
- Riferimento API β Configurazione completa dei cluster
- GPU β Utilizzare GPU con Kubernetes
π‘ Consiglio: Conservate il vostro file kubeconfig in modo sicuro e pensate a configurare RBAC per controllare l'accesso al vostro cluster secondo i vostri team e ambienti.