Parleremo in particolare delle varie politiche di riavvio di Kubernetes in questo articolo. Discutiamo prima le varie politiche che vengono utilizzate quando Kubernetes deve essere riavviato. È possibile utilizzare queste politiche per impedire che un certo carico di lavoro venga distribuito nel cluster. Sebbene imponi standard severi nel cluster vengono in genere fatti per garantire la conformità, gli amministratori del cluster dovrebbero anche seguire diverse migliori pratiche che sono state suggerite.
Cos'è la politica di riavvio di Kubernetes?
Ogni baccello di Kubernetes aderisce a un ciclo di vita specifico. Inizia nella fase "in sospeso" e, se uno o più contenitori primari lanciati con successo, passano alla fase di "corsa". A seconda che i contenitori nel pod abbiano successo o falliscono, il processo si sposta sulla fase "successiva" o "fallita".
Per riavviare la politica a livello dei contenitori applicati, è possibile utilizzare tre opzioni:
Sempre
Ogni volta che un contenitore termina, Kubernetes ne produce uno nuovo poiché il pod deve essere sempre attivo.
Onfailure
Se il contenitore esce con un codice di ritorno diverso da 0, si riavvia solo una volta. Il riavvio non è necessario per i contenitori che restituiscono 0 (successo).
Mai
Il contenitore non è riuscito a riavviare.
Ora, nella sezione seguente, discuteremo di come si può riavviare un pod.
Come riavviare un pod in kubernetes?
Per riavviare un baccello Kubernetes, emissione comandi utilizzando lo strumento Kubectl. Si connetterà con il server Kubeapi. Esploriamo le opzioni disponibili:
Riavvia un contenitore all'interno di un pod
Un baccello può contenere diversi contenitori. D'altra parte, ti connetti essenzialmente al contenitore primario all'interno di un pod quando ti connetti ad esso. Puoi connetterti a ciascun contenitore che hai definito in un caso se ne hai definito più di uno.
È possibile vedere di seguito un esempio di specifica pod multi-container:
Questo descrive un volume condiviso e due contenitori. Il file HTML sarà servito dal contenitore Nginx e ogni secondo il contenitore Ubuntu aggiungerà un timbro di data al file HTML.
Dal momento che non hai specificato a quale contenitore connettersi, sceglierà automaticamente il primo (nginx) quando si tenta di connettersi a quel pod. Lo screenshot è allegato di seguito:
Ora puoi tentare di terminare il processo PID 1 all'interno del contenitore attualmente attivo. Esegui i seguenti comandi come root per raggiungere questo obiettivo:
Puoi anche utilizzare lo strumento Kubectl descritto di seguito:
Secondo la specifica POD, K8s tenterà ora di riavviare il contenitore distrutto. Per questo, il comando "Descrivi" viene usato come segue:
Ecco il risultato del comando sopra:
Lo stato attuale sta "andando", mentre lo stato precedente è stato "terminato."Ciò significa che il contenitore è stato riavviato, secondo questo. Tuttavia, non tutti i contenitori possono accedere alle credenziali di root. Questo è il motivo per cui questo metodo potrebbe non essere molto utile.
Riavvia un pod ridimensionando
Ridimensionare il conteggio delle repliche di un pod a 0 e quindi ridimensionarlo fino a 1 è il modo più semplice per riavviarlo. È invece necessario costruire una distribuzione perché il comando di scala non può essere utilizzato sui pod. Ecco un modo semplice per farlo:
Scala a 0 e poi a 1 dopo. In questo modo, il pod verrà terminato e quindi ridistribuito nel cluster:
Le repliche sono impostate su 1 come puoi vedere in questa immagine.
Per visualizzare i dettagli di distribuzione, ora abbiamo usato “Kubectl Get Deployments."Quanto segue è un elenco sia del comando che del risultato:
Riavvia un pod eliminandolo e ridistribuendolo
Utilizzando il comando "KubeCtl DelEte", è possibile eliminare un pod e quindi ridistribuirlo. Tuttavia, questo approccio è piuttosto dirompente, quindi non è consigliato.
Riavvia un baccello usando il lancio
Per riavviare un pod usando il modo sopra descritto, è necessario distruggere il baccello esistente e quindi crearne uno nuovo o ridimensionare il conteggio delle repliche e quindi su. Con Kubernetes versione 1.15, è possibile riavviare una distribuzione in modo rotolante. Questa è la procedura suggerita per il riavvio di un pod. Inserisci semplicemente il seguente comando per iniziare:
Ora, se tieni d'occhio lo stato di distribuzione su un terminale diverso, noterai il flusso di eventi come segue:
Se è salutare, ridimensionerà la replica precedente della distribuzione e farà girare una nuova replica del pod. Il risultato è lo stesso, tranne in questo approccio, l'orchestrazione sottostante è stata gestita da Kubernetes.
Come possono essere riavviati i pod di Kubernetes in diversi modi?
Cominciamo per la prima volta con il contenitore Docker. Con il seguente comando, i contenitori Docker possono essere riavviati:
> Docker Riavvia Container_ID
Ma in Kubernetes, non esiste un comando comparabile per riavviare i baccelli, soprattutto se non esiste un file YAML specificato. In alternativa, puoi riavviare i baccelli Kubernetes usando i comandi Kubectl. Sono elencati i seguenti comandi:
Il comando Kubectl set env
Un metodo è utilizzare il comando di scala kubectl. Ciò modificherà il numero di repliche del pod che deve essere riavviato. Di seguito è riportato un comando di esempio su come impostare le repliche nel pod in due:
> Kubectl Scale Deployment First-Diswing --Replicas = 2
Comando di riavvio di lancio
Qui, dimostreremo come utilizzare il comando RIPART RILUTA per riavviare i baccelli di Kubernetes:
> Kubectl Rimplementazione Riavvia Distribuzione di prima dispiegamento -N Spazio demo
Viene detto al controller di sterminare ogni pod individualmente dal comando. Quindi ridimensiona nuovi baccelli usando la replicaset. Fino a quando ogni nuovo pod non è più recente di ogni pod attuale quando riprende il controller, questo processo continua.
Il comando Elimina Pod
Questa sezione passerà come utilizzare il comando Rimuovi per riavviare i baccelli di Kubernetes. Puoi notare che abbiamo usato il comando successivo per sbarazzarci dell'oggetto API POD in questa immagine:
.> kubectl eliminare il primo pod -pod -n demo_namespace
Quello previsto è contraddetto dall'eliminazione dell'oggetto pod perché l'API di Kubernetes è dichiarativa. Per mantenere la coerenza con quello previsto, il pod viene quindi ricreato.
Un pod può essere riavviato alla volta usando il comando precedente. Fare riferimento al comando allegato per riavviare diversi pod:
> Kubectl Elimina ReplicAset Pods-Multiple-N Demo_Namespace
Il comando sopra menzionato riavvia ogni pod eliminando l'intera replica di baccelli e quindi creandolo da zero.
Conclusione
Questo post ha fornito informazioni sulle varie politiche di riavvio di Kubernetes. Abbiamo illustrato ogni fase con l'aiuto di esempi di esempio. Inoltre, prova questi comandi e vedi quale output generano.