L’obiettivo del presente articolo è illustrare come realizzare un cluster Kubernetes basato su RKE2, con la seguente architettura:
Reinstallazione Pulita di RKE2
Dopo i test precedenti, al fine di avere una situazione pulita ho deciso di ripartire da zero.
Disinstallazione completa
Su ogni nodo:
- sudo /usr/local/bin/rke2-uninstall.sh
- sudo rm -rf /var/lib/rancher /var/lib/kubelet /etc/cni /var/lib/cni /opt/cni
Pulizia mount iSCSI eventualmente attivi:
- sudo umount -l /var/lib/kubelet/plugins/kubernetes.io/csi/*/*/globalmount
Reboot nodi.
Installazione RKE2 Server (Management Node)
Configurazione /etc/rancher/rke2/config.yaml:
- write-kubeconfig-mode: “0644”
- tls-san:
- – “IP”
- node-ip: “IP”
In Kubernetes (k8s), TLS SAN è l’acronimo di Subject Alternative Name. E’ un’estensione del certificato SSL/TLS X.509 utilizzata per specificare molteplici nomi host (DNS) o indirizzi IP validi per un singolo certificato
Installazione:
- curl -sfL https://get.rke2.io | sh –
- sudo systemctl enable rke2-server –now
Esportazione kubeconfig:
- export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
Join Worker Nodes
Su ciascun worker:
- curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE=”agent” sh –
All’interno del file di configurazione /etc/rancher/rke2/config.yaml è necessario aggiungere le voci server e il token di accesso
- server: https://ip-management:9345
- token: <server_token>
NB: per generare il token sul management lanciare il comando:
- sudo cat /var/lib/rancher/rke2/server/node-token
Avvio: sudo systemctl enable rke2-agent –now
Al fine di separare i diversi ruoli nel cluster conviene assegnare delle label ai worker con i seguenti comandi:
- kubectl label node nuc-01 workload=apps
- kubectl label node nuc-02 workload=apps
- kubectl label node nuc-03 workload=apps
Taint Management: Il taint (macchia/marchio) di Kubernetes è una proprietà applicata a un nodo per “respingere” i pod, impedendo loro di pianificarvi sopra a meno che non abbiano una specifica toleration (tolleranza). Nel nostro caso viene applicato al nodo di mangement.
- kubectl taint nodes nuc-mng node-type=management:NoSchedule
Risultato: Nessun microservizio girerà sul management, lo scheduling è forzato sui worker
Ingress NGINX: Un controller Kubernetes Ingress è un componente software specializzato che gestisce il traffico in entrata verso le applicazioni in esecuzione
Installazione via Helm:
- helm install ingress-nginx ingress-nginx/ingress-nginx \
- –namespace ingress-nginx \
- –create-namespace \
- –set controller.nodeSelector.workload=apps
Cert-Manager: cert-manager è un add-on open-source per Kubernetes che automatizza la gestione, l’emissione e il rinnovo dei certificati TLS/SSL
Installazione CRD:
- kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.crds.yaml
- Installazione Helm (disabilitando startupapicheck nel lab):
- helm install cert-manager jetstack/cert-manager \
- –namespace cert-manager \
- –create-namespace \
- –set startupapicheck.enabled=false \
- –set nodeSelector.workload=apps
Installazione Synology CSI Driver
E’ necessario che ogni singolo worker veda via iSCSI lo storage in modo che il comando sudo iscsiadm -m discovery -t sendtargets -p <IP_NAS> mostri i target.
Per installare il csi driver:
- git clone https://github.com/SynologyOpenSource/synology-csi.git
- cd synology-csi
Nella cartella
Modificare il file ~/synology-csi/config/client-info.yaml inserendo le credenziali richieste
Creare un secret:
kubectl -n kube-system create secret generic synology-csi-secret \
–from-literal=username='<DSM_USER>’ \
–from-literal=password='<DSM_PASSWORD>’
e per ultimo caricare il config.yaml nel config map:
kubectl -n kube-system create configmap synology-csi-config \
–from-file=config.yml=./config.yml
Gli ultimi passaggi sono quelli di creare una Storage Class (sc) e una Volume Snapshot Class al fine di rendere il cluster k8s in grado di:
- Gestire snapshot nativi
- Ripristini di PVC da snapshot
- Pronto per integrazione con Kasten K10
🏁 Stato Finale del Cluster
✔ RKE2
✔ Calico
✔ Ingress NGINX
✔ Cert-Manager
✔ Synology CSI (iSCSI)
✔ Snapshot Kubernetes
✔ Separazione Management / Workload
Prossimi step:
- Kasten K10
- Disaster Recovery test
- AI workload
- Database stateful

