Come Utilizzare i MachineHealthCheck in OpenShift per migliorare lo stato del tuo cluster

La gestione dell’integrità dei nodi in un cluster OpenShift è fondamentale per garantire la stabilità e la scalabilità delle applicazioni distribuite. Una delle funzionalità chiave di OpenShift è il MachineHealthCheck, che consente di automatizzare il monitoraggio e la risoluzione dei problemi nelle macchine del cluster. Questo strumento è essenziale per ridurre i tempi di inattività e migliorare la gestione operativa del cluster. In questo articolo, esploreremo come funziona un MachineHealthCheck e come può essere configurato per ottimizzare lo stato dei nodi in un ambiente OpenShift.
Cos’è un MachineHealthCheck
Un MachineHealthCheck è una risorsa custom in OpenShift che consente di definire le condizioni in base alle quali le macchine in un cluster sono considerate non più in grado di operare (stato unhealthy). Questo componente monitora e corregge automaticamente le macchine in base a queste condizioni, garantendo stabilità e affidabilità del cluster.
La configurazione di MachineHealthCheck è utile per diversi motivi:
- Remediation automatica: le macchine che non superano i controlli, vengono eliminate e sostituite automaticamente, riducendo al minimo i tempi di inattività e garantendo un’alta disponibilità.
- Stabilità del cluster: identificando e correggendo le macchine non in grado di lavorare, si mantiene un ambiente cluster stabile, fondamentale per i carichi di lavoro di produzione.
- Efficienza delle risorse: aiuta a gestire le risorse in modo efficace assicurando che i nodi unhealthy vengano prontamente sostituiti, prevenendo lo spreco di risorse.
Esempio
Ecco un esempio di configurazione MachineHealthCheck:
apiVersion: machine.openshift.io/v1beta1
kind: MachineHealthCheck
metadata:
name: example #1
namespace: openshift-machine-api
spec:
selector:
matchLabels: #2
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
unhealthyConditions:
- type: "Ready"
timeout: "300s"
status: "False"
- type: "Ready"
timeout: "300s"
status: "Unknown"
maxUnhealthy: "40%" #4
nodeStartupTimeout: "10m" #5
Vediamo le righe più interessanti di questa definizione:
- #1 Fornisce informazioni di base come il nome e lo spazio dei nomi.
- #2: Definisce quali macchine monitorare in base alle etichette. In questo caso, prende di mira le macchine con ruolo e tipo impostati su “worker”.
- #3: Elenca le condizioni che definiscono una macchina non integrata. Qui, una macchina è considerata non integrata se non è pronta (stato: “Falso” o stato: “Sconosciuto”) per più di 300 secondi.
- #4: Imposta la percentuale massima di macchine autorizzate a essere non integre prima che la correzione si interrompa. Qui, è impostata sul 40%.
- #5: Specifica per quanto tempo attendere che un nodo si unisca al cluster prima di considerarlo non integro. In questo esempio, è impostato su 10 minuti.
Per creare questo MachineHealthCheck, ti basterà salvare lo YAML in un file (ad esempio, machinehealthcheck-sample.yaml
) ed eseguire il comando seguente:
oc create -f machinehealthcheck-sample.yaml
Limitazioni
Come indicato nella documentazione, ci sono delle considerazioni da fare prima di mettere in azione una risorsa come questa:
- Solo i nodi che fanno parte di un MachineSet vengono ripristinate da una risorsa come questa.
- Se il nodo di una macchina viene rimosso dal cluster manualmente, ad esempio, il MachineHealthCheck considera il nodo come unhealthy e lo ripristina immediatamente.
- Se il nodo corrispondente di una macchina non risulta operativo nel cluster dopo il periodo indicato nel parametro nodeStartupTimeout, la macchina viene ripristinata automaticamente.