In Kubernetes abbiamo decine di risorse che possiamo controllare tramite la CLI. Molte di queste risorse sono immediatamente disponibili una volta fatto l'apply del file di manifest mentre, per altre, è necessario attendere un certo periodo. In questo articolo vedremo come attendere che una risorsa sia disponibile prima di proseguire con l'esecuzione di un eventuale script che necessita di quelle risorse, con un particolare riferimento ai pod.
Per mettere in esecuzione un pod, possiamo eseguire un comando simile al seguente:
kubectl run "$POD_NAME" --image ubuntu:latest -- /bin/bash -c "sleep infinity"
Se non ci fosse l'invocazione della bash, il pod terminerebbe immediatamente dopo l'avvio. In questo modo, invece, il pod rimane in esecuzione fino ad una terminazione manuale (o per motivi di altra natura).
Tuttavia, il pod non è messo in esecuzione immediatamente. E' lo scheduler ad assegnarlo ad un nodo, in base alle risorse disponibili e alle policy di scheduling. Non appena assegnato, il pod viene creato e poi seguiranno le fasi di creazione del container e di avvio dello stesso. Questo processo può richiedere alcuni secondi, anche se il pod è semplice e non richiede particolari risorse.
Il pod passa per più stati, ma possiamo considerarlo pronto secondo due criteri: Running o Ready. Nel primo caso significa proprio che il container è stato creato ed è in esecuzione. Nel secondo, invece, che il pod è anche in grado di rispondere ad eventuali richieste poichè i readiness probe sono stati superati.
Per quanto riguarda lo stato Running, dobbiamo impostare uno script che controlla la fase di inizializzazione:
while true; do
POD_STATE=$(kubectl get pod "$POD_NAME" -o jsonpath="{.status.phase}")
if [[ "$POD_STATE" == "Running" ]]; then
break
fi
sleep 1
doneQualora lo stato del pod non sia ancora quello scelto, allora lo script si metterà in pausa per un secondo e poi ricontrollerà, e così via fino allo stato desiderato, quando lo script proseguirà la sua esecuzione.
Per individuare invece lo stato Ready, possiamo utilizzare direttamente kubectl:
kubectl wait --for=condition=Ready pod/$POD_NAME
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzo delle Feature flag in ASP.NET Core
Utilizzare le View Transition API di JavaScript
Filtrare i dati in ASP.NET Core usando OpenTelemetry su Azure Monitor
Utilizzare le direttive più importanti in una file based app .NET
Importare repository da Bitbucket a GitHub Enterprise Cloud
GitHub Copilot CLI in ambienti offline
Lockfiles per le GitHub Actions
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
Logica Graceful Degradation in HTML e CSS
How to be a DevOps engineer in the AI era
Creare una UI per i tool MCP con resource e Azure Functions
Utilizzare le librerie native di .NET per decomprimere un file zip
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


